On Wed, Feb 16, 2022 at 09:46:02PM +0100, Florian Weimer wrote: > * Stefan Hajnoczi: > > > I'm basically asking whether the &tls_var input operand is treated as > > volatile and part of the inline assembly or whether it's just regular > > C code that the compiler may optimize with the surrounding function? > > &tls_var is evaluated outside of the inline assembly, any compiler > barrier will come after that. It's subject to CSE (or whatever it's > called. Three asm statements in a row > > asm volatile("" : "=r"(dst_ptr) : "0"(&tls_var)); > asm volatile("" : "=r"(dst_ptr) : "0"(&tls_var)); > asm volatile("" : "=r"(dst_ptr) : "0"(&tls_var)); > > result in > > movq tls_var@gottpoff(%rip), %rax > addq %fs:0, %rax > movq %rax, %rdx > movq %rax, %rdx > > which is probably not what you want.
Right, the approach I suggested doesn't work. Thanks for sharing the example! Stefan
signature.asc
Description: PGP signature