[Bug inline-asm/68952] New: Wrong code with AVX inline-asm in 32-bit mode
jamrial at gmail dot com
gcc-bugzilla@gcc.gnu.org
Thu Dec 17 04:12:00 GMT 2015
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68952
Bug ID: 68952
Summary: Wrong code with AVX inline-asm in 32-bit mode
Product: gcc
Version: 6.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: inline-asm
Assignee: unassigned at gcc dot gnu.org
Reporter: jamrial at gmail dot com
Target Milestone: ---
Regression since GCC 4.9.0. -O0, -O1, -O2 and -O3 are all affected. -Os works
as intended.
float clipf(float a, float amin, float amax)
{
float ret;
__asm__ ("vminss %1, %3, %0 \n\t"
"vmaxss %2, %0, %0 \n\t"
: "=x"(ret) : "xm"(a), "x"(amin), "x"(amax));
return ret;
}
gcc-trunk -O2 -mavx -m32
gcc-5.3 -O2 -mavx -m32
gcc-4.9.2 -O2 -mavx -m32
subl $4, %esp
vmovss 16(%esp), %xmm1
vmovss 12(%esp), %xmm0
vminss 8(%esp), %xmm1, %xmm0 <--- amin overwritten
vmaxss %xmm0, %xmm0, %xmm0
vmovss %xmm0, (%esp)
flds (%esp)
addl $4, %esp
ret
gcc-4.8.2 -O2 -mavx -m32
subl $4, %esp
vmovss 16(%esp), %xmm1
vmovss 12(%esp), %xmm0
vminss 8(%esp), %xmm1, %xmm2
vmaxss %xmm0, %xmm2, %xmm2
vmovss %xmm2, (%esp)
flds (%esp)
addl $4, %esp
ret
gcc-trunk -Os -mavx -m32
gcc-5.3 -Os -mavx -m32
gcc-4.9.2 -Os -mavx -m32
pushl %ebp
movl %esp, %ebp
pushl %eax
vmovss 16(%ebp), %xmm1
vmovss 12(%ebp), %xmm0
vminss 8(%ebp), %xmm1, %xmm2
vmaxss %xmm0, %xmm2, %xmm2
vmovss %xmm2, -4(%ebp)
flds -4(%ebp)
leave
ret
More information about the Gcc-bugs
mailing list