trampoline-x86_64.S 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513
  1. // This file is generated from a similarly-named Perl script in the BoringSSL
  2. // source tree. Do not edit by hand.
  3. #if defined(__has_feature)
  4. #if __has_feature(memory_sanitizer) && !defined(OPENSSL_NO_ASM)
  5. #define OPENSSL_NO_ASM
  6. #endif
  7. #endif
  8. #if defined(__x86_64__) && !defined(OPENSSL_NO_ASM)
  9. #if defined(BORINGSSL_PREFIX)
  10. #include <boringssl_prefix_symbols_asm.h>
  11. #endif
  12. .text
  13. .globl _abi_test_trampoline
  14. .private_extern _abi_test_trampoline
  15. .p2align 4
  16. _abi_test_trampoline:
  17. L$abi_test_trampoline_seh_begin:
  18. subq $120,%rsp
  19. L$abi_test_trampoline_seh_prolog_alloc:
  20. movq %r8,48(%rsp)
  21. movq %rbx,64(%rsp)
  22. L$abi_test_trampoline_seh_prolog_rbx:
  23. movq %rbp,72(%rsp)
  24. L$abi_test_trampoline_seh_prolog_rbp:
  25. movq %r12,80(%rsp)
  26. L$abi_test_trampoline_seh_prolog_r12:
  27. movq %r13,88(%rsp)
  28. L$abi_test_trampoline_seh_prolog_r13:
  29. movq %r14,96(%rsp)
  30. L$abi_test_trampoline_seh_prolog_r14:
  31. movq %r15,104(%rsp)
  32. L$abi_test_trampoline_seh_prolog_r15:
  33. L$abi_test_trampoline_seh_prolog_end:
  34. movq 0(%rsi),%rbx
  35. movq 8(%rsi),%rbp
  36. movq 16(%rsi),%r12
  37. movq 24(%rsi),%r13
  38. movq 32(%rsi),%r14
  39. movq 40(%rsi),%r15
  40. movq %rdi,32(%rsp)
  41. movq %rsi,40(%rsp)
  42. movq %rdx,%r10
  43. movq %rcx,%r11
  44. decq %r11
  45. js L$args_done
  46. movq (%r10),%rdi
  47. addq $8,%r10
  48. decq %r11
  49. js L$args_done
  50. movq (%r10),%rsi
  51. addq $8,%r10
  52. decq %r11
  53. js L$args_done
  54. movq (%r10),%rdx
  55. addq $8,%r10
  56. decq %r11
  57. js L$args_done
  58. movq (%r10),%rcx
  59. addq $8,%r10
  60. decq %r11
  61. js L$args_done
  62. movq (%r10),%r8
  63. addq $8,%r10
  64. decq %r11
  65. js L$args_done
  66. movq (%r10),%r9
  67. addq $8,%r10
  68. leaq 0(%rsp),%rax
  69. L$args_loop:
  70. decq %r11
  71. js L$args_done
  72. movq %r11,56(%rsp)
  73. movq (%r10),%r11
  74. movq %r11,(%rax)
  75. movq 56(%rsp),%r11
  76. addq $8,%r10
  77. addq $8,%rax
  78. jmp L$args_loop
  79. L$args_done:
  80. movq 32(%rsp),%rax
  81. movq 48(%rsp),%r10
  82. testq %r10,%r10
  83. jz L$no_unwind
  84. pushfq
  85. orq $0x100,0(%rsp)
  86. popfq
  87. nop
  88. .globl _abi_test_unwind_start
  89. .private_extern _abi_test_unwind_start
  90. _abi_test_unwind_start:
  91. call *%rax
  92. .globl _abi_test_unwind_return
  93. .private_extern _abi_test_unwind_return
  94. _abi_test_unwind_return:
  95. pushfq
  96. andq $-0x101,0(%rsp)
  97. popfq
  98. .globl _abi_test_unwind_stop
  99. .private_extern _abi_test_unwind_stop
  100. _abi_test_unwind_stop:
  101. jmp L$call_done
  102. L$no_unwind:
  103. call *%rax
  104. L$call_done:
  105. movq 40(%rsp),%rsi
  106. movq %rbx,0(%rsi)
  107. movq %rbp,8(%rsi)
  108. movq %r12,16(%rsi)
  109. movq %r13,24(%rsi)
  110. movq %r14,32(%rsi)
  111. movq %r15,40(%rsi)
  112. movq 64(%rsp),%rbx
  113. movq 72(%rsp),%rbp
  114. movq 80(%rsp),%r12
  115. movq 88(%rsp),%r13
  116. movq 96(%rsp),%r14
  117. movq 104(%rsp),%r15
  118. addq $120,%rsp
  119. .byte 0xf3,0xc3
  120. L$abi_test_trampoline_seh_end:
  121. .globl _abi_test_clobber_rax
  122. .private_extern _abi_test_clobber_rax
  123. .p2align 4
  124. _abi_test_clobber_rax:
  125. xorq %rax,%rax
  126. .byte 0xf3,0xc3
  127. .globl _abi_test_clobber_rbx
  128. .private_extern _abi_test_clobber_rbx
  129. .p2align 4
  130. _abi_test_clobber_rbx:
  131. xorq %rbx,%rbx
  132. .byte 0xf3,0xc3
  133. .globl _abi_test_clobber_rcx
  134. .private_extern _abi_test_clobber_rcx
  135. .p2align 4
  136. _abi_test_clobber_rcx:
  137. xorq %rcx,%rcx
  138. .byte 0xf3,0xc3
  139. .globl _abi_test_clobber_rdx
  140. .private_extern _abi_test_clobber_rdx
  141. .p2align 4
  142. _abi_test_clobber_rdx:
  143. xorq %rdx,%rdx
  144. .byte 0xf3,0xc3
  145. .globl _abi_test_clobber_rdi
  146. .private_extern _abi_test_clobber_rdi
  147. .p2align 4
  148. _abi_test_clobber_rdi:
  149. xorq %rdi,%rdi
  150. .byte 0xf3,0xc3
  151. .globl _abi_test_clobber_rsi
  152. .private_extern _abi_test_clobber_rsi
  153. .p2align 4
  154. _abi_test_clobber_rsi:
  155. xorq %rsi,%rsi
  156. .byte 0xf3,0xc3
  157. .globl _abi_test_clobber_rbp
  158. .private_extern _abi_test_clobber_rbp
  159. .p2align 4
  160. _abi_test_clobber_rbp:
  161. xorq %rbp,%rbp
  162. .byte 0xf3,0xc3
  163. .globl _abi_test_clobber_r8
  164. .private_extern _abi_test_clobber_r8
  165. .p2align 4
  166. _abi_test_clobber_r8:
  167. xorq %r8,%r8
  168. .byte 0xf3,0xc3
  169. .globl _abi_test_clobber_r9
  170. .private_extern _abi_test_clobber_r9
  171. .p2align 4
  172. _abi_test_clobber_r9:
  173. xorq %r9,%r9
  174. .byte 0xf3,0xc3
  175. .globl _abi_test_clobber_r10
  176. .private_extern _abi_test_clobber_r10
  177. .p2align 4
  178. _abi_test_clobber_r10:
  179. xorq %r10,%r10
  180. .byte 0xf3,0xc3
  181. .globl _abi_test_clobber_r11
  182. .private_extern _abi_test_clobber_r11
  183. .p2align 4
  184. _abi_test_clobber_r11:
  185. xorq %r11,%r11
  186. .byte 0xf3,0xc3
  187. .globl _abi_test_clobber_r12
  188. .private_extern _abi_test_clobber_r12
  189. .p2align 4
  190. _abi_test_clobber_r12:
  191. xorq %r12,%r12
  192. .byte 0xf3,0xc3
  193. .globl _abi_test_clobber_r13
  194. .private_extern _abi_test_clobber_r13
  195. .p2align 4
  196. _abi_test_clobber_r13:
  197. xorq %r13,%r13
  198. .byte 0xf3,0xc3
  199. .globl _abi_test_clobber_r14
  200. .private_extern _abi_test_clobber_r14
  201. .p2align 4
  202. _abi_test_clobber_r14:
  203. xorq %r14,%r14
  204. .byte 0xf3,0xc3
  205. .globl _abi_test_clobber_r15
  206. .private_extern _abi_test_clobber_r15
  207. .p2align 4
  208. _abi_test_clobber_r15:
  209. xorq %r15,%r15
  210. .byte 0xf3,0xc3
  211. .globl _abi_test_clobber_xmm0
  212. .private_extern _abi_test_clobber_xmm0
  213. .p2align 4
  214. _abi_test_clobber_xmm0:
  215. pxor %xmm0,%xmm0
  216. .byte 0xf3,0xc3
  217. .globl _abi_test_clobber_xmm1
  218. .private_extern _abi_test_clobber_xmm1
  219. .p2align 4
  220. _abi_test_clobber_xmm1:
  221. pxor %xmm1,%xmm1
  222. .byte 0xf3,0xc3
  223. .globl _abi_test_clobber_xmm2
  224. .private_extern _abi_test_clobber_xmm2
  225. .p2align 4
  226. _abi_test_clobber_xmm2:
  227. pxor %xmm2,%xmm2
  228. .byte 0xf3,0xc3
  229. .globl _abi_test_clobber_xmm3
  230. .private_extern _abi_test_clobber_xmm3
  231. .p2align 4
  232. _abi_test_clobber_xmm3:
  233. pxor %xmm3,%xmm3
  234. .byte 0xf3,0xc3
  235. .globl _abi_test_clobber_xmm4
  236. .private_extern _abi_test_clobber_xmm4
  237. .p2align 4
  238. _abi_test_clobber_xmm4:
  239. pxor %xmm4,%xmm4
  240. .byte 0xf3,0xc3
  241. .globl _abi_test_clobber_xmm5
  242. .private_extern _abi_test_clobber_xmm5
  243. .p2align 4
  244. _abi_test_clobber_xmm5:
  245. pxor %xmm5,%xmm5
  246. .byte 0xf3,0xc3
  247. .globl _abi_test_clobber_xmm6
  248. .private_extern _abi_test_clobber_xmm6
  249. .p2align 4
  250. _abi_test_clobber_xmm6:
  251. pxor %xmm6,%xmm6
  252. .byte 0xf3,0xc3
  253. .globl _abi_test_clobber_xmm7
  254. .private_extern _abi_test_clobber_xmm7
  255. .p2align 4
  256. _abi_test_clobber_xmm7:
  257. pxor %xmm7,%xmm7
  258. .byte 0xf3,0xc3
  259. .globl _abi_test_clobber_xmm8
  260. .private_extern _abi_test_clobber_xmm8
  261. .p2align 4
  262. _abi_test_clobber_xmm8:
  263. pxor %xmm8,%xmm8
  264. .byte 0xf3,0xc3
  265. .globl _abi_test_clobber_xmm9
  266. .private_extern _abi_test_clobber_xmm9
  267. .p2align 4
  268. _abi_test_clobber_xmm9:
  269. pxor %xmm9,%xmm9
  270. .byte 0xf3,0xc3
  271. .globl _abi_test_clobber_xmm10
  272. .private_extern _abi_test_clobber_xmm10
  273. .p2align 4
  274. _abi_test_clobber_xmm10:
  275. pxor %xmm10,%xmm10
  276. .byte 0xf3,0xc3
  277. .globl _abi_test_clobber_xmm11
  278. .private_extern _abi_test_clobber_xmm11
  279. .p2align 4
  280. _abi_test_clobber_xmm11:
  281. pxor %xmm11,%xmm11
  282. .byte 0xf3,0xc3
  283. .globl _abi_test_clobber_xmm12
  284. .private_extern _abi_test_clobber_xmm12
  285. .p2align 4
  286. _abi_test_clobber_xmm12:
  287. pxor %xmm12,%xmm12
  288. .byte 0xf3,0xc3
  289. .globl _abi_test_clobber_xmm13
  290. .private_extern _abi_test_clobber_xmm13
  291. .p2align 4
  292. _abi_test_clobber_xmm13:
  293. pxor %xmm13,%xmm13
  294. .byte 0xf3,0xc3
  295. .globl _abi_test_clobber_xmm14
  296. .private_extern _abi_test_clobber_xmm14
  297. .p2align 4
  298. _abi_test_clobber_xmm14:
  299. pxor %xmm14,%xmm14
  300. .byte 0xf3,0xc3
  301. .globl _abi_test_clobber_xmm15
  302. .private_extern _abi_test_clobber_xmm15
  303. .p2align 4
  304. _abi_test_clobber_xmm15:
  305. pxor %xmm15,%xmm15
  306. .byte 0xf3,0xc3
  307. .globl _abi_test_bad_unwind_wrong_register
  308. .private_extern _abi_test_bad_unwind_wrong_register
  309. .p2align 4
  310. _abi_test_bad_unwind_wrong_register:
  311. L$abi_test_bad_unwind_wrong_register_seh_begin:
  312. pushq %r12
  313. L$abi_test_bad_unwind_wrong_register_seh_push_r13:
  314. nop
  315. popq %r12
  316. .byte 0xf3,0xc3
  317. L$abi_test_bad_unwind_wrong_register_seh_end:
  318. .globl _abi_test_bad_unwind_temporary
  319. .private_extern _abi_test_bad_unwind_temporary
  320. .p2align 4
  321. _abi_test_bad_unwind_temporary:
  322. L$abi_test_bad_unwind_temporary_seh_begin:
  323. pushq %r12
  324. L$abi_test_bad_unwind_temporary_seh_push_r12:
  325. movq %r12,%rax
  326. incq %rax
  327. movq %rax,(%rsp)
  328. movq %r12,(%rsp)
  329. popq %r12
  330. .byte 0xf3,0xc3
  331. L$abi_test_bad_unwind_temporary_seh_end:
  332. .globl _abi_test_get_and_clear_direction_flag
  333. .private_extern _abi_test_get_and_clear_direction_flag
  334. _abi_test_get_and_clear_direction_flag:
  335. pushfq
  336. popq %rax
  337. andq $0x400,%rax
  338. shrq $10,%rax
  339. cld
  340. .byte 0xf3,0xc3
  341. .globl _abi_test_set_direction_flag
  342. .private_extern _abi_test_set_direction_flag
  343. _abi_test_set_direction_flag:
  344. std
  345. .byte 0xf3,0xc3
  346. #endif