lkml.org 
[lkml]   [2022]   [Feb]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    SubjectRe: [PATCH v2] x86: use builtins to read eflags
    Date
    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

    \
     
     \ /
      Last update: 2022-02-04 01:17    [W:2.239 / U:0.040 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site