You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
which uses (x>>48)==0xfff7 for one check call, and (x&0xffff000000000000) == 0xfff7000000000000 for the other. This ends up loading those large constants within the function prologue (which increases the prologue/epilogue even more due to pushing out non-volatile registers), but only uses them for one of the cases (meaning that those constants don't even need to be loaded during the prologue).
The code
compiles (x86-64,
-O3
; compiler explorer) towhich uses
(x>>48)==0xfff7
for onecheck
call, and(x&0xffff000000000000) == 0xfff7000000000000
for the other. This ends up loading those large constants within the function prologue (which increases the prologue/epilogue even more due to pushing out non-volatile registers), but only uses them for one of the cases (meaning that those constants don't even need to be loaded during the prologue).Simpler example, but without the prologue issue: compiler explorer
The text was updated successfully, but these errors were encountered: