freeze_amd64.s 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. // Copyright 2012 The Go Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style
  3. // license that can be found in the LICENSE file.
  4. // This code was translated into a form compatible with 6a from the public
  5. // domain sources in SUPERCOP: http://bench.cr.yp.to/supercop.html
  6. // func freeze(inout *[5]uint64)
  7. TEXT ·freeze(SB),7,$96-8
  8. MOVQ inout+0(FP), DI
  9. MOVQ SP,R11
  10. MOVQ $31,CX
  11. NOTQ CX
  12. ANDQ CX,SP
  13. ADDQ $32,SP
  14. MOVQ R11,0(SP)
  15. MOVQ R12,8(SP)
  16. MOVQ R13,16(SP)
  17. MOVQ R14,24(SP)
  18. MOVQ R15,32(SP)
  19. MOVQ BX,40(SP)
  20. MOVQ BP,48(SP)
  21. MOVQ 0(DI),SI
  22. MOVQ 8(DI),DX
  23. MOVQ 16(DI),CX
  24. MOVQ 24(DI),R8
  25. MOVQ 32(DI),R9
  26. MOVQ ·REDMASK51(SB),AX
  27. MOVQ AX,R10
  28. SUBQ $18,R10
  29. MOVQ $3,R11
  30. REDUCELOOP:
  31. MOVQ SI,R12
  32. SHRQ $51,R12
  33. ANDQ AX,SI
  34. ADDQ R12,DX
  35. MOVQ DX,R12
  36. SHRQ $51,R12
  37. ANDQ AX,DX
  38. ADDQ R12,CX
  39. MOVQ CX,R12
  40. SHRQ $51,R12
  41. ANDQ AX,CX
  42. ADDQ R12,R8
  43. MOVQ R8,R12
  44. SHRQ $51,R12
  45. ANDQ AX,R8
  46. ADDQ R12,R9
  47. MOVQ R9,R12
  48. SHRQ $51,R12
  49. ANDQ AX,R9
  50. IMUL3Q $19,R12,R12
  51. ADDQ R12,SI
  52. SUBQ $1,R11
  53. JA REDUCELOOP
  54. MOVQ $1,R12
  55. CMPQ R10,SI
  56. CMOVQLT R11,R12
  57. CMPQ AX,DX
  58. CMOVQNE R11,R12
  59. CMPQ AX,CX
  60. CMOVQNE R11,R12
  61. CMPQ AX,R8
  62. CMOVQNE R11,R12
  63. CMPQ AX,R9
  64. CMOVQNE R11,R12
  65. NEGQ R12
  66. ANDQ R12,AX
  67. ANDQ R12,R10
  68. SUBQ R10,SI
  69. SUBQ AX,DX
  70. SUBQ AX,CX
  71. SUBQ AX,R8
  72. SUBQ AX,R9
  73. MOVQ SI,0(DI)
  74. MOVQ DX,8(DI)
  75. MOVQ CX,16(DI)
  76. MOVQ R8,24(DI)
  77. MOVQ R9,32(DI)
  78. MOVQ 0(SP),R11
  79. MOVQ 8(SP),R12
  80. MOVQ 16(SP),R13
  81. MOVQ 24(SP),R14
  82. MOVQ 32(SP),R15
  83. MOVQ 40(SP),BX
  84. MOVQ 48(SP),BP
  85. MOVQ R11,SP
  86. MOVQ DI,AX
  87. MOVQ SI,DX
  88. RET