x86_gf2m.asm 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. %ifidn __OUTPUT_FORMAT__,obj
  2. section code use32 class=code align=256
  3. %elifidn __OUTPUT_FORMAT__,win32
  4. [email protected] equ 1
  5. section .text code align=256
  6. %else
  7. section .text code
  8. %endif
  9. align 16
  10. __mul_1x1_ialu:
  11. sub esp,36
  12. mov ecx,eax
  13. lea edx,[eax*1+eax]
  14. lea ebp,[eax*4]
  15. and ecx,1073741823
  16. lea edi,[eax*1+eax]
  17. sar eax,31
  18. mov DWORD [esp],0
  19. and edx,2147483647
  20. mov DWORD [4+esp],ecx
  21. xor ecx,edx
  22. mov DWORD [8+esp],edx
  23. xor edx,ebp
  24. mov DWORD [12+esp],ecx
  25. xor ecx,edx
  26. mov DWORD [16+esp],ebp
  27. xor ebp,edx
  28. mov DWORD [20+esp],ecx
  29. xor ebp,ecx
  30. sar edi,31
  31. and eax,ebx
  32. mov DWORD [24+esp],edx
  33. and edi,ebx
  34. mov DWORD [28+esp],ebp
  35. mov edx,eax
  36. shl eax,31
  37. mov ecx,edi
  38. shr edx,1
  39. mov esi,7
  40. shl edi,30
  41. and esi,ebx
  42. shr ecx,2
  43. xor eax,edi
  44. shr ebx,3
  45. mov edi,7
  46. and edi,ebx
  47. shr ebx,3
  48. xor edx,ecx
  49. xor eax,DWORD [esi*4+esp]
  50. mov esi,7
  51. and esi,ebx
  52. shr ebx,3
  53. mov ebp,DWORD [edi*4+esp]
  54. mov edi,7
  55. mov ecx,ebp
  56. shl ebp,3
  57. and edi,ebx
  58. shr ecx,29
  59. xor eax,ebp
  60. shr ebx,3
  61. xor edx,ecx
  62. mov ecx,DWORD [esi*4+esp]
  63. mov esi,7
  64. mov ebp,ecx
  65. shl ecx,6
  66. and esi,ebx
  67. shr ebp,26
  68. xor eax,ecx
  69. shr ebx,3
  70. xor edx,ebp
  71. mov ebp,DWORD [edi*4+esp]
  72. mov edi,7
  73. mov ecx,ebp
  74. shl ebp,9
  75. and edi,ebx
  76. shr ecx,23
  77. xor eax,ebp
  78. shr ebx,3
  79. xor edx,ecx
  80. mov ecx,DWORD [esi*4+esp]
  81. mov esi,7
  82. mov ebp,ecx
  83. shl ecx,12
  84. and esi,ebx
  85. shr ebp,20
  86. xor eax,ecx
  87. shr ebx,3
  88. xor edx,ebp
  89. mov ebp,DWORD [edi*4+esp]
  90. mov edi,7
  91. mov ecx,ebp
  92. shl ebp,15
  93. and edi,ebx
  94. shr ecx,17
  95. xor eax,ebp
  96. shr ebx,3
  97. xor edx,ecx
  98. mov ecx,DWORD [esi*4+esp]
  99. mov esi,7
  100. mov ebp,ecx
  101. shl ecx,18
  102. and esi,ebx
  103. shr ebp,14
  104. xor eax,ecx
  105. shr ebx,3
  106. xor edx,ebp
  107. mov ebp,DWORD [edi*4+esp]
  108. mov edi,7
  109. mov ecx,ebp
  110. shl ebp,21
  111. and edi,ebx
  112. shr ecx,11
  113. xor eax,ebp
  114. shr ebx,3
  115. xor edx,ecx
  116. mov ecx,DWORD [esi*4+esp]
  117. mov esi,7
  118. mov ebp,ecx
  119. shl ecx,24
  120. and esi,ebx
  121. shr ebp,8
  122. xor eax,ecx
  123. shr ebx,3
  124. xor edx,ebp
  125. mov ebp,DWORD [edi*4+esp]
  126. mov ecx,ebp
  127. shl ebp,27
  128. mov edi,DWORD [esi*4+esp]
  129. shr ecx,5
  130. mov esi,edi
  131. xor eax,ebp
  132. shl edi,30
  133. xor edx,ecx
  134. shr esi,2
  135. xor eax,edi
  136. xor edx,esi
  137. add esp,36
  138. ret
  139. global _bn_GF2m_mul_2x2
  140. align 16
  141. _bn_GF2m_mul_2x2:
  142. L$_bn_GF2m_mul_2x2_begin:
  143. push ebp
  144. push ebx
  145. push esi
  146. push edi
  147. sub esp,20
  148. mov eax,DWORD [44+esp]
  149. mov ebx,DWORD [52+esp]
  150. call __mul_1x1_ialu
  151. mov DWORD [8+esp],eax
  152. mov DWORD [12+esp],edx
  153. mov eax,DWORD [48+esp]
  154. mov ebx,DWORD [56+esp]
  155. call __mul_1x1_ialu
  156. mov DWORD [esp],eax
  157. mov DWORD [4+esp],edx
  158. mov eax,DWORD [44+esp]
  159. mov ebx,DWORD [52+esp]
  160. xor eax,DWORD [48+esp]
  161. xor ebx,DWORD [56+esp]
  162. call __mul_1x1_ialu
  163. mov ebp,DWORD [40+esp]
  164. mov ebx,DWORD [esp]
  165. mov ecx,DWORD [4+esp]
  166. mov edi,DWORD [8+esp]
  167. mov esi,DWORD [12+esp]
  168. xor eax,edx
  169. xor edx,ecx
  170. xor eax,ebx
  171. mov DWORD [ebp],ebx
  172. xor edx,edi
  173. mov DWORD [12+ebp],esi
  174. xor eax,esi
  175. add esp,20
  176. xor edx,esi
  177. pop edi
  178. xor eax,edx
  179. pop esi
  180. mov DWORD [8+ebp],edx
  181. pop ebx
  182. mov DWORD [4+ebp],eax
  183. pop ebp
  184. ret
  185. db 71,70,40,50,94,109,41,32,77,117,108,116,105,112,108,105
  186. db 99,97,116,105,111,110,32,102,111,114,32,120,56,54,44,32
  187. db 67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97
  188. db 112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103
  189. db 62,0