avcall-i386-msvc.c
上传用户:shenzhenrh
上传日期:2013-05-12
资源大小:2904k
文件大小:4k
源码类别:

信息检索与抽取

开发平台:

Unix_Linux

  1. #include "asmi386.h"
  2. TEXT()
  3. ALIGN(2)
  4. GLOBL(C(__msvc_builtin_avcall))
  5. DECLARE_FUNCTION(__msvc_builtin_avcall)
  6. FUNBEGIN(__msvc_builtin_avcall)
  7. INSN1(push,l ,R(ebp))
  8. INSN2(mov,l ,R(esp),R(ebp))
  9. INSN1(push,l ,R(esi))
  10. INSN1(push,l ,R(ebx))
  11. INSN2(mov,l ,X4 MEM_DISP(ebp,8),R(esi))
  12. INSN2(add,l ,NUM(-1024),R(esp))
  13. INSN2(mov,l ,R(esp),R(ecx))
  14. INSN2(mov,l ,X4 MEM_DISP(esi,20),R(eax))
  15. INSN2(add,l ,NUM(-32),R(eax))
  16. INSN2(sub,l ,R(esi),R(eax))
  17. INSN2(mov,l ,R(eax),R(edx))
  18. INSN2(sar,l ,NUM(2),R(edx))
  19. INSN2(xor,l ,R(ebx),R(ebx))
  20. INSN2(cmp,l ,R(edx),R(ebx))
  21. INSN1(jge,_ ,L3)
  22. L5:
  23. INSN2(mov,l ,X4 MEM_DISP_SHINDEX(esi,32,ebx,4),R(eax))
  24. INSN2(mov,l ,R(eax),X4 MEM_SHINDEX(ecx,ebx,4))
  25. INSN1(inc,l ,R(ebx))
  26. INSN2(cmp,l ,R(edx),R(ebx))
  27. INSN1(jl,_ ,L5)
  28. L3:
  29. INSN2(test,b ,NUM(8),X1 MEM_DISP(esi,4))
  30. INSN1(je,_ ,L7)
  31. INSN2(cmp,l ,NUM(16),X4 MEM_DISP(esi,12))
  32. INSN1(jne,_ ,L7)
  33. INSN2(mov,l ,X4 MEM_DISP(esi,8),R(ebx))
  34. L7:
  35. INSN2(mov,l ,X4 MEM_DISP(esi,12),R(eax))
  36. INSN2(cmp,l ,NUM(13),R(eax))
  37. INSN1(jne,_ ,L8)
  38. INSN2(mov,l ,X4 MEM(esi),R(eax))
  39. INSN1(call,_ ,INDIR(R(eax)))
  40. INSN2(mov,l ,X4 MEM_DISP(esi,8),R(eax))
  41. INSN1(fstp,s ,X4 MEM(eax))
  42. INSN1(jmp,_ ,L9)
  43. L8:
  44. INSN2(cmp,l ,NUM(14),R(eax))
  45. INSN1(jne,_ ,L10)
  46. INSN2(mov,l ,X4 MEM(esi),R(eax))
  47. INSN1(call,_ ,INDIR(R(eax)))
  48. INSN2(mov,l ,X4 MEM_DISP(esi,8),R(eax))
  49. INSN1(fstp,l ,X8 MEM(eax))
  50. INSN1(jmp,_ ,L9)
  51. L10:
  52. INSN2(mov,l ,X4 MEM(esi),R(eax))
  53. INSN1(call,_ ,INDIR(R(eax)))
  54. INSN2(mov,l ,R(eax),R(ebx))
  55. INSN2(mov,l ,X4 MEM_DISP(esi,12),R(eax))
  56. INSN2(cmp,l ,NUM(1),R(eax))
  57. INSN1(je,_ ,L9)
  58. INSN2(test,l ,R(eax),R(eax))
  59. INSN1(je,_ ,L61)
  60. INSN2(cmp,l ,NUM(2),R(eax))
  61. INSN1(je,_ ,L62)
  62. INSN2(cmp,l ,NUM(3),R(eax))
  63. INSN1(je,_ ,L62)
  64. INSN2(cmp,l ,NUM(4),R(eax))
  65. INSN1(je,_ ,L62)
  66. INSN2(cmp,l ,NUM(5),R(eax))
  67. INSN1(je,_ ,L63)
  68. INSN2(cmp,l ,NUM(6),R(eax))
  69. INSN1(je,_ ,L63)
  70. INSN2(cmp,l ,NUM(7),R(eax))
  71. INSN1(je,_ ,L61)
  72. INSN2(cmp,l ,NUM(8),R(eax))
  73. INSN1(je,_ ,L61)
  74. INSN2(cmp,l ,NUM(9),R(eax))
  75. INSN1(je,_ ,L61)
  76. INSN2(cmp,l ,NUM(10),R(eax))
  77. INSN1(je,_ ,L61)
  78. INSN2(mov,l ,X4 MEM_DISP(esi,12),R(ecx))
  79. INSN2(lea,l ,X4 MEM_DISP(ecx,-11),R(eax))
  80. INSN2(cmp,l ,NUM(1),R(eax))
  81. INSN1(jbe,_ ,L64)
  82. INSN2(cmp,l ,NUM(15),R(ecx))
  83. INSN1(je,_ ,L61)
  84. INSN2(cmp,l ,NUM(16),R(ecx))
  85. INSN1(jne,_ ,L9)
  86. INSN2(mov,l ,X4 MEM_DISP(esi,4),R(eax))
  87. INSN2(test,b ,NUM(1),R(al))
  88. INSN1(je,_ ,L39)
  89. INSN2(mov,l ,X4 MEM_DISP(esi,16),R(eax))
  90. INSN2(cmp,l ,NUM(1),R(eax))
  91. INSN1(jne,_ ,L40)
  92. INSN2(mov,l ,X4 MEM_DISP(esi,8),R(edx))
  93. INSN2(mov,b ,X1 MEM(ebx),R(al))
  94. INSN2(mov,b ,R(al),X1 MEM(edx))
  95. INSN1(jmp,_ ,L9)
  96. L40:
  97. INSN2(cmp,l ,NUM(2),R(eax))
  98. INSN1(jne,_ ,L42)
  99. INSN2(mov,l ,X4 MEM_DISP(esi,8),R(edx))
  100. INSN2(mov,w ,X2 MEM(ebx),R(ax))
  101. INSN2(mov,w ,R(ax),X2 MEM(edx))
  102. INSN1(jmp,_ ,L9)
  103. L42:
  104. INSN2(cmp,l ,NUM(4),R(eax))
  105. INSN1(jne,_ ,L44)
  106. INSN2(mov,l ,X4 MEM_DISP(esi,8),R(edx))
  107. INSN2(mov,l ,X4 MEM(ebx),R(eax))
  108. INSN2(mov,l ,R(eax),X4 MEM(edx))
  109. INSN1(jmp,_ ,L9)
  110. L44:
  111. INSN2(cmp,l ,NUM(8),R(eax))
  112. INSN1(jne,_ ,L46)
  113. INSN2(mov,l ,X4 MEM_DISP(esi,8),R(edx))
  114. INSN2(mov,l ,X4 MEM(ebx),R(eax))
  115. INSN2(mov,l ,R(eax),X4 MEM(edx))
  116. INSN2(mov,l ,X4 MEM_DISP(esi,8),R(edx))
  117. INSN2(mov,l ,X4 MEM_DISP(ebx,4),R(eax))
  118. INSN2(mov,l ,R(eax),X4 MEM_DISP(edx,4))
  119. INSN1(jmp,_ ,L9)
  120. L46:
  121. INSN2(add,l ,NUM(3),R(eax))
  122. INSN2(mov,l ,R(eax),R(ecx))
  123. INSN2(shr,l ,NUM(2),R(ecx))
  124. INSN1(dec,l ,R(ecx))
  125. INSN1(js,_ ,L9)
  126. L50:
  127. INSN2(mov,l ,X4 MEM_DISP(esi,8),R(edx))
  128. INSN2(mov,l ,X4 MEM_SHINDEX(ebx,ecx,4),R(eax))
  129. INSN2(mov,l ,R(eax),X4 MEM_SHINDEX(edx,ecx,4))
  130. INSN1(dec,l ,R(ecx))
  131. INSN1(jns,_ ,L50)
  132. INSN1(jmp,_ ,L9)
  133. L39:
  134. INSN2(test,b ,NUM(2),R(ah))
  135. INSN1(je,_ ,L9)
  136. INSN2(mov,l ,X4 MEM_DISP(esi,16),R(eax))
  137. INSN2(cmp,l ,NUM(1),R(eax))
  138. INSN1(jne,_ ,L54)
  139. L62:
  140. INSN2(mov,l ,X4 MEM_DISP(esi,8),R(eax))
  141. INSN2(mov,b ,R(bl),X1 MEM(eax))
  142. INSN1(jmp,_ ,L9)
  143. L54:
  144. INSN2(cmp,l ,NUM(2),R(eax))
  145. INSN1(jne,_ ,L56)
  146. L63:
  147. INSN2(mov,l ,X4 MEM_DISP(esi,8),R(eax))
  148. INSN2(mov,w ,R(bx),X2 MEM(eax))
  149. INSN1(jmp,_ ,L9)
  150. L56:
  151. INSN2(cmp,l ,NUM(4),R(eax))
  152. INSN1(jne,_ ,L58)
  153. L61:
  154. INSN2(mov,l ,X4 MEM_DISP(esi,8),R(eax))
  155. INSN2(mov,l ,R(ebx),X4 MEM(eax))
  156. INSN1(jmp,_ ,L9)
  157. L58:
  158. INSN2(cmp,l ,NUM(8),R(eax))
  159. INSN1(jne,_ ,L9)
  160. L64:
  161. INSN2(mov,l ,X4 MEM_DISP(esi,8),R(eax))
  162. INSN2(mov,l ,R(ebx),X4 MEM(eax))
  163. INSN2(mov,l ,X4 MEM_DISP(esi,8),R(eax))
  164. INSN2(mov,l ,R(edx),X4 MEM_DISP(eax,4))
  165. L9:
  166. INSN2(xor,l ,R(eax),R(eax))
  167. INSN2(lea,l ,X4 MEM_DISP(ebp,-8),R(esp))
  168. INSN1(pop,l ,R(ebx))
  169. INSN1(pop,l ,R(esi))
  170. INSN2(mov,l ,R(ebp),R(esp))
  171. INSN1(pop,l ,R(ebp))
  172. ret
  173. FUNEND()