Attached is a patch for memcpy.S. memset.S and setjmp.S don't use the
red zone. I think that is actually all of the x86-64 assembly. Am I
missing something?
Neal
2009-02-04 Neal H. Walfield <neal@gnu.org>
* libc/machine/x86_64/memcpy.S (memcpy): Don't use the red zone.
diff -c newlib/libc/machine/x86_64/memcpy.S\~ newlib/libc/machine/x86_64/memcpy.S
--- newlib/libc/machine/x86_64/memcpy.S~ 2007-08-28 23:56:49.000000000 +0200
+++ newlib/libc/machine/x86_64/memcpy.S 2009-02-04 05:07:51.000000000 +0100
@@ -30,10 +30,10 @@
cmpq $256, rdx
jb quadword_copy
- movq rax, -8 (rsp)
- movq r12, -16 (rsp)
- movq r13, -24 (rsp)
- movq r14, -32 (rsp)
+ pushq rax
+ pushq r12
+ pushq r13
+ pushq r14
movq rdx, rcx /* Copy 128 bytes at a time with minimum cache polution */
shrq $7, rcx
@@ -89,10 +89,10 @@
movq rdx, rcx
andq $127, rcx
rep movsb
- movq -8 (rsp), rax
- movq -16 (rsp), r12
- movq -24 (rsp), r13
- movq -32 (rsp), r14
+ popq r14
+ popq r13
+ popq r12
+ popq rax
ret