[Bug target/42324] [4.3/4.4/4.5 Regression] Gcc doesn't follow x86-64 psABI on _Bool
hjl dot tools at gmail dot com
gcc-bugzilla@gcc.gnu.org
Tue Dec 8 18:17:00 GMT 2009
------- Comment #7 from hjl dot tools at gmail dot com 2009-12-08 18:17 -------
Another testcase:
[hjl@gnu-26 pr42324]$ cat b3.c
void foo (unsigned long, unsigned int, unsigned long,
unsigned int, unsigned int, unsigned int, unsigned int,
unsigned long, unsigned int);
void bar (_Bool v1, _Bool v2, unsigned char v3, unsigned char v4,
unsigned char v5, unsigned char v6,
unsigned char v7, _Bool v8)
{
foo (v1, v2, v3, v4, v5, v6, v7, v8, v8);
}
[hjl@gnu-26 pr42324]$ /usr/gcc-4.4/bin/gcc -O2 b3.c -S
[hjl@gnu-26 pr42324]$ cat b3.s
.file "b3.c"
.text
.p2align 4,,15
.globl bar
.type bar, @function
bar:
.LFB2:
subq $24, %rsp
.LCFI0:
movzbl %cl, %ecx
movzbl %dl, %edx
movzbl 40(%rsp), %r10d
movzbl %sil, %esi
movzbl %dil, %edi
movzbl %r9b, %r9d
movzbl %r8b, %r8d
movzbl %r10b, %eax
movq %r10, 8(%rsp)
movl %eax, 16(%rsp)
movzbl 32(%rsp), %eax
movl %eax, (%rsp)
call foo
addq $24, %rsp
ret
icc 11.1 generates:
.globl bar
bar:
# parameter 1: %edi
# parameter 2: %esi
# parameter 3: %edx
# parameter 4: %ecx
# parameter 5: %r8d
# parameter 6: %r9d
# parameter 7: 48 + %rsp
# parameter 8: 56 + %rsp
..B1.1: # Preds ..B1.0
..___tag_value_bar.1: #8.1
subq $40, %rsp #8.1
..___tag_value_bar.2: #
movzbl 48(%rsp), %eax #9.32
movzbl 56(%rsp), %r10d #9.36
movl %eax, (%rsp) #9.32
movzbl %dil, %edi #8.1
movq %r10, 8(%rsp) #9.36
movl %r10d, 16(%rsp) #9.40
movzbl %sil, %esi #9.12
movzbl %dl, %edx #8.1
movzbl %cl, %ecx #9.20
movzbl %r8b, %r8d #9.24
movzbl %r9b, %r9d #9.28
call foo #9.3
# LOE rbx rbp r12 r13 r14 r15
..B1.2: # Preds ..B1.1
addq $40, %rsp #10.1
..___tag_value_bar.3: #
ret #10.1
So both gcc and icc treat _Bool parameters in register and on stack
as 1 byte. I think we should just drop
---
When a value of type _Bool is passed in a register or on the stack,
the upper 63 bits of the eightbyte shall be zero.
---
from psABI since it isn't really followed/used at all.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42324
More information about the Gcc-bugs
mailing list