On Fri, Aug 18, 2017 at 10:29:04AM +1200, Michael Clark wrote:
> Sorry I had to send again as my Apple mailer is munging emails. I’ve disabled 
> RTF.
> 
> 
> This one is quite interesting:
> 
> - https://cx.rv8.io/g/WXWMTG
> 
> It’s another target independent bug. x86 is using some LEA followed by SAR 
> trick with a 3 bit shift. Surely SHL 27, SAR 27 would suffice. In any case 
> RISC-V seems like a nice target to try to fix this codegen for, as its less 
> risk than attempting a fix in x86 ;-)
> 
> - https://github.com/riscv/riscv-gcc/issues/89
> 
> code:
> 
>       template <typename T, unsigned B>
>       inline T signextend(const T x)
>       {
>       struct {T x:B;} s;
>       return s.x = x;
>       }
> 
>       int sx5(int x) {
>               return signextend<signed int,5>(x);
>       }
> 
> riscv asm:
> 
>       sx5(int):
>         slliw a0,a0,3
>         slliw a0,a0,24
>         sraiw a0,a0,24
>         sraiw a0,a0,3
>         ret
> 
> hand coded riscv asm
> 
>       sx5(int):
>         slliw a0,a0,27
>         sraiw a0,a0,27
>         ret
> 
> x86 asm:
> 
>       sx5(int):
>         lea eax, [0+rdi*8]
>         sar al, 3
>         movsx eax, al
>         ret
> 
> hand coded x86 asm (no worse because the sar depends on the lea)
> 
>       sx5(int):
>         shl edi, 27
>         sar edi, 27
>         movsx eax, dl

Huh? dl is not a subreg of edi!

s/edi/edx/ and it may work.

dil can also be used, but only on 64 bit.

        Gabriel

Reply via email to