poly1305-ppc.s 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. .machine "any"
  2. .abiversion 2
  3. .text
  4. .globl poly1305_init_int
  5. .type poly1305_init_int,@function
  6. .align 4
  7. poly1305_init_int:
  8. .localentry poly1305_init_int,0
  9. xor 0,0,0
  10. std 0,0(3)
  11. std 0,8(3)
  12. std 0,16(3)
  13. cmpld 4,0
  14. beq- .Lno_key
  15. ld 10,0(4)
  16. ld 11,8(4)
  17. lis 8,0xfff
  18. ori 8,8,0xfffc
  19. insrdi 8,8,32,0
  20. ori 7,8,3
  21. and 10,10,7
  22. and 11,11,8
  23. std 10,32(3)
  24. std 11,40(3)
  25. .Lno_key:
  26. xor 3,3,3
  27. blr
  28. .long 0
  29. .byte 0,12,0x14,0,0,0,2,0
  30. .size poly1305_init_int,.-poly1305_init_int
  31. .globl poly1305_blocks
  32. .type poly1305_blocks,@function
  33. .align 4
  34. poly1305_blocks:
  35. .localentry poly1305_blocks,0
  36. srdi. 5,5,4
  37. beq- .Labort
  38. stdu 1,-192(1)
  39. mflr 0
  40. std 27,152(1)
  41. std 28,160(1)
  42. std 29,168(1)
  43. std 30,176(1)
  44. std 31,184(1)
  45. std 0,208(1)
  46. ld 27,32(3)
  47. ld 28,40(3)
  48. ld 7,0(3)
  49. ld 8,8(3)
  50. ld 9,16(3)
  51. srdi 29,28,2
  52. mtctr 5
  53. add 29,29,28
  54. li 0,3
  55. b .Loop
  56. .align 4
  57. .Loop:
  58. ld 30,0(4)
  59. ld 31,8(4)
  60. addi 4,4,16
  61. addc 7,7,30
  62. adde 8,8,31
  63. mulld 10,7,27
  64. mulhdu 11,7,27
  65. adde 9,9,6
  66. mulld 30,8,29
  67. mulhdu 31,8,29
  68. addc 10,10,30
  69. adde 11,11,31
  70. mulld 30,7,28
  71. mulhdu 12,7,28
  72. addc 11,11,30
  73. addze 12,12
  74. mulld 30,8,27
  75. mulhdu 31,8,27
  76. addc 11,11,30
  77. adde 12,12,31
  78. mulld 30,9,29
  79. mulld 31,9,27
  80. addc 11,11,30
  81. adde 12,12,31
  82. andc 30,12,0
  83. and 9,12,0
  84. srdi 31,30,2
  85. add 30,30,31
  86. addc 7,10,30
  87. addze 8,11
  88. addze 9,9
  89. bdnz .Loop
  90. std 7,0(3)
  91. std 8,8(3)
  92. std 9,16(3)
  93. ld 27,152(1)
  94. ld 28,160(1)
  95. ld 29,168(1)
  96. ld 30,176(1)
  97. ld 31,184(1)
  98. addi 1,1,192
  99. .Labort:
  100. blr
  101. .long 0
  102. .byte 0,12,4,1,0x80,5,4,0
  103. .size poly1305_blocks,.-poly1305_blocks
  104. .globl poly1305_emit
  105. .type poly1305_emit,@function
  106. .align 4
  107. poly1305_emit:
  108. .localentry poly1305_emit,0
  109. ld 7,0(3)
  110. ld 8,8(3)
  111. ld 9,16(3)
  112. ld 6,0(5)
  113. ld 5,8(5)
  114. addic 10,7,5
  115. addze 11,8
  116. addze 12,9
  117. srdi 0,12,2
  118. neg 0,0
  119. andc 7,7,0
  120. and 10,10,0
  121. andc 8,8,0
  122. and 11,11,0
  123. or 7,7,10
  124. or 8,8,11
  125. addc 7,7,6
  126. adde 8,8,5
  127. std 7,0(4)
  128. std 8,8(4)
  129. blr
  130. .long 0
  131. .byte 0,12,0x14,0,0,0,3,0
  132. .size poly1305_emit,.-poly1305_emit
  133. .byte 80,111,108,121,49,51,48,53,32,102,111,114,32,80,80,67,44,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
  134. .align 2