aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2001-06-14 13:15:19 -0700
committerRichard Henderson <rth@gcc.gnu.org>2001-06-14 13:15:19 -0700
commit68f4edf0790977a1842dbd2acf8de7febf7aa94a (patch)
tree182245d3e281a9d46c64920a2f759b5f027f5896 /gcc
parent894b7c636ab389757cc11a5197444f6252cb2303 (diff)
downloadgcc-68f4edf0790977a1842dbd2acf8de7febf7aa94a.zip
gcc-68f4edf0790977a1842dbd2acf8de7febf7aa94a.tar.gz
gcc-68f4edf0790977a1842dbd2acf8de7febf7aa94a.tar.bz2
* config/mips/mips.md (exception_receiver): New.
From-SVN: r43379
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/config/mips/mips.md23
2 files changed, 26 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 8f99787..1e63d0d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,7 @@
+2001-06-14 Richard Henderson <rth@redhat.com>
+
+ * config/mips/mips.md (exception_receiver): New.
+
2001-06-14 Daniel J. Berlin <dan@cgsoftware.com>
* doc/gcc.texi: Update passes documentation to be more in tune
diff --git a/gcc/config/mips/mips.md b/gcc/config/mips/mips.md
index 5b8d00e..b01e484 100644
--- a/gcc/config/mips/mips.md
+++ b/gcc/config/mips/mips.md
@@ -30,13 +30,14 @@
;; Number USE
;; 0 movsi_ul
;; 1 movsi_us, get_fnaddr
-;; 2 loadgp
;; 3 eh_set_return
;; 20 builtin_setjmp_setup
;;
;; UNSPEC_VOLATILE values
;; 0 blockage
+;; 2 loadgp
;; 3 builtin_longjmp
+;; 4 exception_receiver
;; 10 consttable_qi
;; 11 consttable_hi
;; 12 consttable_si
@@ -9571,6 +9572,26 @@ ld\\t%2,%1-%S1(%2)\;daddu\\t%2,%2,$31\;j\\t%2"
operands[0]);
DONE;
}")
+
+(define_insn "exception_receiver"
+ [(unspec_volatile [(const_int 0)] 4)]
+ "TARGET_ABICALLS && (mips_abi == ABI_32 || mips_abi == ABI_O64)"
+ "*
+{
+ rtx loc;
+
+ operands[0] = pic_offset_table_rtx;
+ if (frame_pointer_needed)
+ loc = hard_frame_pointer_rtx;
+ else
+ loc = stack_pointer_rtx;
+ loc = plus_constant (loc, current_frame_info.args_size);
+ operands[1] = gen_rtx_MEM (Pmode, loc);
+
+ return mips_move_1word (operands, insn, 0);
+}"
+ [(set_attr "type" "load")
+ (set_attr "length" "8")])
;;
;; ....................