From c4693b2ff38d0da641e53d65ccd93c4138540c42 Mon Sep 17 00:00:00 2001 From: rsandifo Date: Sun, 1 Aug 2004 11:30:39 +0000 Subject: [PATCH] * config/mips/mips.md (cprestore): Provide two alternatives, one for an in-range offset and one for an out-of-range offset. Wrap the latter in .set macro/.set nomacro if it's inside a .set nomacro block. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@85405 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 6 ++++++ gcc/config/mips/mips.md | 17 +++++++++++------ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c47eb67d586..965c6556534 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,11 @@ 2004-08-01 Richard Sandiford + * config/mips/mips.md (cprestore): Provide two alternatives, one for + an in-range offset and one for an out-of-range offset. Wrap the latter + in .set macro/.set nomacro if it's inside a .set nomacro block. + +2004-08-01 Richard Sandiford + * config/mips/mips-protos.h (mips_gp_save_slot): Remove. (mips_restore_gp): Declare. * config/mips/mips.c (mips_add_offset): Add a scratch register diff --git a/gcc/config/mips/mips.md b/gcc/config/mips/mips.md index 586f12df177..7c6771dd749 100644 --- a/gcc/config/mips/mips.md +++ b/gcc/config/mips/mips.md @@ -4787,16 +4787,21 @@ dsrl\t%3,%3,1\n\ (set_attr "mode" "none") (set_attr "length" "0")]) -;; Emit a .cprestore directive, which expands to a single store instruction. -;; Note that we continue to use .cprestore for explicit reloc code so that -;; jals inside inlines asms will work correctly. +;; Emit a .cprestore directive, which normally expands to a single store +;; instruction. Note that we continue to use .cprestore for explicit reloc +;; code so that jals inside inline asms will work correctly. (define_insn "cprestore" - [(unspec_volatile [(match_operand 0 "const_int_operand" "")] + [(unspec_volatile [(match_operand 0 "const_int_operand" "I,i")] UNSPEC_CPRESTORE)] "" - ".cprestore\t%0" +{ + if (set_nomacro && which_alternative == 1) + return ".set\tmacro\;.cprestore\t%0\;.set\tnomacro"; + else + return ".cprestore\t%0"; +} [(set_attr "type" "store") - (set_attr "length" "4")]) + (set_attr "length" "4,12")]) ;; Block moves, see mips.c for more details. ;; Argument 0 is the destination -- 2.11.4.GIT