Messages in this thread | | | From | Thomas Gleixner <> | Subject | Re: [PATCH v2] x86: use builtins to read eflags | Date | Fri, 04 Feb 2022 01:16:49 +0100 |
| |
On Tue, Dec 28 2021 at 18:12, Bill Wendling wrote: > GCC and Clang both have builtins to read and write the EFLAGS register. > This allows the compiler to determine the best way to generate this > code, which can improve code generation. > > This issue arose due to Clang's issue with the "=rm" constraint. Clang > chooses to be conservative in these situations, and so uses memory > instead of registers. This is a known issue, which is currently being > addressed. > > However, using builtins is benefiical in general, because it removes the > burden of determining what's the way to read the flags register from the > programmer and places it on to the compiler, which has the information > needed to make that decision. Indeed, this piece of code has had several > changes over the years, some of which were pinging back and forth to > determine the correct constraints to use. > > With this change, Clang generates better code: > > Original code: > movq $0, -48(%rbp) > #APP > # __raw_save_flags > pushfq > popq -48(%rbp) > #NO_APP > movq -48(%rbp), %rbx > > New code: > pushfq > popq %rbx > #APP > > Note that the stack slot in the original code is no longer needed in the > new code, saving a small amount of stack space.
This still lacks any information about the effect on GCC. There is a world outside clang. It's not my job to validate that.
Thanks,
tglx
| |