hweight.S 846 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. #include <linux/linkage.h>
  2. .text
  3. .align 32
  4. ENTRY(__arch_hweight8)
  5. ba,pt %xcc, __sw_hweight8
  6. nop
  7. nop
  8. ENDPROC(__arch_hweight8)
  9. .section .popc_3insn_patch, "ax"
  10. .word __arch_hweight8
  11. sllx %o0, 64-8, %g1
  12. retl
  13. popc %g1, %o0
  14. .previous
  15. ENTRY(__arch_hweight16)
  16. ba,pt %xcc, __sw_hweight16
  17. nop
  18. nop
  19. ENDPROC(__arch_hweight16)
  20. .section .popc_3insn_patch, "ax"
  21. .word __arch_hweight16
  22. sllx %o0, 64-16, %g1
  23. retl
  24. popc %g1, %o0
  25. .previous
  26. ENTRY(__arch_hweight32)
  27. ba,pt %xcc, __sw_hweight32
  28. nop
  29. nop
  30. ENDPROC(__arch_hweight32)
  31. .section .popc_3insn_patch, "ax"
  32. .word __arch_hweight32
  33. sllx %o0, 64-32, %g1
  34. retl
  35. popc %g1, %o0
  36. .previous
  37. ENTRY(__arch_hweight64)
  38. ba,pt %xcc, __sw_hweight64
  39. nop
  40. nop
  41. ENDPROC(__arch_hweight64)
  42. .section .popc_3insn_patch, "ax"
  43. .word __arch_hweight64
  44. retl
  45. popc %o0, %o0
  46. nop
  47. .previous