aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAldy Hernandez <aldyh@redhat.com>2002-02-25 02:30:33 +0000
committerAldy Hernandez <aldyh@gcc.gnu.org>2002-02-25 02:30:33 +0000
commitb188f760cee19e9542e5f553fbf7c20a0c6159ac (patch)
treef43efcd4bcf01294d12142299021e6c8661d401c
parent2e8f5b2dde5709cd3be658bd3e2c8acac9f03a61 (diff)
downloadgcc-b188f760cee19e9542e5f553fbf7c20a0c6159ac.zip
gcc-b188f760cee19e9542e5f553fbf7c20a0c6159ac.tar.gz
gcc-b188f760cee19e9542e5f553fbf7c20a0c6159ac.tar.bz2
rs6000.md ("get_vrsave_internal"): New.
2002-02-25 Aldy Hernandez <aldyh@redhat.com> * config/rs6000/rs6000.md ("get_vrsave_internal"): New. ("*set_vrsave_internal"): use mfspr for Darwin. * config/rs6000/rs6000.c (rs6000_emit_prologue): Call gen_get_vrsave_internal. From-SVN: r50015
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/config/rs6000/rs6000.c5
-rw-r--r--gcc/config/rs6000/rs6000.md21
3 files changed, 32 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 8e06eee..9e3e084 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2002-02-25 Aldy Hernandez <aldyh@redhat.com>
+
+ * config/rs6000/rs6000.md ("get_vrsave_internal"): New.
+ ("*set_vrsave_internal"): use mfspr for Darwin.
+
+ * config/rs6000/rs6000.c (rs6000_emit_prologue): Call
+ gen_get_vrsave_internal.
+
Sun Feb 24 16:38:56 2002 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* optabs.c (widen_operand): Properly handle CONST_INT for NO_EXTEND.
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index 70adbf8..c1d8911 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -8739,7 +8739,10 @@ rs6000_emit_prologue ()
/* Get VRSAVE onto a GPR. */
reg = gen_rtx_REG (SImode, 12);
vrsave = gen_rtx_REG (SImode, VRSAVE_REGNO);
- emit_insn (gen_rtx_SET (VOIDmode, reg, vrsave));
+ if (TARGET_MACHO)
+ emit_insn (gen_get_vrsave_internal (reg));
+ else
+ emit_insn (gen_rtx_SET (VOIDmode, reg, vrsave));
/* Save VRSAVE. */
offset = info->vrsave_save_offset + sp_offset;
diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md
index c83a4db..baf9653 100644
--- a/gcc/config/rs6000/rs6000.md
+++ b/gcc/config/rs6000/rs6000.md
@@ -14008,13 +14008,32 @@
[(set_attr "type" "altivec")
(set_attr "length" "*,*,*,16,16,16")])
+(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 \"mtspr 256,%0\";
+ else
+ return \"mtvrsave %0\";
+}"
+ [(set_attr "type" "altivec")])
+
(define_insn "*set_vrsave_internal"
[(match_parallel 0 "vrsave_operation"
[(set (reg:SI 109)
(unspec_volatile:SI [(match_operand:SI 1 "register_operand" "r")
(reg:SI 109)] 30))])]
"TARGET_ALTIVEC"
- "mtvrsave %1"
+ "*
+{
+ if (TARGET_MACHO)
+ return \"mfspr %1,256\";
+ else
+ return \"mtvrsave %1\";
+}"
[(set_attr "type" "altivec")])
;; Vector clears