xor.amd64.s 691 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  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. loop:
  10. CMPL CX, $0
  11. JE done
  12. MOVL (SI), AX
  13. XORL AX, (DI)
  14. ADDQ $4, SI
  15. ADDQ $4, DI
  16. SUBQ $4, CX
  17. JMP loop
  18. done:
  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. loop:
  31. CMPL CX, $0
  32. JE done
  33. MOVL (SI), AX
  34. XORL AX, (DI)
  35. SUBQ $4, SI
  36. SUBQ $4, DI
  37. SUBQ $4, CX
  38. JMP loop
  39. done:
  40. RET