On Thu, Jun 14, 2001 at 11:41:17AM -0700, H . J . Lu wrote: > 1. Is the usage of current_frame_info.args_size right? Yes. > 2. What should be in the place of [(const_int 4)]? Some unspec_volatile. > 3. Does it need other patterns for similar situations? Yes, O64. > 4. Is my patch ok? No. This one should be ok. r~ Index: mips.md =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/mips/mips.md,v retrieving revision 1.94 diff -c -p -d -r1.94 mips.md *** mips.md 2001/05/20 00:35:24 1.94 --- mips.md 2001/06/14 18:50:32 *************** *** 30,42 **** ;; 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 ;; 3 builtin_longjmp ;; 10 consttable_qi ;; 11 consttable_hi ;; 12 consttable_si --- 30,43 ---- ;; Number USE ;; 0 movsi_ul ;; 1 movsi_us, get_fnaddr ;; 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 *************** ld\\t%2,%1-%S1(%2)\;daddu\\t%2,%2,$31\;j *** 9571,9576 **** --- 9572,9598 ---- 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] = gen_rtx_REG (Pmode, PIC_FUNCTION_ADDR_REGNUM); + + 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")]) ;; ;; ....................