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
This commit is contained in:
Aldy Hernandez 2002-02-25 02:30:33 +00:00 committed by Aldy Hernandez
parent 2e8f5b2dde
commit b188f760ce
3 changed files with 32 additions and 2 deletions

View file

@ -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.

View file

@ -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;

View file

@ -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