On Wed, Mar 07, 2018 at 11:23:10AM +0000, Renlin Li wrote: > Hi all, > > For the immediate alternative, the constraint checks the operand with HF mode > while SImode is provided to the output template generation function. > > Before the change, this inconsistency causes an ICE compiling the new test > case in the patch. > > > aarch64-none-elf regression test Okay. Okay to commit the patch?
OK. Thanks, James > gcc/ChangeLog: > > 2018-03-07 Renlin Li <renlin...@arm.com> > > * config/aarch64/aarch64.md (movhf_aarch64): Fix mode argument to > aarch64_output_scalar_simd_mov_immediate. > > gcc/testsuite/ChangeLog: > > 2018-03-07 Renlin Li <renlin...@arm.com> > > * gcc.target/aarch64/movi_hf.c: New. > * gcc.target/aarch64/f16_mov_immediate_1.c: Update. > diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md > index > 5a2a9309a3bbbfad6fcb6db07422d774909f0ba1..391fdd07e52f4d165a0109e3baa82571bafa37de > 100644 > --- a/gcc/config/aarch64/aarch64.md > +++ b/gcc/config/aarch64/aarch64.md > @@ -1145,7 +1145,7 @@ > umov\\t%w0, %1.h[0] > mov\\t%0.h[0], %1.h[0] > fmov\\t%h0, %1 > - * return aarch64_output_scalar_simd_mov_immediate (operands[1], SImode); > + * return aarch64_output_scalar_simd_mov_immediate (operands[1], HImode); > ldr\\t%h0, %1 > str\\t%h1, %0 > ldrh\\t%w0, %1 > diff --git a/gcc/testsuite/gcc.target/aarch64/f16_mov_immediate_1.c > b/gcc/testsuite/gcc.target/aarch64/f16_mov_immediate_1.c > index > 1ed3831e139745227487eafa3ccfdc05c99deb34..3d22d225851af653f17e04ce7c7cc65ee1c86172 > 100644 > --- a/gcc/testsuite/gcc.target/aarch64/f16_mov_immediate_1.c > +++ b/gcc/testsuite/gcc.target/aarch64/f16_mov_immediate_1.c > @@ -45,5 +45,5 @@ __fp16 f5 () > } > > /* { dg-final { scan-assembler-times "mov\tw\[0-9\]+, #?19520" 3 } > } */ > -/* { dg-final { scan-assembler-times "movi\tv\[0-9\]+\\\.2s, 0xbc, lsl 8" 1 > } } */ > -/* { dg-final { scan-assembler-times "movi\tv\[0-9\]+\\\.2s, 0x4c, lsl 8" 1 > } } */ > +/* { dg-final { scan-assembler-times "movi\tv\[0-9\]+\\\.4h, 0xbc, lsl 8" 1 > } } */ > +/* { dg-final { scan-assembler-times "movi\tv\[0-9\]+\\\.4h, 0x4c, lsl 8" 1 > } } */ > diff --git a/gcc/testsuite/gcc.target/aarch64/movi_hf.c > b/gcc/testsuite/gcc.target/aarch64/movi_hf.c > new file mode 100644 > index > 0000000000000000000000000000000000000000..9521b9b09c87bd5f19cb6b62b1228bae685d8667 > --- /dev/null > +++ b/gcc/testsuite/gcc.target/aarch64/movi_hf.c > @@ -0,0 +1,9 @@ > +/* { dg-do compile } */ > +/* { dg-options "-O0 -std=c99" } */ > + > +__fp16 > +foo () > +{ > + /* { dg-final { scan-assembler "movi\tv\[0-9\]+\.8b" } } */ > + return 0x1.544p5; > +}