[Bug target/69716] New: asm generates invalid register name
gccbugzilla at limegreensocks dot com
gcc-bugzilla@gcc.gnu.org
Mon Feb 8 01:29:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69716
Bug ID: 69716
Summary: asm generates invalid register name
Product: gcc
Version: 6.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: gccbugzilla at limegreensocks dot com
Target Milestone: ---
While this is a problem with inline asm, it seems like it would be
target-specific which is why I set component: target.
I can produce the problem several ways. This is probably the simplest:
unsigned char a = 0;
asm volatile("mov $0, %0" : "=r"(a) : : "ax", "bx", "cx", "dx");
Compile this with gcc -m32 -S, and you see:
mov $0, %sil
However, sil is not a valid register name on x86 (although it is on x64).
You can get similar behavior with:
unsigned char a, b, c, d, e;
asm volatile("# %0 %1 %2 %3 %4" : "=r"(a),"=r"(b),"=r"(c),"=r"(d),"=r"(e));
This generates:
# %dil %sil %bl %cl %dl
Neither dil nor sil are valid register names for 32bit.
More information about the Gcc-bugs
mailing list