Hi, To move a scalar char/short/int around in the vector registers there is no such instruction as: dup v0, v0.h[0] But there is: dup h0, v0.h[0] (Alternately there is dup v0.4h, v0.h[0], but I don't think that is what we are aiming for).
Fix the output template we are using to reflect this. aarch64.exp came back clean and the correct instruction form is now generated. OK? Thanks, James --- 2013-10-14 James Greenhalgh <james.greenha...@arm.com> * config/aarch64/aarch64.md (*mov<mode>_aarch64): Fix output template for DUP (element) Scalar.
diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md index 01664665e7d309f2cf2076bdc3ca6e0825612cea..758be47420e95fad74c57c1a9dcb7934b87c141e 100644 --- a/gcc/config/aarch64/aarch64.md +++ b/gcc/config/aarch64/aarch64.md @@ -789,7 +789,7 @@ (define_insn "*mov<mode>_aarch64" case 8: return "dup\t%0.<Vallxd>, %w1"; case 9: - return "dup\t%0, %1.<v>[0]"; + return "dup\t%<Vetype>0, %1.<v>[0]"; default: gcc_unreachable (); }