X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmini%2Fmini-arm.c;h=44626141830fe9f5ff2c42f28ae54de1c668f0ee;hb=HEAD;hp=e61e7b00c7123020d41e26f9b156f2e739882bf2;hpb=df7f4749377ca5d25567d2cf0c404615c2d0faba;p=mono.git diff --git a/mono/mini/mini-arm.c b/mono/mini/mini-arm.c index e61e7b00c71..44626141830 100644 --- a/mono/mini/mini-arm.c +++ b/mono/mini/mini-arm.c @@ -22,6 +22,7 @@ #include #include #include +#include #include "mini-arm.h" #include "cpu-arm.h" @@ -335,7 +336,7 @@ mono_arm_patchable_bl (guint8 *code, int cond) return code; } -#if defined(__ARM_EABI__) && defined(__linux__) && !defined(PLATFORM_ANDROID) && !defined(MONO_CROSS_COMPILE) +#if defined(__ARM_EABI__) && defined(__linux__) && !defined(HOST_ANDROID) && !defined(MONO_CROSS_COMPILE) #define HAVE_AEABI_READ_TP 1 #endif @@ -2752,16 +2753,20 @@ mono_arch_dyn_call_free (MonoDynCallInfo *info) g_free (ainfo); } +int +mono_arch_dyn_call_get_buf_size (MonoDynCallInfo *info) +{ + return sizeof (DynCallArgs); +} + void -mono_arch_start_dyn_call (MonoDynCallInfo *info, gpointer **args, guint8 *ret, guint8 *buf, int buf_len) +mono_arch_start_dyn_call (MonoDynCallInfo *info, gpointer **args, guint8 *ret, guint8 *buf) { ArchDynCallInfo *dinfo = (ArchDynCallInfo*)info; DynCallArgs *p = (DynCallArgs*)buf; int arg_index, greg, i, j, pindex; MonoMethodSignature *sig = dinfo->sig; - g_assert (buf_len >= sizeof (DynCallArgs)); - p->res = 0; p->ret = ret; p->has_fpregs = 0; @@ -5890,7 +5895,11 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb) arm_patch (buf [0], code); break; } - + case OP_FILL_PROF_CALL_CTX: + for (int i = 0; i < ARMREG_MAX; i++) + if ((MONO_ARCH_CALLEE_SAVED_REGS & (1 << i)) || i == ARMREG_SP || i == ARMREG_FP) + ARM_STR_IMM (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 (); @@ -6748,12 +6757,6 @@ mono_arch_emit_inst_for_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMetho return NULL; } -gboolean -mono_arch_print_tree (MonoInst *tree, int arity) -{ - return 0; -} - #ifndef DISABLE_JIT #endif @@ -7048,7 +7051,7 @@ mono_arch_build_imt_trampoline (MonoVTable *vtable, MonoDomain *domain, MonoIMTC mono_arch_flush_icache ((guint8*)start, size); MONO_PROFILER_RAISE (jit_code_buffer, (start, code - start, MONO_PROFILER_CODE_BUFFER_IMT_TRAMPOLINE, NULL)); - mono_stats.imt_trampolines_size += code - start; + UnlockedAdd (&mono_stats.imt_trampolines_size, code - start); g_assert (DISTANCE (start, code) <= size);