Commit b8b044f1 by Richard Sandiford Committed by Richard Sandiford

mips.md (cprestore): Provide two alternatives...

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

From-SVN: r85405
parent b73ce23b
2004-08-01 Richard Sandiford <rsandifo@redhat.com> 2004-08-01 Richard Sandiford <rsandifo@redhat.com>
* 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 <rsandifo@redhat.com>
* config/mips/mips-protos.h (mips_gp_save_slot): Remove. * config/mips/mips-protos.h (mips_gp_save_slot): Remove.
(mips_restore_gp): Declare. (mips_restore_gp): Declare.
* config/mips/mips.c (mips_add_offset): Add a scratch register * config/mips/mips.c (mips_add_offset): Add a scratch register
......
...@@ -4787,16 +4787,21 @@ dsrl\t%3,%3,1\n\ ...@@ -4787,16 +4787,21 @@ dsrl\t%3,%3,1\n\
(set_attr "mode" "none") (set_attr "mode" "none")
(set_attr "length" "0")]) (set_attr "length" "0")])
;; Emit a .cprestore directive, which expands to a single store instruction. ;; Emit a .cprestore directive, which normally expands to a single store
;; Note that we continue to use .cprestore for explicit reloc code so that ;; instruction. Note that we continue to use .cprestore for explicit reloc
;; jals inside inlines asms will work correctly. ;; code so that jals inside inline asms will work correctly.
(define_insn "cprestore" (define_insn "cprestore"
[(unspec_volatile [(match_operand 0 "const_int_operand" "")] [(unspec_volatile [(match_operand 0 "const_int_operand" "I,i")]
UNSPEC_CPRESTORE)] 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 "type" "store")
(set_attr "length" "4")]) (set_attr "length" "4,12")])
;; Block moves, see mips.c for more details. ;; Block moves, see mips.c for more details.
;; Argument 0 is the destination ;; Argument 0 is the destination
......
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