2006-01-03 Zoltan Varga <vargaz@gmail.com>
[mono.git] / mono / mini / exceptions-ia64.c
index 64d45a2f04619c215ede6eebeaffb33e6c0000b4..0399356f03371ebd5978e6be1a231b8817625d44 100644 (file)
@@ -116,17 +116,18 @@ get_real_call_filter (void)
        /* int call_filter (guint64 fp, guint64 ip) */
 
        /*
-        * We have to create a register+stack frame similar to the frame which contains
-        * the filter. 
+        * We have to create a register+stack frame similar to the frame which 
+        * contains the filter. 
         * - setting fp
         * - setting up a register stack frame
-        * These cannot be set up in this function, because the fp register is a stacked
-        * register which is different in each method. Also, the register stack frame is
-        * different in each method. So we pass the FP value in a a non-stacked
-        * register and the code generated by the OP_START_HANDLER opcode will copy it
-        * to the appropriate register after setting up the register stack frame.
+        * These cannot be set up in this function, because the fp register is a 
+        * stacked register which is different in each method. Also, the register 
+        * stack frame is different in each method. So we pass the FP value in a a 
+        * non-stacked register and the code generated by the OP_START_HANDLER 
+        * opcode will copy it to the appropriate register after setting up the 
+        * register stack frame.
         * The stacked registers are not need to be set since variables used in
-        * handler registers are never allocated to registers.
+        * handler regions are never allocated to registers.
         */
 
        in0 = 32;
@@ -152,25 +153,13 @@ get_real_call_filter (void)
        /* Target ip */
        ia64_mov_to_br (code, IA64_B6, in0 + 1);
 
-       /* Return address */
-       ia64_mov_from_ip (code, GP_SCRATCH_REG);
-       ia64_adds_imm (code, GP_SCRATCH_REG, 3 * 16, GP_SCRATCH_REG);
-
        /* Call the filter */
        ia64_br_call_reg (code, IA64_B0, IA64_B6);
 
        /* R8 contains the result of the filter */
-       /* R9 contains the saved apr_pfs value */
 
        /* FIXME: Add unwind info for this */
 
-       /* The filter returns using br_cond_reg, so have to do another return */
-       ia64_mov_to_ar_i (code, IA64_PFS, IA64_R9);
-       ia64_mov_from_ip (code, GP_SCRATCH_REG);        
-       ia64_adds_imm (code, GP_SCRATCH_REG, 4 * 16, GP_SCRATCH_REG);
-       ia64_mov_to_br (code, IA64_B0, GP_SCRATCH_REG);
-       ia64_br_ret_reg (code, IA64_B0);
-
        ia64_begin_bundle (code);
 
        r_body = mono_ia64_create_unwind_region (&code);