On Tue, 2019-08-20 at 14:34:12 UTC, Christophe Leroy wrote: > Today LOAD_REG_IMMEDIATE() is a basic #define which loads all > parts on a value into a register, including the parts that are NUL. > > This means always 2 instructions on PPC32 and always 5 instructions > on PPC64. And those instructions cannot run in parallele as they are > updating the same register. > > Ex: LOAD_REG_IMMEDIATE(r1,THREAD_SIZE) in head_64.S results in: > > 3c 20 00 00 lis r1,0 > 60 21 00 00 ori r1,r1,0 > 78 21 07 c6 rldicr r1,r1,32,31 > 64 21 00 00 oris r1,r1,0 > 60 21 40 00 ori r1,r1,16384 > > Rewrite LOAD_REG_IMMEDIATE() with GAS macro in order to skip > the parts that are NUL. > > Rename existing LOAD_REG_IMMEDIATE() as LOAD_REG_IMMEDIATE_SYM() > and use that one for loading value of symbols which are not known > at compile time. > > Now LOAD_REG_IMMEDIATE(r1,THREAD_SIZE) in head_64.S results in: > > 38 20 40 00 li r1,16384 > > Signed-off-by: Christophe Leroy <christophe.le...@c-s.fr>
Series applied to powerpc next, thanks. https://git.kernel.org/powerpc/c/c691b4b83b6a348f7b9d13c36916e73c2e1d85e4 cheers