diff options
author | Marc Espie <espie@cvs.openbsd.org> | 2000-01-23 14:51:08 +0000 |
---|---|---|
committer | Marc Espie <espie@cvs.openbsd.org> | 2000-01-23 14:51:08 +0000 |
commit | 569d912081b6e4b917696240f6b71e5821e3b205 (patch) | |
tree | 06b4d8ddb0c889cb5227a3d41ea9d6c09859baf7 | |
parent | dc3647bc53826ea14a8647b471783c54f5521bfb (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.md | 21 |
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; +}") |