aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDorit Nuzman <dorit@il.ibm.com>2007-07-05 10:56:04 +0000
committerDorit Nuzman <dorit@gcc.gnu.org>2007-07-05 10:56:04 +0000
commit4643b71608fa0dfcd70943fea33159fc04510831 (patch)
treeb66ccf0d8f7b763fcc5fbbbd1dcf7327e804489d
parentb301e9b3a4ffcc1865c55dd77eb191deddaff5fb (diff)
downloadgcc-4643b71608fa0dfcd70943fea33159fc04510831.zip
gcc-4643b71608fa0dfcd70943fea33159fc04510831.tar.gz
gcc-4643b71608fa0dfcd70943fea33159fc04510831.tar.bz2
re PR testsuite/32014 (new gcc failures)
PR testsuite/32014 * config/rs6000/altivec.md (UNSPEC_VUPKHS_V4SF, UNSPEC_VUPKLS_V4SF): (UNSPEC_VUPKHU_V4SF, UNSPEC_VUPKLU_V4SF): New. (vec_unpacks_float_hi_v8hi, vec_unpacks_float_lo_v8hi): New patterns. (vec_unpacku_float_hi_v8hi, vec_unpacku_float_lo_v8hi): New patterns. From-SVN: r126361
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/config/rs6000/altivec.md60
2 files changed, 68 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 0ab6cd5..b4e0db0 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2007-07-05 Dorit Nuzman <dorit@il.ibm.com>
+
+ PR testsuite/32014
+ * config/rs6000/altivec.md (UNSPEC_VUPKHS_V4SF, UNSPEC_VUPKLS_V4SF):
+ (UNSPEC_VUPKHU_V4SF, UNSPEC_VUPKLU_V4SF): New.
+ (vec_unpacks_float_hi_v8hi, vec_unpacks_float_lo_v8hi): New patterns.
+ (vec_unpacku_float_hi_v8hi, vec_unpacku_float_lo_v8hi): New patterns.
+
2007-07-05 Zdenek Dvorak <dvorakz@suse.cz>
* config/i386/i386.c (ix86_address_cost): Do not consider more complex
diff --git a/gcc/config/rs6000/altivec.md b/gcc/config/rs6000/altivec.md
index 59bb481..5da91a7 100644
--- a/gcc/config/rs6000/altivec.md
+++ b/gcc/config/rs6000/altivec.md
@@ -147,6 +147,10 @@
(UNSPEC_VPERMHI 321)
(UNSPEC_INTERHI 322)
(UNSPEC_INTERLO 323)
+ (UNSPEC_VUPKHS_V4SF 324)
+ (UNSPEC_VUPKLS_V4SF 325)
+ (UNSPEC_VUPKHU_V4SF 326)
+ (UNSPEC_VUPKLU_V4SF 327)
])
(define_constants
@@ -2933,3 +2937,59 @@
emit_insn (gen_altivec_vmrgl<VI_char> (operands[0], operands[1], operands[2]));
DONE;
}")
+
+(define_expand "vec_unpacks_float_hi_v8hi"
+ [(set (match_operand:V4SF 0 "register_operand" "")
+ (unspec:V4SF [(match_operand:V8HI 1 "register_operand" "")]
+ UNSPEC_VUPKHS_V4SF))]
+ "TARGET_ALTIVEC"
+ "
+{
+ rtx tmp = gen_reg_rtx (V4SImode);
+
+ emit_insn (gen_vec_unpacks_hi_v8hi (tmp, operands[1]));
+ emit_insn (gen_altivec_vcfsx (operands[0], tmp, const0_rtx));
+ DONE;
+}")
+
+(define_expand "vec_unpacks_float_lo_v8hi"
+ [(set (match_operand:V4SF 0 "register_operand" "")
+ (unspec:V4SF [(match_operand:V8HI 1 "register_operand" "")]
+ UNSPEC_VUPKLS_V4SF))]
+ "TARGET_ALTIVEC"
+ "
+{
+ rtx tmp = gen_reg_rtx (V4SImode);
+
+ emit_insn (gen_vec_unpacks_lo_v8hi (tmp, operands[1]));
+ emit_insn (gen_altivec_vcfsx (operands[0], tmp, const0_rtx));
+ DONE;
+}")
+
+(define_expand "vec_unpacku_float_hi_v8hi"
+ [(set (match_operand:V4SF 0 "register_operand" "")
+ (unspec:V4SF [(match_operand:V8HI 1 "register_operand" "")]
+ UNSPEC_VUPKHU_V4SF))]
+ "TARGET_ALTIVEC"
+ "
+{
+ rtx tmp = gen_reg_rtx (V4SImode);
+
+ emit_insn (gen_vec_unpacku_hi_v8hi (tmp, operands[1]));
+ emit_insn (gen_altivec_vcfux (operands[0], tmp, const0_rtx));
+ DONE;
+}")
+
+(define_expand "vec_unpacku_float_lo_v8hi"
+ [(set (match_operand:V4SF 0 "register_operand" "")
+ (unspec:V4SF [(match_operand:V8HI 1 "register_operand" "")]
+ UNSPEC_VUPKLU_V4SF))]
+ "TARGET_ALTIVEC"
+ "
+{
+ rtx tmp = gen_reg_rtx (V4SImode);
+
+ emit_insn (gen_vec_unpacku_lo_v8hi (tmp, operands[1]));
+ emit_insn (gen_altivec_vcfux (operands[0], tmp, const0_rtx));
+ DONE;
+}")