summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc Espie <espie@cvs.openbsd.org>2000-01-23 14:51:08 +0000
committerMarc Espie <espie@cvs.openbsd.org>2000-01-23 14:51:08 +0000
commit569d912081b6e4b917696240f6b71e5821e3b205 (patch)
tree06b4d8ddb0c889cb5227a3d41ea9d6c09859baf7
parentdc3647bc53826ea14a8647b471783c54f5521bfb (diff)
Repair exceptions in i386 pic code (builtin setjmp/longjmp was not saving
the pic register). FreeBSD PR 3441... Thanks to David O'Brien for letting me know, and Alexander N. Kabaev for the actual fix.
-rw-r--r--gnu/egcs/gcc/config/i386/i386.md21
1 files changed, 15 insertions, 6 deletions
diff --git a/gnu/egcs/gcc/config/i386/i386.md b/gnu/egcs/gcc/config/i386/i386.md
index fb3e1b2ad0b..effcc4f5d83 100644
--- a/gnu/egcs/gcc/config/i386/i386.md
+++ b/gnu/egcs/gcc/config/i386/i386.md
@@ -2711,7 +2711,7 @@
}")
(define_insn ""
- [(set (match_operand:SI 0 "nonimmediate_operand" "=m,!r")
+ [(set (match_operand:SI 0 "nonimmediate_operand" "=m,!&r")
(fix:SI (fix:SF (match_operand:SF 1 "register_operand" "f,f"))))
(clobber (match_operand:HI 2 "memory_operand" "m,m"))
(clobber (match_operand:HI 3 "memory_operand" "m,m"))
@@ -2739,7 +2739,7 @@
}")
(define_insn ""
- [(set (match_operand:DI 0 "nonimmediate_operand" "=m,!r")
+ [(set (match_operand:DI 0 "nonimmediate_operand" "=m,!&r")
(fix:DI (fix:SF (match_operand:SF 1 "register_operand" "f,f"))))
(clobber (match_dup 1))
(clobber (match_operand:HI 2 "memory_operand" "m,m"))
@@ -2766,7 +2766,7 @@
}")
(define_insn ""
- [(set (match_operand:SI 0 "nonimmediate_operand" "=m,!r")
+ [(set (match_operand:SI 0 "nonimmediate_operand" "=m,!&r")
(fix:SI (fix:DF (match_operand:DF 1 "register_operand" "f,f"))))
(clobber (match_operand:HI 2 "memory_operand" "m,m"))
(clobber (match_operand:HI 3 "memory_operand" "m,m"))
@@ -2794,7 +2794,7 @@
}")
(define_insn ""
- [(set (match_operand:DI 0 "nonimmediate_operand" "=m,!r")
+ [(set (match_operand:DI 0 "nonimmediate_operand" "=m,!&r")
(fix:DI (fix:DF (match_operand:DF 1 "register_operand" "f,f"))))
(clobber (match_dup 1))
(clobber (match_operand:HI 2 "memory_operand" "m,m"))
@@ -2821,7 +2821,7 @@
}")
(define_insn ""
- [(set (match_operand:SI 0 "nonimmediate_operand" "=m,!r")
+ [(set (match_operand:SI 0 "nonimmediate_operand" "=m,!&r")
(fix:SI (fix:XF (match_operand:XF 1 "register_operand" "f,f"))))
(clobber (match_operand:HI 2 "memory_operand" "m,m"))
(clobber (match_operand:HI 3 "memory_operand" "m,m"))
@@ -2849,7 +2849,7 @@
}")
(define_insn ""
- [(set (match_operand:DI 0 "nonimmediate_operand" "=m,!r")
+ [(set (match_operand:DI 0 "nonimmediate_operand" "=m,!&r")
(fix:DI (fix:XF (match_operand:XF 1 "register_operand" "f,f"))))
(clobber (match_dup 1))
(clobber (match_operand:HI 2 "memory_operand" "m,m"))
@@ -8193,3 +8193,12 @@ byte_xor_operation:
load_pic_register (1);
DONE;
}")
+
+(define_expand "builtin_setjmp_receiver"
+ [(label_ref (match_operand 0 "" ""))]
+ "flag_pic"
+ "
+{
+ load_pic_register (1);
+ DONE;
+}")