[arm] Remove the unfinished nacl codegen code.
authorZoltan Varga <vargaz@gmail.com>
Wed, 11 May 2016 07:36:20 +0000 (07:36 +0000)
committerZoltan Varga <vargaz@gmail.com>
Wed, 11 May 2016 07:36:20 +0000 (07:36 +0000)
mono/mini/mini-arm.c
mono/mini/mini-arm.h
mono/mini/mini-runtime.c
mono/mini/mini.c
mono/mini/mini.h
mono/mini/tramp-arm.c

index 057f84ea0b24365d6e1e40b1a29d8fb5895503ef..af41792adcd4b516150aead64a4989fbebf1b06a 100644 (file)
 
 #define THUNK_SIZE (3 * 4)
 
-#ifdef __native_client_codegen__
-const guint kNaClAlignment = kNaClAlignmentARM;
-const guint kNaClAlignmentMask = kNaClAlignmentMaskARM;
-gint8 nacl_align_byte = -1; /* 0xff */
-
-guint8 *
-mono_arch_nacl_pad (guint8 *code, int pad)
-{
-  /* Not yet properly implemented. */
-  g_assert_not_reached ();
-  return code;
-}
-
-guint8 *
-mono_arch_nacl_skip_nops (guint8 *code)
-{
-  /* Not yet properly implemented. */
-  g_assert_not_reached ();
-  return code;
-}
-
-#endif /* __native_client_codegen__ */
-
 #define ALIGN_TO(val,align) ((((guint64)val) + ((align) - 1)) & ~((align) - 1))
 
 #if __APPLE__
