alloca86_64.S 525 B

1234567891011121314151617181920212223242526272829303132333435
  1. /* ---------------------------------------------- */
  2. /* alloca86_64.S */
  3. .globl alloca
  4. alloca:
  5. pop %rdx
  6. #ifdef _WIN32
  7. mov %rcx,%rax
  8. #else
  9. mov %rdi,%rax
  10. #endif
  11. add $15,%rax
  12. and $-16,%rax
  13. jz p3
  14. #ifdef _WIN32
  15. p1:
  16. cmp $4096,%rax
  17. jbe p2
  18. test %rax,-4096(%rsp)
  19. sub $4096,%rsp
  20. sub $4096,%rax
  21. jmp p1
  22. p2:
  23. #endif
  24. sub %rax,%rsp
  25. mov %rsp,%rax
  26. p3:
  27. push %rdx
  28. ret
  29. /* ---------------------------------------------- */