X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmini%2Fmini-arm64.c;h=9edb57aa9ef87da6594dea1b82e87867f7ee5dfe;hb=d295ab661864a5dee77a97d298bf2dde09c94de1;hp=3ad91e31cd0dda930ff1206ef5690d9c1971b896;hpb=3ab1a56f73cac926676e24b58d07bf0c4e75d3eb;p=mono.git diff --git a/mono/mini/mini-arm64.c b/mono/mini/mini-arm64.c index 3ad91e31cd0..9edb57aa9ef 100644 --- a/mono/mini/mini-arm64.c +++ b/mono/mini/mini-arm64.c @@ -1,5 +1,6 @@ -/* - * mini-arm64.c: ARM64 backend for the Mono code generator +/** + * \file + * ARM64 backend for the Mono code generator * * Copyright 2013 Xamarin, Inc (http://www.xamarin.com) * @@ -993,7 +994,7 @@ mono_arch_patch_code_new (MonoCompile *cfg, MonoDomain *domain, guint8 *code, Mo switch (ji->type) { case MONO_PATCH_INFO_METHOD_JUMP: /* ji->relocation is not set by the caller */ - arm_patch_rel (ip, (guint8*)target, MONO_R_ARM64_B); + arm_patch_full (cfg, domain, ip, (guint8*)target, MONO_R_ARM64_B); break; default: arm_patch_full (cfg, domain, ip, (guint8*)target, ji->relocation); @@ -1228,7 +1229,6 @@ add_param (CallInfo *cinfo, ArgInfo *ainfo, MonoType *t) case MONO_TYPE_I1: add_general (cinfo, ainfo, 1, TRUE); break; - case MONO_TYPE_BOOLEAN: case MONO_TYPE_U1: add_general (cinfo, ainfo, 1, FALSE); break; @@ -1236,7 +1236,6 @@ add_param (CallInfo *cinfo, ArgInfo *ainfo, MonoType *t) add_general (cinfo, ainfo, 2, TRUE); break; case MONO_TYPE_U2: - case MONO_TYPE_CHAR: add_general (cinfo, ainfo, 2, FALSE); break; case MONO_TYPE_I4: @@ -1249,11 +1248,7 @@ add_param (CallInfo *cinfo, ArgInfo *ainfo, MonoType *t) case MONO_TYPE_U: case MONO_TYPE_PTR: case MONO_TYPE_FNPTR: - case MONO_TYPE_CLASS: case MONO_TYPE_OBJECT: - case MONO_TYPE_SZARRAY: - case MONO_TYPE_ARRAY: - case MONO_TYPE_STRING: case MONO_TYPE_U8: case MONO_TYPE_I8: add_general (cinfo, ainfo, 8, FALSE); @@ -1348,6 +1343,7 @@ get_call_info (MonoMemPool *mp, MonoMethodSignature *sig) /* Pass the argument address in the next register */ if (cinfo->gr >= PARAM_REGS) { ainfo->storage = ArgVtypeByRefOnStack; + cinfo->stack_usage = ALIGN_TO (cinfo->stack_usage, 8); ainfo->offset = cinfo->stack_usage; cinfo->stack_usage += 8; } else { @@ -1543,7 +1539,6 @@ mono_arch_start_dyn_call (MonoDynCallInfo *info, gpointer **args, guint8 *ret, g /* Special case arguments smaller than 1 machine word */ switch (t->type) { - case MONO_TYPE_BOOLEAN: case MONO_TYPE_U1: *(guint8*)stack_arg = *(guint8*)arg; break; @@ -1551,7 +1546,6 @@ mono_arch_start_dyn_call (MonoDynCallInfo *info, gpointer **args, guint8 *ret, g *(gint8*)stack_arg = *(gint8*)arg; break; case MONO_TYPE_U2: - case MONO_TYPE_CHAR: *(guint16*)stack_arg = *(guint16*)arg; break; case MONO_TYPE_I2: @@ -1572,10 +1566,6 @@ mono_arch_start_dyn_call (MonoDynCallInfo *info, gpointer **args, guint8 *ret, g } switch (t->type) { - case MONO_TYPE_STRING: - case MONO_TYPE_CLASS: - case MONO_TYPE_ARRAY: - case MONO_TYPE_SZARRAY: case MONO_TYPE_OBJECT: case MONO_TYPE_PTR: case MONO_TYPE_I: @@ -1584,7 +1574,6 @@ mono_arch_start_dyn_call (MonoDynCallInfo *info, gpointer **args, guint8 *ret, g case MONO_TYPE_U8: p->regs [slot] = (mgreg_t)*arg; break; - case MONO_TYPE_BOOLEAN: case MONO_TYPE_U1: p->regs [slot] = *(guint8*)arg; break; @@ -1595,7 +1584,6 @@ mono_arch_start_dyn_call (MonoDynCallInfo *info, gpointer **args, guint8 *ret, g p->regs [slot] = *(gint16*)arg; break; case MONO_TYPE_U2: - case MONO_TYPE_CHAR: p->regs [slot] = *(guint16*)arg; break; case MONO_TYPE_I4: @@ -1689,10 +1677,6 @@ mono_arch_finish_dyn_call (MonoDynCallInfo *info, guint8 *buf) case MONO_TYPE_VOID: *(gpointer*)ret = NULL; break; - case MONO_TYPE_STRING: - case MONO_TYPE_CLASS: - case MONO_TYPE_ARRAY: - case MONO_TYPE_SZARRAY: case MONO_TYPE_OBJECT: case MONO_TYPE_I: case MONO_TYPE_U: @@ -1703,14 +1687,12 @@ mono_arch_finish_dyn_call (MonoDynCallInfo *info, guint8 *buf) *(gint8*)ret = res; break; case MONO_TYPE_U1: - case MONO_TYPE_BOOLEAN: *(guint8*)ret = res; break; case MONO_TYPE_I2: *(gint16*)ret = res; break; case MONO_TYPE_U2: - case MONO_TYPE_CHAR: *(guint16*)ret = res; break; case MONO_TYPE_I4: @@ -1902,9 +1884,6 @@ mono_arch_create_vars (MonoCompile *cfg) if (cfg->method->save_lmf) { cfg->create_lmf_var = TRUE; cfg->lmf_ir = TRUE; -#ifndef TARGET_MACH - cfg->lmf_ir_mono_lmf = TRUE; -#endif } } @@ -4158,6 +4137,7 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb) } else { mono_add_patch_info_rel (cfg, code - cfg->native_code, MONO_PATCH_INFO_METHOD_JUMP, call->method, MONO_R_ARM64_B); arm_b (code, code); + cfg->thunk_area += THUNK_SIZE; } ins->flags |= MONO_INST_GC_CALLSITE; ins->backend.pc_offset = code - cfg->native_code; @@ -4349,7 +4329,11 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb) #endif break; } - + case OP_FILL_PROF_CALL_CTX: + for (int i = 0; i < MONO_MAX_IREGS; i++) + if ((MONO_ARCH_CALLEE_SAVED_REGS & (1 << i)) || i == ARMREG_SP || i == ARMREG_FP) + arm_strx (code, i, ins->sreg1, MONO_STRUCT_OFFSET (MonoContext, regs) + i * sizeof (mgreg_t)); + break; default: g_warning ("unknown opcode %s in %s()\n", mono_inst_name (ins->opcode), __FUNCTION__); g_assert_not_reached (); @@ -4946,12 +4930,6 @@ mono_arch_emit_inst_for_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMetho return NULL; } -gboolean -mono_arch_print_tree (MonoInst *tree, int arity) -{ - return FALSE; -} - guint32 mono_arch_get_patch_offset (guint8 *code) { @@ -5260,22 +5238,3 @@ mono_arch_get_call_info (MonoMemPool *mp, MonoMethodSignature *sig) return get_call_info (mp, sig); } -gpointer -mono_arch_install_handler_block_guard (MonoJitInfo *ji, MonoJitExceptionInfo *clause, MonoContext *ctx, gpointer new_value) -{ - gpointer *lr_loc; - char *old_value; - char *bp; - - /*Load the spvar*/ - bp = MONO_CONTEXT_GET_BP (ctx); - lr_loc = (gpointer*)(bp + clause->exvar_offset); - - old_value = *lr_loc; - if ((char*)old_value < (char*)ji->code_start || (char*)old_value > ((char*)ji->code_start + ji->code_size)) - return old_value; - - *lr_loc = new_value; - - return old_value; -}