@@ -308,9 +285,6 @@ emit_call_reg (guint8 *code, int reg)
        if (v5_supported) {
                ARM_BLX_REG (code, reg);
        } else {
-#ifdef USE_JUMP_TABLES
-               g_assert_not_reached ();
-#endif
                ARM_MOV_REG_REG (code, ARMREG_LR, ARMREG_PC);
                if (thumb_supported)
                        ARM_BX (code, reg);
@@ -323,9 +297,6 @@ emit_call_reg (guint8 *code, int reg)
 static guint8*
 emit_call_seq (MonoCompile *cfg, guint8 *code)
 {
-#ifdef USE_JUMP_TABLES
-       code = mono_arm_patchable_bl (code, ARMCOND_AL);
-#else
        if (cfg->method->dynamic) {
                ARM_LDR_IMM (code, ARMREG_IP, ARMREG_PC, 0);
                ARM_B (code, 0);
@@ -336,58 +307,23 @@ emit_call_seq (MonoCompile *cfg, guint8 *code)
                ARM_BL (code, 0);
        }
        cfg->thunk_area += THUNK_SIZE;
-#endif
        return code;
 }
 
 guint8*
 mono_arm_patchable_b (guint8 *code, int cond)
 {
-#ifdef USE_JUMP_TABLES
-       gpointer *jte;
-
-       jte = mono_jumptable_add_entry ();
-       code = mono_arm_load_jumptable_entry (code, jte, ARMREG_IP);
-       ARM_BX_COND (code, cond, ARMREG_IP);
-#else
        ARM_B_COND (code, cond, 0);
-#endif
        return code;
 }
 
 guint8*
 mono_arm_patchable_bl (guint8 *code, int cond)
 {
-#ifdef USE_JUMP_TABLES
-       gpointer *jte;
-
-       jte = mono_jumptable_add_entry ();
-       code = mono_arm_load_jumptable_entry (code, jte,  ARMREG_IP);
-       ARM_BLX_REG_COND (code, cond, ARMREG_IP);
-#else
        ARM_BL_COND (code, cond, 0);
-#endif
-       return code;
-}
-
-#ifdef USE_JUMP_TABLES
-guint8*
-mono_arm_load_jumptable_entry_addr (guint8 *code, gpointer *jte, ARMReg reg)
-{
-       ARM_MOVW_REG_IMM (code, reg, GPOINTER_TO_UINT(jte) & 0xffff);
-       ARM_MOVT_REG_IMM (code, reg, (GPOINTER_TO_UINT(jte) >> 16) & 0xffff);
        return code;
 }
 
-guint8*
-mono_arm_load_jumptable_entry (guint8 *code, gpointer* jte, ARMReg reg)
-{
-       code = mono_arm_load_jumptable_entry_addr (code, jte, reg);
-       ARM_LDR_IMM (code, reg, reg, 0);
-       return code;
-}
-#endif
-
 static guint8*
 mono_arm_emit_tls_get (MonoCompile *cfg, guint8* code, int dreg, int tls_offset)
 {
@@ -3901,13 +3837,6 @@ arm_patch_general (MonoCompile *cfg, MonoDomain *domain, guchar *code, const guc
                return;
        }
 
-#ifdef USE_JUMP_TABLES
-       {
-               gpointer *jte = mono_jumptable_get_entry (code);
-               g_assert (jte);
-               jte [0] = (gpointer) target;
-       }
-#else
        /*
         * The alternative call sequences looks like this:
         *
@@ -4002,7 +3931,6 @@ arm_patch_general (MonoCompile *cfg, MonoDomain *domain, guchar *code, const guc
                g_assert_not_reached ();
        }
 //     g_print ("patched with 0x%08x\n", ins);
-#endif
 }
 
 void
@@ -4624,16 +4552,10 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                                                g_assert (arm_is_imm12 (var->inst_offset));
                                                ARM_LDR_IMM (code, dreg, var->inst_basereg, var->inst_offset);
                                        } else {
-#ifdef USE_JUMP_TABLES
-                                               gpointer *jte = mono_jumptable_add_entry ();
-                                               code = mono_arm_load_jumptable_entry (code, jte, dreg);
-                                               jte [0] = ss_trigger_page;
-#else
                                                ARM_LDR_IMM (code, dreg, ARMREG_PC, 0);
                                                ARM_B (code, 0);
                                                *(int*)code = (int)ss_trigger_page;
                                                code += 4;
-#endif
                                        }
                                        ARM_LDR_IMM (code, dreg, dreg, 0);
                                }
@@ -5341,14 +5263,6 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                         * FIXME: add aot support.
                         */
                        mono_add_patch_info (cfg, offset, MONO_PATCH_INFO_SWITCH, ins->inst_p0);
-#ifdef USE_JUMP_TABLES
-                       {
-                               gpointer *jte = mono_jumptable_add_entries (GPOINTER_TO_INT (ins->klass));
-                               code = mono_arm_load_jumptable_entry_addr (code, jte, ARMREG_IP);
-                               ARM_LDR_REG_REG_SHIFT (code, ARMREG_PC, ARMREG_IP, ins->sreg1, ARMSHIFT_LSL, 2);
-                       }
-#else
-
                        max_len += 4 * GPOINTER_TO_INT (ins->klass);
                        if (offset + max_len > (cfg->code_size - 16)) {
                                cfg->code_size += max_len;
@@ -5359,7 +5273,6 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                        ARM_LDR_REG_REG_SHIFT (code, ARMREG_PC, ARMREG_PC, ins->sreg1, ARMSHIFT_LSL, 2);
                        ARM_NOP (code);
                        code += 4 * GPOINTER_TO_INT (ins->klass);
-#endif
                        break;
                case OP_CEQ:
                case OP_ICEQ:
@@ -5782,15 +5695,6 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                                code = mono_arm_emit_vfp_scratch_save (cfg, code, vfp_scratch1);
                                code = mono_arm_emit_vfp_scratch_save (cfg, code, vfp_scratch2);
 
-#ifdef USE_JUMP_TABLES
-                               {
-                                       gpointer *jte = mono_jumptable_add_entries (2);
-                                       jte [0] = GUINT_TO_POINTER (0xffffffff);
-                                       jte [1] = GUINT_TO_POINTER (0x7fefffff);
-                                       code = mono_arm_load_jumptable_entry_addr (code, jte, ARMREG_IP);
-                                       ARM_FLDD (code, vfp_scratch1, ARMREG_IP, 0);
-                               }
-#else
                                ARM_ABSD (code, vfp_scratch2, ins->sreg1);
                                ARM_FLDD (code, vfp_scratch1, ARMREG_PC, 0);
                                ARM_B (code, 1);
@@ -5798,7 +5702,6 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                                code += 4;
                                *(guint32*)code = 0x7fefffff;
                                code += 4;
-#endif
                                ARM_CMPD (code, vfp_scratch2, vfp_scratch1);
                                ARM_FMSTAT (code);
                                EMIT_COND_SYSTEM_EXCEPTION_FLAGS (ARMCOND_GT, "OverflowException");
@@ -6027,11 +5930,7 @@ mono_arch_patch_code_new (MonoCompile *cfg, MonoDomain *domain, guint8 *code, Mo
 
        switch (ji->type) {
        case MONO_PATCH_INFO_SWITCH: {
-#ifdef USE_JUMP_TABLES
-               gpointer *jt = mono_jumptable_get_entry (ip);
-#else
                gpointer *jt = (gpointer*)(ip + 8);
-#endif
                int i;
                /* jt is the inlined jump table, 2 instructions after ip
                 * In the normal case we store the absolute addresses,
@@ -6514,19 +6413,10 @@ mono_arch_emit_prolog (MonoCompile *cfg)
 
                /* Initialize the variable from a GOT slot */
                mono_add_patch_info (cfg, code - cfg->native_code, MONO_PATCH_INFO_SEQ_POINT_INFO, cfg->method);
-#ifdef USE_JUMP_TABLES
-               {
-                       gpointer *jte = mono_jumptable_add_entry ();
-                       code = mono_arm_load_jumptable_entry (code, jte, ARMREG_IP);
-                       ARM_LDR_IMM (code, ARMREG_R0, ARMREG_IP, 0);
-               }
-               /** XXX: is it correct? */
-#else
                ARM_LDR_IMM (code, ARMREG_R0, ARMREG_PC, 0);
                ARM_B (code, 0);
                *(gpointer*)code = NULL;
                code += 4;
-#endif
                ARM_LDR_REG_REG (code, ARMREG_R0, ARMREG_PC, ARMREG_R0);
 
                g_assert (ins->opcode == OP_REGOFFSET);
@@ -6559,27 +6449,17 @@ mono_arch_emit_prolog (MonoCompile *cfg)
        if (cfg->arch.seq_point_ss_method_var) {
                MonoInst *ss_method_ins = cfg->arch.seq_point_ss_method_var;
                MonoInst *bp_method_ins = cfg->arch.seq_point_bp_method_var;
-#ifdef USE_JUMP_TABLES
-               gpointer *jte;
-#endif
                g_assert (ss_method_ins->opcode == OP_REGOFFSET);
                g_assert (arm_is_imm12 (ss_method_ins->inst_offset));
                g_assert (bp_method_ins->opcode == OP_REGOFFSET);
                g_assert (arm_is_imm12 (bp_method_ins->inst_offset));
 
-#ifdef USE_JUMP_TABLES
-               jte = mono_jumptable_add_entries (3);
-               jte [0] = &single_step_tramp;
-               jte [1] = breakpoint_tramp;
-               code = mono_arm_load_jumptable_entry_addr (code, jte, ARMREG_LR);
-#else
                ARM_MOV_REG_REG (code, ARMREG_LR, ARMREG_PC);
                ARM_B (code, 1);
                *(gpointer*)code = &single_step_tramp;
                code += 4;
                *(gpointer*)code = breakpoint_tramp;
                code += 4;
-#endif
 
                ARM_LDR_IMM (code, ARMREG_IP, ARMREG_LR, 0);
                ARM_STR_IMM (code, ARMREG_IP, ss_method_ins->inst_basereg, ss_method_ins->inst_offset);
@@ -6807,19 +6687,6 @@ mono_arch_emit_exceptions (MonoCompile *cfg)
                        exc_class = mono_class_load_from_name (mono_defaults.corlib, "System", patch_info->data.name);
 
                        ARM_MOV_REG_REG (code, ARMREG_R1, ARMREG_LR);
-#ifdef USE_JUMP_TABLES
-                       {
-                               gpointer *jte = mono_jumptable_add_entries (2);
-                               patch_info->type = MONO_PATCH_INFO_INTERNAL_METHOD;
-                               patch_info->data.name = "mono_arch_throw_corlib_exception";
-                               patch_info->ip.i = code - cfg->native_code;
-                               code = mono_arm_load_jumptable_entry_addr (code, jte, ARMREG_R0);
-                               ARM_LDR_IMM (code, ARMREG_IP, ARMREG_R0, 0);
-                               ARM_LDR_IMM (code, ARMREG_R0, ARMREG_R0, 4);
-                               ARM_BLX_REG (code, ARMREG_IP);
-                               jte [1] = GUINT_TO_POINTER (exc_class->type_token);
-                       }
-#else
                        ARM_LDR_IMM (code, ARMREG_R0, ARMREG_PC, 0);
                        patch_info->type = MONO_PATCH_INFO_INTERNAL_METHOD;
                        patch_info->data.name = "mono_arch_throw_corlib_exception";
@@ -6828,7 +6695,6 @@ mono_arch_emit_exceptions (MonoCompile *cfg)
                        cfg->thunk_area += THUNK_SIZE;
                        *(guint32*)(gpointer)code = exc_class->type_token - MONO_TOKEN_TYPE_DEF;
                        code += 4;
-#endif
                        break;
                }
                default:
@@ -6915,27 +6781,6 @@ mono_arch_get_cie_program (void)
 #define WMC_SIZE (8 * 4)
 #define DISTANCE(A, B) (((gint32)(B)) - ((gint32)(A)))
 
-#ifdef USE_JUMP_TABLES
-static void
-set_jumptable_element (gpointer *base, guint32 index, gpointer value)
-{
-        g_assert (base [index] == NULL);
-        base [index] = value;
-}
-static arminstr_t *
-load_element_with_regbase_cond (arminstr_t *code, ARMReg dreg, ARMReg base, guint32 jti, int cond)
-{
-       if (arm_is_imm12 (jti * 4)) {
-               ARM_LDR_IMM_COND (code, dreg, base, jti * 4, cond);
-       } else {
-               ARM_MOVW_REG_IMM_COND (code, dreg, (jti * 4) & 0xffff, cond);
-               if ((jti * 4) >> 16)
-                       ARM_MOVT_REG_IMM_COND (code, dreg, ((jti * 4) >> 16) & 0xffff, cond);
-               ARM_LDR_REG_REG_SHIFT_COND (code, dreg, base, dreg, ARMSHIFT_LSL, 0, cond);
-       }
-       return code;
-}
-#else
 static arminstr_t *
 arm_emit_value_and_patch_ldr (arminstr_t *code, arminstr_t *target, guint32 value)
 {
@@ -6946,7 +6791,6 @@ arm_emit_value_and_patch_ldr (arminstr_t *code, arminstr_t *target, guint32 valu
        *code = value;
        return code + 1;
 }
-#endif
 
 #ifdef ENABLE_WRONG_METHOD_CHECK
 static void
@@ -6963,29 +6807,16 @@ mono_arch_build_imt_thunk (MonoVTable *vtable, MonoDomain *domain, MonoIMTCheckI
 {
        int size, i;
        arminstr_t *code, *start;
-#ifdef USE_JUMP_TABLES
-       gpointer *jte;
-#else
        gboolean large_offsets = FALSE;
        guint32 **constant_pool_starts;
        arminstr_t *vtable_target = NULL;
        int extra_space = 0;
-#endif
 #ifdef ENABLE_WRONG_METHOD_CHECK
        char * cond;
 #endif
        GSList *unwind_ops;
 
        size = BASE_SIZE;
-#ifdef USE_JUMP_TABLES
-       for (i = 0; i < count; ++i) {
-               MonoIMTCheckItem *item = imt_entries [i];
-               item->chunk_size += 4 * 16;
-               if (!item->is_equals)
-                       imt_entries [item->check_target_idx]->compare_done = TRUE;
-               size += item->chunk_size;
-       }
-#else
        constant_pool_starts = g_new0 (guint32*, count);
 
        for (i = 0; i < count; ++i) {
@@ -7021,7 +6852,6 @@ mono_arch_build_imt_thunk (MonoVTable *vtable, MonoDomain *domain, MonoIMTCheckI
 
        if (large_offsets)
                size += 4 * count; /* The ARM_ADD_REG_IMM to pop the stack */
-#endif
 
        if (fail_tramp)
                code = mono_method_alloc_generic_virtual_thunk (domain, size);
@@ -7039,23 +6869,6 @@ mono_arch_build_imt_thunk (MonoVTable *vtable, MonoDomain *domain, MonoIMTCheckI
        }
 #endif
 
-#ifdef USE_JUMP_TABLES
-       ARM_PUSH3 (code, ARMREG_R0, ARMREG_R1, ARMREG_R2);
-       mono_add_unwind_op_def_cfa_offset (unwind_ops, code, start, 3 * sizeof (mgreg_t));
-#define VTABLE_JTI 0
-#define IMT_METHOD_OFFSET 0
-#define TARGET_CODE_OFFSET 1
-#define JUMP_CODE_OFFSET 2
-#define RECORDS_PER_ENTRY 3
-#define IMT_METHOD_JTI(idx) (1 + idx * RECORDS_PER_ENTRY + IMT_METHOD_OFFSET)
-#define TARGET_CODE_JTI(idx) (1 + idx * RECORDS_PER_ENTRY + TARGET_CODE_OFFSET)
-#define JUMP_CODE_JTI(idx) (1 + idx * RECORDS_PER_ENTRY + JUMP_CODE_OFFSET)
-
-       jte = mono_jumptable_add_entries (RECORDS_PER_ENTRY * count + 1 /* vtable */);
-       code = (arminstr_t *) mono_arm_load_jumptable_entry_addr ((guint8 *) code, jte, ARMREG_R2);
-       ARM_LDR_IMM (code, ARMREG_IP, ARMREG_R2, VTABLE_JTI);
-       set_jumptable_element (jte, VTABLE_JTI, vtable);
-#else
        if (large_offsets) {
                ARM_PUSH4 (code, ARMREG_R0, ARMREG_R1, ARMREG_IP, ARMREG_PC);
                mono_add_unwind_op_def_cfa_offset (unwind_ops, code, start, 4 * sizeof (mgreg_t));
@@ -7066,16 +6879,11 @@ mono_arch_build_imt_thunk (MonoVTable *vtable, MonoDomain *domain, MonoIMTCheckI
        ARM_LDR_IMM (code, ARMREG_R0, ARMREG_LR, -4);
        vtable_target = code;
        ARM_LDR_IMM (code, ARMREG_IP, ARMREG_PC, 0);
-#endif
        ARM_MOV_REG_REG (code, ARMREG_R0, ARMREG_V5);
 
        for (i = 0; i < count; ++i) {
                MonoIMTCheckItem *item = imt_entries [i];
-#ifdef USE_JUMP_TABLES
-               guint32 imt_method_jti = 0, target_code_jti = 0;
-#else
                arminstr_t *imt_method = NULL, *vtable_offset_ins = NULL, *target_code_ins = NULL;
-#endif
                gint32 vtable_offset;
 
                item->code_target = (guint8*)code;
@@ -7085,33 +6893,17 @@ mono_arch_build_imt_thunk (MonoVTable *vtable, MonoDomain *domain, MonoIMTCheckI
 
                        if (item->check_target_idx || fail_case) {
                                if (!item->compare_done || fail_case) {
-#ifdef USE_JUMP_TABLES
-                                       imt_method_jti = IMT_METHOD_JTI (i);
-                                       code = load_element_with_regbase_cond (code, ARMREG_R1, ARMREG_R2, imt_method_jti, ARMCOND_AL);
-#else
                                        imt_method = code;
                                        ARM_LDR_IMM (code, ARMREG_R1, ARMREG_PC, 0);
-#endif
                                        ARM_CMP_REG_REG (code, ARMREG_R0, ARMREG_R1);
                                }
-#ifdef USE_JUMP_TABLES
-                               code = load_element_with_regbase_cond (code, ARMREG_R1, ARMREG_R2, JUMP_CODE_JTI (i), ARMCOND_NE);
-                               ARM_BX_COND (code, ARMCOND_NE, ARMREG_R1);
-                               item->jmp_code = GUINT_TO_POINTER (JUMP_CODE_JTI (i));
-#else
                                item->jmp_code = (guint8*)code;
                                ARM_B_COND (code, ARMCOND_NE, 0);
-#endif
                        } else {
                                /*Enable the commented code to assert on wrong method*/
 #ifdef ENABLE_WRONG_METHOD_CHECK
-#ifdef USE_JUMP_TABLES
-                               imt_method_jti = IMT_METHOD_JTI (i);
-                               code = load_element_with_regbase_cond (code, ARMREG_R1, ARMREG_R2, imt_method_jti, ARMCOND_AL);
-#else
                                imt_method = code;
                                ARM_LDR_IMM (code, ARMREG_R1, ARMREG_PC, 0);
-#endif
                                ARM_CMP_REG_REG (code, ARMREG_R0, ARMREG_R1);
                                cond = code;
                                ARM_B_COND (code, ARMCOND_EQ, 0);
@@ -7130,16 +6922,6 @@ mono_arch_build_imt_thunk (MonoVTable *vtable, MonoDomain *domain, MonoIMTCheckI
 
                        if (item->has_target_code) {
                                /* Load target address */
-#ifdef USE_JUMP_TABLES
-                               target_code_jti = TARGET_CODE_JTI (i);
-                               code = load_element_with_regbase_cond (code, ARMREG_R1, ARMREG_R2, target_code_jti, ARMCOND_AL);
-                               /* Restore registers */
-                               ARM_POP3 (code, ARMREG_R0, ARMREG_R1, ARMREG_R2);
-                               mono_add_unwind_op_def_cfa_offset (unwind_ops, code, start, 0);
-                               /*  And branch */
-                               ARM_BX (code, ARMREG_R1);
-                               set_jumptable_element (jte, target_code_jti, item->value.target_code);
-#else
                                target_code_ins = code;
                                ARM_LDR_IMM (code, ARMREG_R1, ARMREG_PC, 0);
                                /* Save it to the fourth slot */
@@ -7148,7 +6930,6 @@ mono_arch_build_imt_thunk (MonoVTable *vtable, MonoDomain *domain, MonoIMTCheckI
                                ARM_POP4 (code, ARMREG_R0, ARMREG_R1, ARMREG_IP, ARMREG_PC);
                                
                                code = arm_emit_value_and_patch_ldr (code, target_code_ins, (gsize)item->value.target_code);
-#endif
                        } else {
                                vtable_offset = DISTANCE (vtable, &vtable->vtable[item->value.vtable_slot]);
                                if (!arm_is_imm12 (vtable_offset)) {
@@ -7159,17 +6940,6 @@ mono_arch_build_imt_thunk (MonoVTable *vtable, MonoDomain *domain, MonoIMTCheckI
                                         * load them both using LDM.
                                         */
                                        /* Compute target address */
-#ifdef USE_JUMP_TABLES
-                                       ARM_MOVW_REG_IMM (code, ARMREG_R1, vtable_offset & 0xffff);
-                                       if (vtable_offset >> 16)
-                                               ARM_MOVT_REG_IMM (code, ARMREG_R1, (vtable_offset >> 16) & 0xffff);
-                                       /* IP had vtable base. */
-                                       ARM_LDR_REG_REG (code, ARMREG_IP, ARMREG_IP, ARMREG_R1);
-                                       /* Restore registers and branch */
-                                       ARM_POP3 (code, ARMREG_R0, ARMREG_R1, ARMREG_R2);
-                                       mono_add_unwind_op_def_cfa_offset (unwind_ops, code, start, 0);
-                                       ARM_BX (code, ARMREG_IP);
-#else
                                        vtable_offset_ins = code;
                                        ARM_LDR_IMM (code, ARMREG_R1, ARMREG_PC, 0);
                                        ARM_LDR_REG_REG (code, ARMREG_R1, ARMREG_IP, ARMREG_R1);
@@ -7179,14 +6949,7 @@ mono_arch_build_imt_thunk (MonoVTable *vtable, MonoDomain *domain, MonoIMTCheckI
                                        ARM_POP4 (code, ARMREG_R0, ARMREG_R1, ARMREG_IP, ARMREG_PC);
                                
                                        code = arm_emit_value_and_patch_ldr (code, vtable_offset_ins, vtable_offset);
-#endif
                                } else {
-#ifdef USE_JUMP_TABLES
-                                       ARM_LDR_IMM (code, ARMREG_IP, ARMREG_IP, vtable_offset);
-                                       ARM_POP3 (code, ARMREG_R0, ARMREG_R1, ARMREG_R2);
-                                       mono_add_unwind_op_def_cfa_offset (unwind_ops, code, start, 0);
-                                       ARM_BX (code, ARMREG_IP);
-#else
                                        ARM_POP2 (code, ARMREG_R0, ARMREG_R1);
                                        if (large_offsets) {
                                                mono_add_unwind_op_def_cfa_offset (unwind_ops, code, start, 2 * sizeof (mgreg_t));
@@ -7194,23 +6957,10 @@ mono_arch_build_imt_thunk (MonoVTable *vtable, MonoDomain *domain, MonoIMTCheckI
                                        }
                                        mono_add_unwind_op_def_cfa_offset (unwind_ops, code, start, 0);
                                        ARM_LDR_IMM (code, ARMREG_PC, ARMREG_IP, vtable_offset);
-#endif
                                }
                        }
 
                        if (fail_case) {
-#ifdef USE_JUMP_TABLES
-                               set_jumptable_element (jte, GPOINTER_TO_UINT (item->jmp_code), code);
-                               target_code_jti = TARGET_CODE_JTI (i);
-                               /* Load target address */
-                               code = load_element_with_regbase_cond (code, ARMREG_R1, ARMREG_R2, target_code_jti, ARMCOND_AL);
-                               /* Restore registers */
-                               ARM_POP3 (code, ARMREG_R0, ARMREG_R1, ARMREG_R2);
-                               mono_add_unwind_op_def_cfa_offset (unwind_ops, code, start, 0);
-                               /* And branch */
-                               ARM_BX (code, ARMREG_R1);
-                               set_jumptable_element (jte, target_code_jti, fail_tramp);
-#else
                                arm_patch (item->jmp_code, (guchar*)code);
 
                                target_code_ins = code;
@@ -7222,14 +6972,9 @@ mono_arch_build_imt_thunk (MonoVTable *vtable, MonoDomain *domain, MonoIMTCheckI
                                ARM_POP4 (code, ARMREG_R0, ARMREG_R1, ARMREG_IP, ARMREG_PC);
                                
                                code = arm_emit_value_and_patch_ldr (code, target_code_ins, (gsize)fail_tramp);
-#endif
                                item->jmp_code = NULL;
                        }
 
-#ifdef USE_JUMP_TABLES
-                       if (imt_method_jti)
-                               set_jumptable_element (jte, imt_method_jti, item->key);
-#else
                        if (imt_method)
                                code = arm_emit_value_and_patch_ldr (code, imt_method, (guint32)item->key);
 
@@ -7246,22 +6991,13 @@ mono_arch_build_imt_thunk (MonoVTable *vtable, MonoDomain *domain, MonoIMTCheckI
                                code += extra_space;
                                extra_space = 0;
                        }
-#endif
                } else {
-#ifdef USE_JUMP_TABLES
-                       code = load_element_with_regbase_cond (code, ARMREG_R1, ARMREG_R2, IMT_METHOD_JTI (i), ARMCOND_AL);
-                       ARM_CMP_REG_REG (code, ARMREG_R0, ARMREG_R1);
-                       code = load_element_with_regbase_cond (code, ARMREG_R1, ARMREG_R2, JUMP_CODE_JTI (i), ARMCOND_HS);
-                       ARM_BX_COND (code, ARMCOND_HS, ARMREG_R1);
-                       item->jmp_code = GUINT_TO_POINTER (JUMP_CODE_JTI (i));
-#else
                        ARM_LDR_IMM (code, ARMREG_R1, ARMREG_PC, 0);
                        ARM_CMP_REG_REG (code, ARMREG_R0, ARMREG_R1);
 
                        item->jmp_code = (guint8*)code;
                        ARM_B_COND (code, ARMCOND_HS, 0);
                        ++extra_space;
-#endif
                }
        }
 
@@ -7269,23 +7005,14 @@ mono_arch_build_imt_thunk (MonoVTable *vtable, MonoDomain *domain, MonoIMTCheckI
                MonoIMTCheckItem *item = imt_entries [i];
                if (item->jmp_code) {
                        if (item->check_target_idx)
-#ifdef USE_JUMP_TABLES
-                               set_jumptable_element (jte, GPOINTER_TO_UINT (item->jmp_code), imt_entries [item->check_target_idx]->code_target);
-#else
                                arm_patch (item->jmp_code, imt_entries [item->check_target_idx]->code_target);
-#endif
                }
                if (i > 0 && item->is_equals) {
                        int j;
-#ifdef USE_JUMP_TABLES
-                       for (j = i - 1; j >= 0 && !imt_entries [j]->is_equals; --j)
-                               set_jumptable_element (jte, IMT_METHOD_JTI (j), imt_entries [j]->key);
-#else
                        arminstr_t *space_start = constant_pool_starts [i];
                        for (j = i - 1; j >= 0 && !imt_entries [j]->is_equals; --j) {
                                space_start = arm_emit_value_and_patch_ldr (space_start, (arminstr_t*)imt_entries [j]->code_target, (guint32)imt_entries [j]->key);
                        }
-#endif
                }
        }
 
@@ -7297,9 +7024,7 @@ mono_arch_build_imt_thunk (MonoVTable *vtable, MonoDomain *domain, MonoIMTCheckI
        }
 #endif
 
-#ifndef USE_JUMP_TABLES
        g_free (constant_pool_starts);
-#endif
 
        mono_arch_flush_icache ((guint8*)start, size);
        mono_profiler_code_buffer_new (start, code - start, MONO_PROFILER_CODE_BUFFER_IMT_TRAMPOLINE, NULL);
@@ -7385,16 +7110,10 @@ mono_arch_set_breakpoint (MonoJitInfo *ji, guint8 *ip)
                int dreg = ARMREG_LR;
 
                /* Read from another trigger page */
-#ifdef USE_JUMP_TABLES
-               gpointer *jte = mono_jumptable_add_entry ();
-               code = mono_arm_load_jumptable_entry (code, jte, dreg);
-               jte [0] = bp_trigger_page;
-#else
                ARM_LDR_IMM (code, dreg, ARMREG_PC, 0);
                ARM_B (code, 0);
                *(int*)code = (int)bp_trigger_page;
                code += 4;
-#endif
                ARM_LDR_IMM (code, dreg, dreg, 0);
 
                mono_arch_flush_icache (code - 16, 16);
index 1796bc835d2f557880d23ec2c7309a6fe8aa83b6..85dd844f9295a6a013df7d094a533c4cede903d4 100644 (file)
@@ -403,14 +403,6 @@ mono_arm_patchable_b (guint8 *code, int cond);
 guint8*
 mono_arm_patchable_bl (guint8 *code, int cond);
 
-#ifdef USE_JUMP_TABLES
-guint8*
-mono_arm_load_jumptable_entry_addr (guint8 *code, gpointer *jte, ARMReg reg);
-
-guint8*
-mono_arm_load_jumptable_entry (guint8 *code, gpointer *jte, ARMReg reg);
-#endif
-
 gboolean
 mono_arm_is_hard_float (void);
 
index 3055b585ae0d8c70415bb07be85f7068498dd490..94a4ca0409221b9bf7ce6824e4fc96caa8dd83e0 100644 (file)
@@ -1494,16 +1494,6 @@ mono_resolve_patch_target (MonoMethod *method, MonoDomain *domain, guint8 *code,
 #endif
                break;
        case MONO_PATCH_INFO_METHOD:
-#if defined(__native_client_codegen__) && defined(USE_JUMP_TABLES)
-               /*
-                * If we use jumptables, for recursive calls we cannot
-                * avoid trampoline, as we not yet know where we will
-                * be installed.
-                */
-               target = mono_create_jit_trampoline (domain, patch_info->data.method, error);
-               if (!mono_error_ok (error))
-                       return NULL;
-#else
                if (patch_info->data.method == method) {
                        target = code;
                } else {
@@ -1512,7 +1502,6 @@ mono_resolve_patch_target (MonoMethod *method, MonoDomain *domain, guint8 *code,
                        if (!mono_error_ok (error))
                                return NULL;
                }
-#endif
                break;
        case MONO_PATCH_INFO_METHOD_CODE_SLOT: {
                gpointer code_slot;
@@ -4230,10 +4219,6 @@ mini_cleanup (MonoDomain *domain)
        mono_os_mutex_destroy (&jit_mutex);
 
        mono_code_manager_cleanup ();
-
-#ifdef USE_JUMP_TABLES
-       mono_jumptable_cleanup ();
-#endif
 }
 
 void
@@ -4359,98 +4344,3 @@ mono_personality (void)
        /* Not used */
        g_assert_not_reached ();
 }
-
-#ifdef USE_JUMP_TABLES
-#define DEFAULT_JUMPTABLE_CHUNK_ELEMENTS 128
-
-typedef struct MonoJumpTableChunk {
-       guint32 total;
-       guint32 active;
-       struct MonoJumpTableChunk *previous;
-       /* gpointer entries[total]; */
-} MonoJumpTableChunk;
-
-static MonoJumpTableChunk* g_jumptable;
-#define mono_jumptable_lock() mono_os_mutex_lock (&jumptable_mutex)
-#define mono_jumptable_unlock() mono_os_mutex_unlock (&jumptable_mutex)
-static mono_mutex_t jumptable_mutex;
-
-static  MonoJumpTableChunk*
-mono_create_jumptable_chunk (guint32 max_entries)
-{
-       guint32 size = sizeof (MonoJumpTableChunk) + max_entries * sizeof(gpointer);
-       MonoJumpTableChunk *chunk = (MonoJumpTableChunk*) g_new0 (guchar, size);
-       chunk->total = max_entries;
-       return chunk;
-}
-
-void
-mono_jumptable_init (void)
-{
-       if (g_jumptable == NULL) {
-               mono_os_mutex_init_recursive (&jumptable_mutex);
-               g_jumptable = mono_create_jumptable_chunk (DEFAULT_JUMPTABLE_CHUNK_ELEMENTS);
-       }
-}
-
-gpointer*
-mono_jumptable_add_entry (void)
-{
-       return mono_jumptable_add_entries (1);
-}
-
-gpointer*
-mono_jumptable_add_entries (guint32 entries)
-{
-       guint32 index;
-       gpointer *result;
-
-       mono_jumptable_init ();
-       mono_jumptable_lock ();
-       index = g_jumptable->active;
-       if (index + entries >= g_jumptable->total) {
-               /*
-                * Grow jumptable, by adding one more chunk.
-                * We cannot realloc jumptable, as there could be pointers
-                * to existing jump table entries in the code, so instead
-                * we just add one more chunk.
-                */
-               guint32 max_entries = entries;
-               MonoJumpTableChunk *new_chunk;
-
-               if (max_entries < DEFAULT_JUMPTABLE_CHUNK_ELEMENTS)
-                       max_entries = DEFAULT_JUMPTABLE_CHUNK_ELEMENTS;
-               new_chunk = mono_create_jumptable_chunk (max_entries);
-               /* Link old jumptable, so that we could free it up later. */
-               new_chunk->previous = g_jumptable;
-               g_jumptable = new_chunk;
-               index = 0;
-       }
-       g_jumptable->active = index + entries;
-       result = (gpointer*)((guchar*)g_jumptable + sizeof(MonoJumpTableChunk)) + index;
-       mono_jumptable_unlock();
-
-       return result;
-}
-
-void
-mono_jumptable_cleanup (void)
-{
-       if (g_jumptable) {
-               MonoJumpTableChunk *current = g_jumptable, *prev;
-               while (current != NULL) {
-                       prev = current->previous;
-                       g_free (current);
-                       current = prev;
-               }
-               g_jumptable = NULL;
-               mono_os_mutex_destroy (&jumptable_mutex);
-       }
-}
-
-gpointer*
-mono_jumptable_get_entry (guint8 *code_ptr)
-{
-       return mono_arch_jumptable_entry_from_code (code_ptr);
-}
-#endif
index 94062ec4b84ef71dcc6d6b01c97042e268f4f217..8926d4809842cc6f292702562b409f394420cbbf 100644 (file)
@@ -192,114 +192,15 @@ guint8 *mono_nacl_align(guint8 *code) {
 
 void mono_nacl_fix_patches(const guint8 *code, MonoJumpInfo *ji)
 {
-#ifndef USE_JUMP_TABLES
   MonoJumpInfo *patch_info;
   for (patch_info = ji; patch_info; patch_info = patch_info->next) {
     unsigned char *ip = patch_info->ip.i + code;
     ip = mono_arch_nacl_skip_nops(ip);
     patch_info->ip.i = ip - code;
   }
-#endif
 }
 #endif  /* __native_client_codegen__ */
 
-#ifdef USE_JUMP_TABLES
-
-#define DEFAULT_JUMPTABLE_CHUNK_ELEMENTS 128
-
-typedef struct MonoJumpTableChunk {
-       guint32 total;
-       guint32 active;
-       struct MonoJumpTableChunk *previous;
-       /* gpointer entries[total]; */
-} MonoJumpTableChunk;
-
-static MonoJumpTableChunk* g_jumptable;
-#define mono_jumptable_lock() mono_os_mutex_lock (&jumptable_mutex)
-#define mono_jumptable_unlock() mono_os_mutex_unlock (&jumptable_mutex)
-static mono_mutex_t jumptable_mutex;
-
-static  MonoJumpTableChunk*
-mono_create_jumptable_chunk (guint32 max_entries)
-{
-       guint32 size = sizeof (MonoJumpTableChunk) + max_entries * sizeof(gpointer);
-       MonoJumpTableChunk *chunk = (MonoJumpTableChunk*) g_new0 (guchar, size);
-       chunk->total = max_entries;
-       return chunk;
-}
-
-void
-mono_jumptable_init (void)
-{
-       if (g_jumptable == NULL) {
-               mono_os_mutex_init_recursive (&jumptable_mutex);
-               g_jumptable = mono_create_jumptable_chunk (DEFAULT_JUMPTABLE_CHUNK_ELEMENTS);
-       }
-}
-
-gpointer*
-mono_jumptable_add_entry (void)
-{
-       return mono_jumptable_add_entries (1);
-}
-
-gpointer*
-mono_jumptable_add_entries (guint32 entries)
-{
-       guint32 index;
-       gpointer *result;
-
-       mono_jumptable_init ();
-       mono_jumptable_lock ();
-       index = g_jumptable->active;
-       if (index + entries >= g_jumptable->total) {
-               /*
-                * Grow jumptable, by adding one more chunk.
-                * We cannot realloc jumptable, as there could be pointers
-                * to existing jump table entries in the code, so instead
-                * we just add one more chunk.
-                */
-               guint32 max_entries = entries;
-               MonoJumpTableChunk *new_chunk;
-
-               if (max_entries < DEFAULT_JUMPTABLE_CHUNK_ELEMENTS)
-                       max_entries = DEFAULT_JUMPTABLE_CHUNK_ELEMENTS;
-               new_chunk = mono_create_jumptable_chunk (max_entries);
-               /* Link old jumptable, so that we could free it up later. */
-               new_chunk->previous = g_jumptable;
-               g_jumptable = new_chunk;
-               index = 0;
-       }
-       g_jumptable->active = index + entries;
-       result = (gpointer*)((guchar*)g_jumptable + sizeof(MonoJumpTableChunk)) + index;
-       mono_jumptable_unlock();
-
-       return result;
-}
-
-void
-mono_jumptable_cleanup (void)
-{
-       if (g_jumptable) {
-               MonoJumpTableChunk *current = g_jumptable, *prev;
-               while (current != NULL) {
-                       prev = current->previous;
-                       g_free (current);
-                       current = prev;
-               }
-               g_jumptable = NULL;
-               mono_os_mutex_destroy (&jumptable_mutex);
-       }
-}
-
-gpointer*
-mono_jumptable_get_entry (guint8 *code_ptr)
-{
-       return mono_arch_jumptable_entry_from_code (code_ptr);
-}
-
-#endif /* USE_JUMP_TABLES */
-
 typedef struct {
        MonoExceptionClause *clause;
        MonoBasicBlock *basic_block;
index 99e082907a63cbe0e89798f4d4f3920c99638426..c4f3fb096f191243432dbf54d162c783181cb7db 100644 (file)
@@ -2749,21 +2749,6 @@ gpointer mono_arch_get_seq_point_info           (MonoDomain *domain, guint8 *cod
 void     mono_arch_init_lmf_ext                 (MonoLMFExt *ext, gpointer prev_lmf);
 #endif
 
-#ifdef USE_JUMP_TABLES
-void
-mono_jumptable_init  (void);
-gpointer*
-mono_jumptable_add_entry (void);
-gpointer*
-mono_jumptable_add_entries (guint32 entries);
-void
-mono_jumptable_cleanup  (void);
-gpointer*
-mono_arch_jumptable_entry_from_code (guint8 *code);
-gpointer*
-mono_jumptable_get_entry (guint8 *code);
-#endif
-
 gboolean
 mono_arch_unwind_frame (MonoDomain *domain, MonoJitTlsData *jit_tls, 
                                                MonoJitInfo *ji, MonoContext *ctx, 
index 5ff7bbfdfc8309b5105e0052c8b39dc1199e92b4..4914384b9b99fc1b649a3489356f41de6c565d9c 100644 (file)
 
 #define ALIGN_TO(val,align) ((((guint64)val) + ((align) - 1)) & ~((align) - 1))
 
-#ifdef USE_JUMP_TABLES
-
-static guint16
-decode_imm16 (guint32 insn)
-{
-       return (((insn >> 16) & 0xf) << 12) | (insn & 0xfff);
-}
-
-#define INSN_MASK 0xff00000
-#define MOVW_MASK ((3 << 24) | (0 << 20))
-#define MOVT_MASK ((3 << 24) | (4 << 20))
-
-gpointer*
-mono_arch_jumptable_entry_from_code (guint8 *code)
-{
-       guint32 insn1 = ((guint32*)code) [0];
-       guint32 insn2 = ((guint32*)code) [1];
-
-       if (((insn1 & INSN_MASK) == MOVW_MASK) &&
-           ((insn2 & INSN_MASK) == MOVT_MASK) ) {
-               guint32 imm_lo = decode_imm16 (insn1);
-               guint32 imm_hi = decode_imm16 (insn2);
-               return (gpointer*) GUINT_TO_POINTER (imm_lo | (imm_hi << 16));
-       } else {
-               g_assert_not_reached ();
-               return NULL;
-       }
-}
-
-#undef INSN_MASK
-#undef MOVW_MASK
-#undef MOVT_MASK
-
-void
-mono_arch_patch_callsite (guint8 *method_start, guint8 *code_ptr, guint8 *addr)
-{
-       gpointer *jte;
-       /*
-        * code_ptr is 4 instructions after MOVW/MOVT used to address
-        * jumptable entry.
-        */
-       jte = mono_jumptable_get_entry (code_ptr - 16);
-       g_assert ( jte != NULL);
-       *jte = addr;
-}
-#else
 void
 mono_arch_patch_callsite (guint8 *method_start, guint8 *code_ptr, guint8 *addr)
 {
@@ -101,7 +55,6 @@ mono_arch_patch_callsite (guint8 *method_start, guint8 *code_ptr, guint8 *addr)
 
        g_assert_not_reached ();
 }
-#endif
 
 void
 mono_arch_patch_plt_entry (guint8 *code, gpointer *got, mgreg_t *regs, guint8 *addr)
@@ -135,7 +88,6 @@ mono_arch_patch_plt_entry (guint8 *code, gpointer *got, mgreg_t *regs, guint8 *a
 
 #define arm_is_imm12(v) ((int)(v) > -4096 && (int)(v) < 4096)
 
-#ifndef USE_JUMP_TABLES
 /*
  * Return the instruction to jump from code to target, 0 if not
  * reachable with a single instruction
@@ -155,7 +107,6 @@ branch_for_target_reachable (guint8 *branch, guint8 *target)
        }
        return 0;
 }
-#endif
 
 static inline guint8*
 emit_bx (guint8* code, int reg)
@@ -182,21 +133,13 @@ mono_arch_create_generic_trampoline (MonoTrampolineType tramp_type, MonoTrampInf
 {
        char *tramp_name;
        guint8 *buf, *code = NULL;
-#ifdef USE_JUMP_TABLES
-       gpointer *load_get_lmf_addr = NULL, *load_trampoline = NULL;
-#else
        guint8 *load_get_lmf_addr  = NULL, *load_trampoline  = NULL;
        gpointer *constants;
-#endif
        int i, cfa_offset, regsave_size, lr_offset;
        GSList *unwind_ops = NULL;
        MonoJumpInfo *ji = NULL;
        int buf_len;
 
-#ifdef USE_JUMP_TABLES
-       g_assert (!aot);
-#endif
-
        /* Now we'll create in 'buf' the ARM trampoline code. This
         is the trampoline code common to all methods  */
 
@@ -272,13 +215,8 @@ mono_arch_create_generic_trampoline (MonoTrampolineType tramp_type, MonoTrampInf
                code += 4;
                ARM_LDR_REG_REG (code, ARMREG_R0, ARMREG_PC, ARMREG_R0);
        } else {
-#ifdef USE_JUMP_TABLES
-                load_get_lmf_addr = mono_jumptable_add_entry ();
-                code = mono_arm_load_jumptable_entry (code, load_get_lmf_addr, ARMREG_R0);
-#else
                load_get_lmf_addr = code;
                code += 4;
-#endif
        }
        ARM_MOV_REG_REG (code, ARMREG_LR, ARMREG_PC);
        code = emit_bx (code, ARMREG_R0);
@@ -356,13 +294,8 @@ mono_arch_create_generic_trampoline (MonoTrampolineType tramp_type, MonoTrampInf
                code += 4;
                ARM_LDR_REG_REG (code, ARMREG_IP, ARMREG_PC, ARMREG_IP);
        } else {
-#ifdef USE_JUMP_TABLES
-               load_trampoline = mono_jumptable_add_entry ();
-               code = mono_arm_load_jumptable_entry (code, load_trampoline, ARMREG_IP);
-#else
                load_trampoline = code;
                code += 4;
-#endif
        }
 
        ARM_MOV_REG_REG (code, ARMREG_LR, ARMREG_PC);
@@ -388,16 +321,10 @@ mono_arch_create_generic_trampoline (MonoTrampolineType tramp_type, MonoTrampInf
                code += 4;
                ARM_LDR_REG_REG (code, ARMREG_IP, ARMREG_PC, ARMREG_IP);
        } else {
-#ifdef USE_JUMP_TABLES
-               gpointer *jte = mono_jumptable_add_entry ();
-               code = mono_arm_load_jumptable_entry (code, jte, ARMREG_IP);
-               jte [0] = mono_interruption_checkpoint_from_trampoline;
-#else
                ARM_LDR_IMM (code, ARMREG_IP, ARMREG_PC, 0);
                ARM_B (code, 0);
                *(gpointer*)code = mono_interruption_checkpoint_from_trampoline;
                code += 4;
-#endif
        }
        ARM_MOV_REG_REG (code, ARMREG_LR, ARMREG_PC);
        code = emit_bx (code, ARMREG_IP);
@@ -442,10 +369,6 @@ mono_arch_create_generic_trampoline (MonoTrampolineType tramp_type, MonoTrampInf
        else
                code = emit_bx (code, ARMREG_IP);
 
-#ifdef USE_JUMP_TABLES
-       load_get_lmf_addr [0] = mono_get_lmf_addr;
-       load_trampoline [0] = (gpointer)mono_get_trampoline_func (tramp_type);
-#else
        constants = (gpointer*)code;
        constants [0] = mono_get_lmf_addr;
        constants [1] = (gpointer)mono_get_trampoline_func (tramp_type);
@@ -457,7 +380,6 @@ mono_arch_create_generic_trampoline (MonoTrampolineType tramp_type, MonoTrampInf
        }
 
        code += 8;
-#endif
 
        /* Flush instruction cache, since we've generated code */
        mono_arch_flush_icache (buf, code - buf);
@@ -481,47 +403,24 @@ mono_arch_create_specific_trampoline (gpointer arg1, MonoTrampolineType tramp_ty
 {
        guint8 *code, *buf, *tramp;
        gpointer *constants;
-#ifndef USE_JUMP_TABLES
        guint32 short_branch = FALSE;
-#endif
        guint32 size = SPEC_TRAMP_SIZE;
 
        tramp = mono_get_trampoline_code (tramp_type);
 
        if (domain) {
                mono_domain_lock (domain);
-#ifdef USE_JUMP_TABLES
-               code = buf = mono_domain_code_reserve_align (domain, size, 4);
-#else
                code = buf = mono_domain_code_reserve_align (domain, size, 4);
                if ((short_branch = branch_for_target_reachable (code + 4, tramp))) {
                        size = 12;
                        mono_domain_code_commit (domain, code, SPEC_TRAMP_SIZE, size);
-       }
-#endif
+               }
                mono_domain_unlock (domain);
        } else {
                code = buf = mono_global_codeman_reserve (size);
                short_branch = FALSE;
        }
 
-#ifdef USE_JUMP_TABLES
-       /* For jumptables case we always generate the same code for trampolines,
-        * namely
-        *   push {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, lr}
-        *   movw lr, lo(jte)
-        *   movt lr, hi(jte)
-        *   ldr r1, [lr + 4]
-        *   bx r1
-        */
-       ARM_PUSH (code, 0x5fff);
-       constants = mono_jumptable_add_entries (2);
-       code = mono_arm_load_jumptable_entry_addr (code, constants, ARMREG_LR);
-       ARM_LDR_IMM (code, ARMREG_R1, ARMREG_LR, 4);
-       code = emit_bx (code, ARMREG_R1);
-       constants [0] = arg1;
-       constants [1] = tramp;
-#else
        /* we could reduce this to 12 bytes if tramp is within reach:
         * ARM_PUSH ()
         * ARM_BL ()
@@ -551,7 +450,6 @@ mono_arch_create_specific_trampoline (gpointer arg1, MonoTrampolineType tramp_ty
                constants [1] = tramp;
                code += 8;
        }
-#endif
 
        /* Flush instruction cache, since we've generated code */
        mono_arch_flush_icache (buf, code - buf);
@@ -580,30 +478,17 @@ mono_arch_get_unbox_trampoline (MonoMethod *m, gpointer addr)
        guint8 *code, *start;
        MonoDomain *domain = mono_domain_get ();
        GSList *unwind_ops;
-#ifdef USE_JUMP_TABLES
-       gpointer *jte;
-       guint32 size = 20;
-#else
-        guint32 size = 16;
-#endif
+       guint32 size = 16;
 
        start = code = mono_domain_code_reserve (domain, size);
 
        unwind_ops = mono_arch_get_cie_program ();
 
-#ifdef USE_JUMP_TABLES
-       jte = mono_jumptable_add_entry ();
-       code = mono_arm_load_jumptable_entry (code, jte, ARMREG_IP);
-       ARM_ADD_REG_IMM8 (code, ARMREG_R0, ARMREG_R0, sizeof (MonoObject));
-       code = emit_bx (code, ARMREG_IP);
-       jte [0] = addr;
-#else
        ARM_LDR_IMM (code, ARMREG_IP, ARMREG_PC, 4);
        ARM_ADD_REG_IMM8 (code, ARMREG_R0, ARMREG_R0, sizeof (MonoObject));
        code = emit_bx (code, ARMREG_IP);
        *(guint32*)code = (guint32)addr;
        code += 4;
-#endif
        mono_arch_flush_icache (start, code - start);
        mono_profiler_code_buffer_new (start, code - start, MONO_PROFILER_CODE_BUFFER_UNBOX_TRAMPOLINE, m);
        g_assert ((code - start) <= size);
@@ -620,34 +505,19 @@ mono_arch_get_static_rgctx_trampoline (MonoMethod *m, MonoMethodRuntimeGenericCo
 {
        guint8 *code, *start;
        GSList *unwind_ops;
-#ifdef USE_JUMP_TABLES
-       int buf_len = 20;
-       gpointer *jte;
-#else
        int buf_len = 16;
-#endif
        MonoDomain *domain = mono_domain_get ();
 
        start = code = mono_domain_code_reserve (domain, buf_len);
 
        unwind_ops = mono_arch_get_cie_program ();
 
-#ifdef USE_JUMP_TABLES
-       jte = mono_jumptable_add_entries (2);
-       code = mono_arm_load_jumptable_entry_addr (code, jte, ARMREG_IP);
-       ARM_LDR_IMM (code, MONO_ARCH_RGCTX_REG, ARMREG_IP, 0);
-       ARM_LDR_IMM (code, ARMREG_IP, ARMREG_IP, 4);
-       ARM_BX (code, ARMREG_IP);
-       jte [0] = mrgctx;
-       jte [1] = addr;
-#else
        ARM_LDR_IMM (code, MONO_ARCH_RGCTX_REG, ARMREG_PC, 0);
        ARM_LDR_IMM (code, ARMREG_PC, ARMREG_PC, 0);
        *(guint32*)code = (guint32)mrgctx;
        code += 4;
        *(guint32*)code = (guint32)addr;
        code += 4;
-#endif
 
        g_assert ((code - start) <= buf_len);
 
@@ -672,9 +542,6 @@ mono_arch_create_rgctx_lazy_fetch_trampoline (guint32 slot, MonoTrampInfo **info
        gboolean mrgctx;
        MonoJumpInfo *ji = NULL;
        GSList *unwind_ops = NULL;
-#ifdef USE_JUMP_TABLES
-       gpointer *jte;
-#endif
 
        mrgctx = MONO_RGCTX_SLOT_IS_MRGCTX (slot);
        index = MONO_RGCTX_SLOT_INDEX (slot);
@@ -762,17 +629,10 @@ mono_arch_create_rgctx_lazy_fetch_trampoline (guint32 slot, MonoTrampInfo **info
                tramp = mono_arch_create_specific_trampoline (GUINT_TO_POINTER (slot), MONO_TRAMPOLINE_RGCTX_LAZY_FETCH, mono_get_root_domain (), &code_len);
 
                /* Jump to the actual trampoline */
-#ifdef USE_JUMP_TABLES
-               jte = mono_jumptable_add_entry ();
-               jte [0] = tramp;
-               code = mono_arm_load_jumptable_entry (code, jte, ARMREG_R1);
-               code = emit_bx (code, ARMREG_R1);
-#else
                ARM_LDR_IMM (code, ARMREG_R1, ARMREG_PC, 0); /* temp reg */
                code = emit_bx (code, ARMREG_R1);
                *(gpointer*)code = tramp;
                code += 4;
-#endif
        }
 
        mono_arch_flush_icache (buf, code - buf);
@@ -919,13 +779,6 @@ mono_arch_create_sdb_trampoline (gboolean single_step, MonoTrampInfo **info, gbo
 
        /* call */
        // FIXME: AOT
-#ifdef USE_JUMP_TABLES
-       {
-               gpointer *jte = mono_jumptable_add_entry ();
-               code = mono_arm_load_jumptable_entry (code, jte, ARMREG_IP);
-               jte [0] = function;
-       }
-#else
        ARM_LDR_IMM (code, ARMREG_IP, ARMREG_PC, 0);
        ARM_B (code, 0);
        if (single_step)
@@ -933,7 +786,6 @@ mono_arch_create_sdb_trampoline (gboolean single_step, MonoTrampInfo **info, gbo
        else
                *(gpointer*)code = debugger_agent_breakpoint_from_context;
        code += 4;
-#endif
        ARM_BLX_REG (code, ARMREG_IP);
 
        /* we're back; save ctx.eip and ctx.esp into the corresponding regs slots. */