Commit b188f760 by Aldy Hernandez Committed by Aldy Hernandez

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
parent 2e8f5b2d
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> 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. * optabs.c (widen_operand): Properly handle CONST_INT for NO_EXTEND.
......
...@@ -8739,7 +8739,10 @@ rs6000_emit_prologue () ...@@ -8739,7 +8739,10 @@ rs6000_emit_prologue ()
/* Get VRSAVE onto a GPR. */ /* Get VRSAVE onto a GPR. */
reg = gen_rtx_REG (SImode, 12); reg = gen_rtx_REG (SImode, 12);
vrsave = gen_rtx_REG (SImode, VRSAVE_REGNO); 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. */ /* Save VRSAVE. */
offset = info->vrsave_save_offset + sp_offset; offset = info->vrsave_save_offset + sp_offset;
......
...@@ -14008,13 +14008,32 @@ ...@@ -14008,13 +14008,32 @@
[(set_attr "type" "altivec") [(set_attr "type" "altivec")
(set_attr "length" "*,*,*,16,16,16")]) (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" (define_insn "*set_vrsave_internal"
[(match_parallel 0 "vrsave_operation" [(match_parallel 0 "vrsave_operation"
[(set (reg:SI 109) [(set (reg:SI 109)
(unspec_volatile:SI [(match_operand:SI 1 "register_operand" "r") (unspec_volatile:SI [(match_operand:SI 1 "register_operand" "r")
(reg:SI 109)] 30))])] (reg:SI 109)] 30))])]
"TARGET_ALTIVEC" "TARGET_ALTIVEC"
"mtvrsave %1" "*
{
if (TARGET_MACHO)
return \"mfspr %1,256\";
else
return \"mtvrsave %1\";
}"
[(set_attr "type" "altivec")]) [(set_attr "type" "altivec")])
;; Vector clears ;; Vector clears
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment