https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93648
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |WAITING Last reconfirmed| |2020-02-10 Ever confirmed|0 |1 --- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> --- The generated inline-asm looks correct for both x86_64 and AARCH64. There is a warning too for x86_64: # 4 "t1.cc" 1 t1.cc: In function ‘int main()’: t1.cc:6:1: warning: unsupported size for integer register 6 | } | ^ The generated code is: movq .LC0(%rip), %rax movq .LC0+8(%rip), %rdx #APP # 4 "t1.cc" 1 //%rax # 0 "" 2 #NO_APP movsbl %al, %eax here the reference is stabilized. >Changing the '+' modifier to '=' turns it into an uninitialized register read. > See the attachment for details. Yes because it is saying you are writing the whole field and not reading from it at all. Using the wrong modifier and the wrong constraints can do that. The documentation for '=' is: Means that this operand is written to by this instruction: the previous value is discarded and replaced by new data. What did you think was correct?