From: Tejas Belagod Date: Fri, 22 Nov 2013 15:31:57 +0000 (+0000) Subject: aarch64-simd.md (vec_pack_trunc_, [...]): Swap source ops for big-endian. X-Git-Tag: releases/gcc-4.9.0~2531 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=8fcc1c1fc2aaef9e008ed240739d9796185dac39;p=thirdparty%2Fgcc.git aarch64-simd.md (vec_pack_trunc_, [...]): Swap source ops for big-endian. 2013-11-22 Tejas Belagod gcc/ * config/aarch64/aarch64-simd.md (vec_pack_trunc_, vec_pack_trunc_v2df, vec_pack_trunc_df): Swap source ops for big-endian. From-SVN: r205268 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 00ccbbcaf067..958f61b0b57b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2013-11-22 Tejas Belagod + + * config/aarch64/aarch64-simd.md (vec_pack_trunc_, + vec_pack_trunc_v2df, vec_pack_trunc_df): Swap source ops for big-endian. + 2013-11-22 Tejas Belagod * config/aarch64/aarch64-simd.md (aarch64_simd_vec_set): Adjust diff --git a/gcc/config/aarch64/aarch64-simd.md b/gcc/config/aarch64/aarch64-simd.md index 2774ec251823..bfd524c7c658 100644 --- a/gcc/config/aarch64/aarch64-simd.md +++ b/gcc/config/aarch64/aarch64-simd.md @@ -916,9 +916,11 @@ "TARGET_SIMD" { rtx tempreg = gen_reg_rtx (mode); + int lo = BYTES_BIG_ENDIAN ? 2 : 1; + int hi = BYTES_BIG_ENDIAN ? 1 : 2; - emit_insn (gen_move_lo_quad_ (tempreg, operands[1])); - emit_insn (gen_move_hi_quad_ (tempreg, operands[2])); + emit_insn (gen_move_lo_quad_ (tempreg, operands[lo])); + emit_insn (gen_move_hi_quad_ (tempreg, operands[hi])); emit_insn (gen_aarch64_simd_vec_pack_trunc_ (operands[0], tempreg)); DONE; }) @@ -931,7 +933,12 @@ (truncate: (match_operand:VQN 1 "register_operand" "w")) (truncate: (match_operand:VQN 2 "register_operand" "w"))))] "TARGET_SIMD" - "xtn\\t%0., %1.\;xtn2\\t%0., %2." + { + if (BYTES_BIG_ENDIAN) + return "xtn\\t%0., %2.\;xtn2\\t%0., %1."; + else + return "xtn\\t%0., %1.\;xtn2\\t%0., %2."; + } [(set_attr "type" "multiple") (set_attr "length" "8")] ) @@ -1469,9 +1476,12 @@ "TARGET_SIMD" { rtx tmp = gen_reg_rtx (V2SFmode); - emit_insn (gen_aarch64_float_truncate_lo_v2sf (tmp, operands[1])); + int lo = BYTES_BIG_ENDIAN ? 2 : 1; + int hi = BYTES_BIG_ENDIAN ? 1 : 2; + + emit_insn (gen_aarch64_float_truncate_lo_v2sf (tmp, operands[lo])); emit_insn (gen_aarch64_float_truncate_hi_v4sf (operands[0], - tmp, operands[2])); + tmp, operands[hi])); DONE; } ) @@ -1487,8 +1497,11 @@ "TARGET_SIMD" { rtx tmp = gen_reg_rtx (V2SFmode); - emit_insn (gen_move_lo_quad_v2df (tmp, operands[1])); - emit_insn (gen_move_hi_quad_v2df (tmp, operands[2])); + int lo = BYTES_BIG_ENDIAN ? 2 : 1; + int hi = BYTES_BIG_ENDIAN ? 1 : 2; + + emit_insn (gen_move_lo_quad_v2df (tmp, operands[lo])); + emit_insn (gen_move_hi_quad_v2df (tmp, operands[hi])); emit_insn (gen_aarch64_float_truncate_lo_v2sf (operands[0], tmp)); DONE; }