aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathan Sidwell <nathan@codesourcery.com>2004-11-18 15:52:22 +0000
committerNathan Sidwell <nathan@gcc.gnu.org>2004-11-18 15:52:22 +0000
commit814665556a51ceb1d0eeda8890526b37756c9d99 (patch)
tree6deb31ffcecd95a36f7b0aa53a6c61c0b1cf2dff
parent18f63bfae3cd06c0e376872cbd862c78dc3a389b (diff)
downloadgcc-814665556a51ceb1d0eeda8890526b37756c9d99.zip
gcc-814665556a51ceb1d0eeda8890526b37756c9d99.tar.gz
gcc-814665556a51ceb1d0eeda8890526b37756c9d99.tar.bz2
altivec.md (VI, VF, V): New mode macros.
* config/rs6000/altivec.md (VI, VF, V): New mode macros. (altivec_lvx_4si, altivec_lvx_8hi, altivec_lvx_16qi, altivec_lvx_4sf): Rename and replace with ... (altivec_lvx_<mode>): ... mode macro version. (altivec_stvx_4si, altivec_stvx_8hi, altivec_stvx_16qi, altivec_stvx_4sf): Rename and replace with ... (altivec_stvx_<mode>): ... mode macro version. (movv4si, movv8hi, movv16qi, movv4sf}): Replace with ... (mov<mode>): ... mode macro version. (*movv4si_internal, *movv8hi_internal1, *movv16qi_internal1, *movv4sf_internal1): Replace with ... (*mov<mode>_internal): ... mode macro version. (get_vrsave_internal, *set_vrsave_internal, *save_world, *restore_world): Unquote output statements. * config/rs6000/rs6000.c (altivec_expand_ld_builtin, altivec_expand_st_builtin): Adjust insn names. From-SVN: r90870
-rw-r--r--gcc/ChangeLog19
-rw-r--r--gcc/config/rs6000/altivec.md220
-rw-r--r--gcc/config/rs6000/rs6000.c16
3 files changed, 76 insertions, 179 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 53126c6..80e8f8c 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,22 @@
+2004-11-18 Nathan Sidwell <nathan@codesourcery.com>
+
+ * config/rs6000/altivec.md (VI, VF, V): New mode macros.
+ (altivec_lvx_4si, altivec_lvx_8hi, altivec_lvx_16qi,
+ altivec_lvx_4sf): Rename and replace with ...
+ (altivec_lvx_<mode>): ... mode macro version.
+ (altivec_stvx_4si, altivec_stvx_8hi, altivec_stvx_16qi,
+ altivec_stvx_4sf): Rename and replace with ...
+ (altivec_stvx_<mode>): ... mode macro version.
+ (movv4si, movv8hi, movv16qi, movv4sf}): Replace with ...
+ (mov<mode>): ... mode macro version.
+ (*movv4si_internal, *movv8hi_internal1, *movv16qi_internal1,
+ *movv4sf_internal1): Replace with ...
+ (*mov<mode>_internal): ... mode macro version.
+ (get_vrsave_internal, *set_vrsave_internal, *save_world,
+ *restore_world): Unquote output statements.
+ * config/rs6000/rs6000.c (altivec_expand_ld_builtin,
+ altivec_expand_st_builtin): Adjust insn names.
+
2004-11-18 Aldy Hernandez <aldyh@redhat.com>
* config/rs6000/rs6000.c (rs6000_complex_function_value): Revert
diff --git a/gcc/config/rs6000/altivec.md b/gcc/config/rs6000/altivec.md
index c64d996..2b5df5f 100644
--- a/gcc/config/rs6000/altivec.md
+++ b/gcc/config/rs6000/altivec.md
@@ -46,91 +46,58 @@
(UNSPEC_VCONDU_V16QI 307)
])
-;; Generic LVX load instruction.
-(define_insn "altivec_lvx_4si"
- [(set (match_operand:V4SI 0 "altivec_register_operand" "=v")
- (match_operand:V4SI 1 "memory_operand" "m"))]
- "TARGET_ALTIVEC"
- "lvx %0,%y1"
- [(set_attr "type" "vecload")])
-
-(define_insn "altivec_lvx_8hi"
- [(set (match_operand:V8HI 0 "altivec_register_operand" "=v")
- (match_operand:V8HI 1 "memory_operand" "m"))]
- "TARGET_ALTIVEC"
- "lvx %0,%y1"
- [(set_attr "type" "vecload")])
+;; Vec int modes
+(define_mode_macro VI [V4SI V8HI V16QI])
+;; Vec float modes
+(define_mode_macro VF [V4SF])
+;; Vec modes, pity mode macros are not composable
+(define_mode_macro V [V4SI V8HI V16QI V4SF])
-(define_insn "altivec_lvx_16qi"
- [(set (match_operand:V16QI 0 "altivec_register_operand" "=v")
- (match_operand:V16QI 1 "memory_operand" "m"))]
- "TARGET_ALTIVEC"
- "lvx %0,%y1"
- [(set_attr "type" "vecload")])
-
-(define_insn "altivec_lvx_4sf"
- [(set (match_operand:V4SF 0 "altivec_register_operand" "=v")
- (match_operand:V4SF 1 "memory_operand" "m"))]
+;; Generic LVX load instruction.
+(define_insn "altivec_lvx_<mode>"
+ [(set (match_operand:V 0 "altivec_register_operand" "=v")
+ (match_operand:V 1 "memory_operand" "m"))]
"TARGET_ALTIVEC"
"lvx %0,%y1"
[(set_attr "type" "vecload")])
;; Generic STVX store instruction.
-(define_insn "altivec_stvx_4si"
- [(set (match_operand:V4SI 0 "memory_operand" "=m")
- (match_operand:V4SI 1 "altivec_register_operand" "v"))]
- "TARGET_ALTIVEC"
- "stvx %1,%y0"
- [(set_attr "type" "vecstore")])
-
-(define_insn "altivec_stvx_8hi"
- [(set (match_operand:V8HI 0 "memory_operand" "=m")
- (match_operand:V8HI 1 "altivec_register_operand" "v"))]
- "TARGET_ALTIVEC"
- "stvx %1,%y0"
- [(set_attr "type" "vecstore")])
-
-(define_insn "altivec_stvx_16qi"
- [(set (match_operand:V16QI 0 "memory_operand" "=m")
- (match_operand:V16QI 1 "altivec_register_operand" "v"))]
- "TARGET_ALTIVEC"
- "stvx %1,%y0"
- [(set_attr "type" "vecstore")])
-
-(define_insn "altivec_stvx_4sf"
- [(set (match_operand:V4SF 0 "memory_operand" "=m")
- (match_operand:V4SF 1 "altivec_register_operand" "v"))]
+(define_insn "altivec_stvx_<mode>"
+ [(set (match_operand:V 0 "memory_operand" "=m")
+ (match_operand:V 1 "altivec_register_operand" "v"))]
"TARGET_ALTIVEC"
"stvx %1,%y0"
[(set_attr "type" "vecstore")])
;; Vector move instructions.
-(define_expand "movv4si"
- [(set (match_operand:V4SI 0 "nonimmediate_operand" "")
- (match_operand:V4SI 1 "any_operand" ""))]
+(define_expand "mov<mode>"
+ [(set (match_operand:V 0 "nonimmediate_operand" "")
+ (match_operand:V 1 "any_operand" ""))]
"TARGET_ALTIVEC"
- "{ rs6000_emit_move (operands[0], operands[1], V4SImode); DONE; }")
+{
+ rs6000_emit_move (operands[0], operands[1], <MODE>mode);
+ DONE;
+})
-(define_insn "*movv4si_internal"
- [(set (match_operand:V4SI 0 "nonimmediate_operand" "=m,v,v,o,r,r,v")
- (match_operand:V4SI 1 "input_operand" "v,m,v,r,o,r,W"))]
+(define_insn "*mov<mode>_internal"
+ [(set (match_operand:V 0 "nonimmediate_operand" "=m,v,v,o,r,r,v")
+ (match_operand:V 1 "input_operand" "v,m,v,r,o,r,W"))]
"TARGET_ALTIVEC
- && (register_operand (operands[0], V4SImode)
- || register_operand (operands[1], V4SImode))"
- "*
+ && (register_operand (operands[0], <MODE>mode)
+ || register_operand (operands[1], <MODE>mode))"
{
switch (which_alternative)
{
- case 0: return \"stvx %1,%y0\";
- case 1: return \"lvx %0,%y1\";
- case 2: return \"vor %0,%1,%1\";
- case 3: return \"#\";
- case 4: return \"#\";
- case 5: return \"#\";
+ case 0: return "stvx %1,%y0";
+ case 1: return "lvx %0,%y1";
+ case 2: return "vor %0,%1,%1";
+ case 3: return "#";
+ case 4: return "#";
+ case 5: return "#";
case 6: return output_vec_const_move (operands);
default: abort();
}
-}"
+}
[(set_attr "type" "vecstore,vecload,vecsimple,store,load,*,*")])
(define_split
@@ -139,7 +106,9 @@
"TARGET_ALTIVEC && reload_completed
&& gpr_or_gpr_p (operands[0], operands[1])"
[(pc)]
-{ rs6000_split_multireg_move (operands[0], operands[1]); DONE; })
+{
+ rs6000_split_multireg_move (operands[0], operands[1]); DONE;
+})
(define_split
[(set (match_operand:V4SI 0 "altivec_register_operand" "")
@@ -149,38 +118,9 @@
(set (match_dup 0)
(plus:V4SI (match_dup 0)
(match_dup 0)))]
- "
{
operands[3] = gen_easy_vector_constant_add_self (operands[1]);
-}")
-
-(define_expand "movv8hi"
- [(set (match_operand:V8HI 0 "nonimmediate_operand" "")
- (match_operand:V8HI 1 "any_operand" ""))]
- "TARGET_ALTIVEC"
- "{ rs6000_emit_move (operands[0], operands[1], V8HImode); DONE; }")
-
-(define_insn "*movv8hi_internal1"
- [(set (match_operand:V8HI 0 "nonimmediate_operand" "=m,v,v,o,r,r,v")
- (match_operand:V8HI 1 "input_operand" "v,m,v,r,o,r,W"))]
- "TARGET_ALTIVEC
- && (register_operand (operands[0], V8HImode)
- || register_operand (operands[1], V8HImode))"
- "*
-{
- switch (which_alternative)
- {
- case 0: return \"stvx %1,%y0\";
- case 1: return \"lvx %0,%y1\";
- case 2: return \"vor %0,%1,%1\";
- case 3: return \"#\";
- case 4: return \"#\";
- case 5: return \"#\";
- case 6: return output_vec_const_move (operands);
- default: abort ();
- }
-}"
- [(set_attr "type" "vecstore,vecload,vecsimple,store,load,*,*")])
+})
(define_split
[(set (match_operand:V8HI 0 "nonimmediate_operand" "")
@@ -198,38 +138,9 @@
(set (match_dup 0)
(plus:V8HI (match_dup 0)
(match_dup 0)))]
- "
{
operands[3] = gen_easy_vector_constant_add_self (operands[1]);
-}")
-
-(define_expand "movv16qi"
- [(set (match_operand:V16QI 0 "nonimmediate_operand" "")
- (match_operand:V16QI 1 "any_operand" ""))]
- "TARGET_ALTIVEC"
- "{ rs6000_emit_move (operands[0], operands[1], V16QImode); DONE; }")
-
-(define_insn "*movv16qi_internal1"
- [(set (match_operand:V16QI 0 "nonimmediate_operand" "=m,v,v,o,r,r,v")
- (match_operand:V16QI 1 "input_operand" "v,m,v,r,o,r,W"))]
- "TARGET_ALTIVEC
- && (register_operand (operands[0], V16QImode)
- || register_operand (operands[1], V16QImode))"
- "*
-{
- switch (which_alternative)
- {
- case 0: return \"stvx %1,%y0\";
- case 1: return \"lvx %0,%y1\";
- case 2: return \"vor %0,%1,%1\";
- case 3: return \"#\";
- case 4: return \"#\";
- case 5: return \"#\";
- case 6: return output_vec_const_move (operands);
- default: abort ();
- }
-}"
- [(set_attr "type" "vecstore,vecload,vecsimple,store,load,*,*")])
+})
(define_split
[(set (match_operand:V16QI 0 "nonimmediate_operand" "")
@@ -247,38 +158,9 @@
(set (match_dup 0)
(plus:V16QI (match_dup 0)
(match_dup 0)))]
- "
{
operands[3] = gen_easy_vector_constant_add_self (operands[1]);
-}")
-
-(define_expand "movv4sf"
- [(set (match_operand:V4SF 0 "nonimmediate_operand" "")
- (match_operand:V4SF 1 "any_operand" ""))]
- "TARGET_ALTIVEC"
- "{ rs6000_emit_move (operands[0], operands[1], V4SFmode); DONE; }")
-
-(define_insn "*movv4sf_internal1"
- [(set (match_operand:V4SF 0 "nonimmediate_operand" "=m,v,v,o,r,r,v")
- (match_operand:V4SF 1 "input_operand" "v,m,v,r,o,r,W"))]
- "TARGET_ALTIVEC
- && (register_operand (operands[0], V4SFmode)
- || register_operand (operands[1], V4SFmode))"
- "*
-{
- switch (which_alternative)
- {
- case 0: return \"stvx %1,%y0\";
- case 1: return \"lvx %0,%y1\";
- case 2: return \"vor %0,%1,%1\";
- case 3: return \"#\";
- case 4: return \"#\";
- case 5: return \"#\";
- case 6: return output_vec_const_move (operands);
- default: abort ();
- }
-}"
- [(set_attr "type" "vecstore,vecload,vecsimple,store,load,*,*")])
+})
(define_split
[(set (match_operand:V4SF 0 "nonimmediate_operand" "")
@@ -286,19 +168,20 @@
"TARGET_ALTIVEC && reload_completed
&& gpr_or_gpr_p (operands[0], operands[1])"
[(pc)]
-{ rs6000_split_multireg_move (operands[0], operands[1]); DONE; })
+{
+ rs6000_split_multireg_move (operands[0], operands[1]); DONE;
+})
(define_insn "get_vrsave_internal"
[(set (match_operand:SI 0 "register_operand" "=r")
(unspec:SI [(reg:SI 109)] 214))]
"TARGET_ALTIVEC"
- "*
{
if (TARGET_MACHO)
- return \"mfspr %0,256\";
+ return "mfspr %0,256";
else
- return \"mfvrsave %0\";
-}"
+ return "mfvrsave %0";
+}
[(set_attr "type" "*")])
(define_insn "*set_vrsave_internal"
@@ -307,13 +190,12 @@
(unspec_volatile:SI [(match_operand:SI 1 "register_operand" "r")
(reg:SI 109)] 30))])]
"TARGET_ALTIVEC"
- "*
{
if (TARGET_MACHO)
- return \"mtspr 256,%1\";
+ return "mtspr 256,%1";
else
- return \"mtvrsave %1\";
-}"
+ return "mtvrsave %1";
+}
[(set_attr "type" "*")])
(define_insn "*save_world"
@@ -321,9 +203,7 @@
[(clobber (match_operand:SI 1 "register_operand" "=l"))
(use (match_operand:SI 2 "call_operand" "s"))])]
"TARGET_MACHO && (DEFAULT_ABI == ABI_DARWIN) && TARGET_32BIT"
- {
- return "bl %z2";
- }
+ "bl %z2"
[(set_attr "type" "branch")
(set_attr "length" "4")])
@@ -334,9 +214,7 @@
(use (match_operand:SI 2 "call_operand" "s"))
(clobber (match_operand:SI 3 "gpc_reg_operand" "=r"))])]
"TARGET_MACHO && (DEFAULT_ABI == ABI_DARWIN) && TARGET_32BIT"
- {
- return "b %z2";
- })
+ "b %z2")
;; Simple binary operations.
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index 5659195..2e404ef 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -6899,16 +6899,16 @@ altivec_expand_ld_builtin (tree exp, rtx target, bool *expandedp)
switch (fcode)
{
case ALTIVEC_BUILTIN_LD_INTERNAL_16qi:
- icode = CODE_FOR_altivec_lvx_16qi;
+ icode = CODE_FOR_altivec_lvx_v16qi;
break;
case ALTIVEC_BUILTIN_LD_INTERNAL_8hi:
- icode = CODE_FOR_altivec_lvx_8hi;
+ icode = CODE_FOR_altivec_lvx_v8hi;
break;
case ALTIVEC_BUILTIN_LD_INTERNAL_4si:
- icode = CODE_FOR_altivec_lvx_4si;
+ icode = CODE_FOR_altivec_lvx_v4si;
break;
case ALTIVEC_BUILTIN_LD_INTERNAL_4sf:
- icode = CODE_FOR_altivec_lvx_4sf;
+ icode = CODE_FOR_altivec_lvx_v4sf;
break;
default:
*expandedp = false;
@@ -6953,16 +6953,16 @@ altivec_expand_st_builtin (tree exp, rtx target ATTRIBUTE_UNUSED,
switch (fcode)
{
case ALTIVEC_BUILTIN_ST_INTERNAL_16qi:
- icode = CODE_FOR_altivec_stvx_16qi;
+ icode = CODE_FOR_altivec_stvx_v16qi;
break;
case ALTIVEC_BUILTIN_ST_INTERNAL_8hi:
- icode = CODE_FOR_altivec_stvx_8hi;
+ icode = CODE_FOR_altivec_stvx_v8hi;
break;
case ALTIVEC_BUILTIN_ST_INTERNAL_4si:
- icode = CODE_FOR_altivec_stvx_4si;
+ icode = CODE_FOR_altivec_stvx_v4si;
break;
case ALTIVEC_BUILTIN_ST_INTERNAL_4sf:
- icode = CODE_FOR_altivec_stvx_4sf;
+ icode = CODE_FOR_altivec_stvx_v4sf;
break;
default:
*expandedp = false;