xor_amd64.s 744 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. #include "textflag.h"
  2. // func xorfwd(x []byte)
  3. TEXT ·xorfwd(SB),NOSPLIT,$0
  4. MOVQ x+0(FP), SI // x[i]
  5. MOVL x+8(FP), CX // x.len
  6. MOVQ x+0(FP), DI
  7. ADDQ $4, DI // x[i+4]
  8. SUBQ $4, CX
  9. xorfwdloop:
  10. MOVL (SI), AX
  11. XORL AX, (DI)
  12. ADDQ $4, SI
  13. ADDQ $4, DI
  14. SUBQ $4, CX
  15. CMPL CX, $0
  16. JE xorfwddone
  17. JMP xorfwdloop
  18. xorfwddone:
  19. RET
  20. // func xorbkd(x []byte)
  21. TEXT ·xorbkd(SB),NOSPLIT,$0
  22. MOVQ x+0(FP), SI
  23. MOVL x+8(FP), CX // x.len
  24. MOVQ x+0(FP), DI
  25. ADDQ CX, SI // x[-8]
  26. SUBQ $8, SI
  27. ADDQ CX, DI // x[-4]
  28. SUBQ $4, DI
  29. SUBQ $4, CX
  30. xorbkdloop:
  31. MOVL (SI), AX
  32. XORL AX, (DI)
  33. SUBQ $4, SI
  34. SUBQ $4, DI
  35. SUBQ $4, CX
  36. CMPL CX, $0
  37. JE xorbkddone
  38. JMP xorbkdloop
  39. xorbkddone:
  40. RET