g_assert (o); // Caller checks and throws exception properly.
void* addr;
- MonoClassField* const field = (MonoClassField*)imethod->data_items[* (guint16 *)(ip + 1)];
+ MonoClassField* const field = (MonoClassField*)imethod->data_items[ip [1]];
#ifndef DISABLE_REMOTING
gpointer tmp;
g_assert (o); // Caller checks and throws exception properly.
void* addr;
- MonoClassField* const field = (MonoClassField*)imethod->data_items[* (guint16 *)(ip + 1)];
+ MonoClassField* const field = (MonoClassField*)imethod->data_items[ip [1]];
MonoClass* klass = mono_class_from_mono_type_internal (field->type);
int const i32 = mono_class_value_size (klass, NULL);
mono_interp_box_nullable (InterpFrame* frame, const guint16* ip, stackval* sp, MonoError* error)
{
InterpMethod* const imethod = frame->imethod;
- MonoClass* const c = (MonoClass*)imethod->data_items [*(const guint16*)(ip + 1)];
+ MonoClass* const c = (MonoClass*)imethod->data_items [ip [1]];
int const size = mono_class_value_size (c, NULL);
- guint16 offset = *(const guint16*)(ip + 2);
+ guint16 offset = ip [2];
gboolean const pop_vt_sp = !(offset & BOX_NOT_CLEAR_VT_SP);
offset &= ~BOX_NOT_CLEAR_VT_SP;
InterpMethod* const imethod = frame->imethod;
MonoObject* o; // See the comment about GC safety.
- MonoVTable * const vtable = (MonoVTable*)imethod->data_items [*(const guint16*)(ip + 1)];
+ MonoVTable * const vtable = (MonoVTable*)imethod->data_items [ip [1]];
MonoClass* const c = vtable->klass;
int const size = mono_class_value_size (c, NULL);
- guint16 offset = *(const guint16*)(ip + 2);
+ guint16 offset = ip [2];
gboolean const pop_vt_sp = !(offset & BOX_NOT_CLEAR_VT_SP);
offset &= ~BOX_NOT_CLEAR_VT_SP;
mono_interp_box (InterpFrame* frame, const guint16* ip, stackval* sp)
{
MonoObject* o; // See the comment about GC safety.
- MonoVTable * const vtable = (MonoVTable*)frame->imethod->data_items [*(const guint16*)(ip + 1)];
+ MonoVTable * const vtable = (MonoVTable*)frame->imethod->data_items [ip [1]];
frame_objref (frame) = mono_gc_alloc_obj (vtable, m_class_get_instance_size (vtable->klass));
- guint16 const offset = *(const guint16*)(ip + 2);
+ guint16 const offset = ip [2];
stackval_to_data (m_class_get_byval_arg (vtable->klass), &sp [-1 - offset], mono_object_get_data (frame_objref (frame)), FALSE);
MonoObject* const o = sp [-2].data.o;
- field = (MonoClassField*)imethod->data_items[* (guint16 *)(ip + 1)];
+ field = (MonoClassField*)imethod->data_items[ip [1]];
MonoClass *klass = mono_class_from_mono_type_internal (field->type);
int const i32 = mono_class_value_size (klass, NULL);
++sp;
MINT_IN_BREAK;
MINT_IN_CASE(MINT_VTRESULT) {
- int ret_size = * (guint16 *)(ip + 1);
+ int ret_size = ip [1];
unsigned char *ret_vt_sp = vt_sp;
vt_sp -= READ32(ip + 2);
if (ret_size > 0) {
LDC(8);
MINT_IN_BREAK;
MINT_IN_CASE(MINT_LDC_I4_S)
- sp->data.i = *(const short *)(ip + 1);
+ sp->data.i = (short)ip [1];
ip += 2;
++sp;
MINT_IN_BREAK;
++sp;
MINT_IN_BREAK;
MINT_IN_CASE(MINT_LDC_I8_S)
- sp->data.l = *(const short *)(ip + 1);
+ sp->data.l = (short)ip [1];
ip += 2;
++sp;
MINT_IN_BREAK;
MINT_IN_BREAK;
}
MINT_IN_CASE(MINT_POP) {
- guint16 u16 = (* (guint16 *)(ip + 1)) + 1;
+ guint16 u16 = (ip [1]) + 1;
if (u16 > 1)
memmove (sp - u16, sp - 1, (u16 - 1) * sizeof (stackval));
sp--;
MINT_IN_BREAK;
}
MINT_IN_CASE(MINT_JMP) {
- InterpMethod *new_method = (InterpMethod*)frame->imethod->data_items [* (guint16 *)(ip + 1)];
+ InterpMethod *new_method = (InterpMethod*)frame->imethod->data_items [ip [1]];
if (frame->imethod->prof_flags & MONO_PROFILER_CALL_INSTRUMENTATION_TAIL_CALL)
MONO_PROFILER_RAISE (method_tail_call, (frame->imethod->method, new_method->method));
frame->ip = ip;
- csignature = (MonoMethodSignature*)frame->imethod->data_items [* (guint16 *)(ip + 1)];
+ csignature = (MonoMethodSignature*)frame->imethod->data_items [ip [1]];
ip += 2;
--sp;
child_frame.imethod = (InterpMethod*)sp->data.p;
}
MINT_IN_CASE(MINT_CALLI_NAT_FAST) {
gpointer target_ip = sp [-1].data.p;
- MonoMethodSignature *csignature = (MonoMethodSignature*)frame->imethod->data_items [* (guint16 *)(ip + 1)];
- int opcode = *(guint16 *)(ip + 2);
- gboolean save_last_error = *(guint16 *)(ip + 3);
+ MonoMethodSignature *csignature = (MonoMethodSignature*)frame->imethod->data_items [ip [1]];
+ int opcode = ip [2];
+ gboolean save_last_error = ip [3];
sp--;
frame->ip = ip;
frame->ip = ip;
- MonoMethodSignature* csignature = (MonoMethodSignature*)frame->imethod->data_items [* (guint16 *)(ip + 1)];
+ MonoMethodSignature* csignature = (MonoMethodSignature*)frame->imethod->data_items [ip [1]];
ip += 3;
--sp;
if (frame->imethod->method->dynamic && csignature->pinvoke) {
mono_interp_calli_nat_dynamic_pinvoke (&child_frame, code, context, csignature, error);
} else {
- const gboolean save_last_error = *(guint16 *)(ip - 3 + 2);
+ const gboolean save_last_error = ip [-3 + 2];
ves_pinvoke_method (&child_frame, csignature, (MonoFuncV) code, context, save_last_error);
}
frame->ip = ip;
- target_imethod = (InterpMethod*)frame->imethod->data_items [* (guint16 *)(ip + 1)];
- slot = *(gint16*)(ip + 2);
+ target_imethod = (InterpMethod*)frame->imethod->data_items [ip [1]];
+ slot = (gint16)ip [2];
ip += 3;
sp->data.p = vt_sp;
child_frame.retval = sp;
frame->ip = ip;
- child_frame.imethod = (InterpMethod*)frame->imethod->data_items [* (guint16 *)(ip + 1)];
+ child_frame.imethod = (InterpMethod*)frame->imethod->data_items [ip [1]];
/* The real signature for vararg calls */
- csig = (MonoMethodSignature*) frame->imethod->data_items [* (guint16*) (ip + 2)];
+ csig = (MonoMethodSignature*) frame->imethod->data_items [ip [2]];
/* Push all vararg arguments from normal sp to vt_sp together with the signature */
num_varargs = csig->param_count - csig->sentinelpos;
vt_sp = copy_varargs_vtstack (csig, sp, vt_sp);
frame->ip = ip;
- child_frame.imethod = (InterpMethod*)frame->imethod->data_items [* (guint16 *)(ip + 1)];
+ child_frame.imethod = (InterpMethod*)frame->imethod->data_items [ip [1]];
ip += 2;
sp->data.p = vt_sp;
child_frame.retval = sp;
MINT_IN_BREAK;
}
MINT_IN_CASE(MINT_JIT_CALL) {
- InterpMethod *rmethod = (InterpMethod*)frame->imethod->data_items [* (guint16 *)(ip + 1)];
+ InterpMethod *rmethod = (InterpMethod*)frame->imethod->data_items [ip [1]];
MONO_API_ERROR_INIT (error);
frame->ip = ip;
sp = do_jit_call (sp, vt_sp, context, frame, rmethod, error);
MINT_IN_BREAK;
}
MINT_IN_CASE(MINT_CALLRUN) {
- MonoMethod *target_method = (MonoMethod*) frame->imethod->data_items [* (guint16 *)(ip + 1)];
- MonoMethodSignature *sig = (MonoMethodSignature*) frame->imethod->data_items [* (guint16 *)(ip + 2)];
+ MonoMethod *target_method = (MonoMethod*) frame->imethod->data_items [ip [1]];
+ MonoMethodSignature *sig = (MonoMethodSignature*) frame->imethod->data_items [ip [2]];
stackval *retval;
sp->data.p = vt_sp;
#define ZEROP_S(datamem, op) \
--sp; \
if (sp->data.datamem op 0) \
- ip += * (gint16 *)(ip + 1); \
+ ip += (gint16)ip [1]; \
else \
ip += 2;
#define CONDBR_S(cond) \
sp -= 2; \
if (cond) \
- ip += * (gint16 *)(ip + 1); \
+ ip += (gint16)ip [1]; \
else \
ip += 2;
#define BRELOP_S(datamem, op) \
#define BRELOP_S_CAST(datamem, op, type) \
sp -= 2; \
if ((type) sp[0].data.datamem op (type) sp[1].data.datamem) \
- ip += * (gint16 *)(ip + 1); \
+ ip += (gint16)ip [1]; \
else \
ip += 2;
sp[-1].data.l = *(gint64*)sp[-1].data.p;
MINT_IN_BREAK;
MINT_IN_CASE(MINT_LDIND_I) {
- guint16 offset = * (guint16 *)(ip + 1);
+ guint16 offset = ip [1];
sp[-1 - offset].data.p = *(gpointer*)sp[-1 - offset].data.p;
ip += 2;
MINT_IN_BREAK;
}
MINT_IN_CASE(MINT_LDIND_I8) {
- guint16 offset = * (guint16 *)(ip + 1);
+ guint16 offset = ip [1];
#ifdef NO_UNALIGNED_ACCESS
if ((gsize)sp [-1 - offset].data.p % SIZEOF_VOID_P)
memcpy (&sp [-1 - offset].data.l, sp [-1 - offset].data.p, sizeof (gint64));
++ip;
MINT_IN_BREAK;
MINT_IN_CASE(MINT_CPOBJ) {
- MonoClass* const c = (MonoClass*)frame->imethod->data_items[* (guint16 *)(ip + 1)];
+ MonoClass* const c = (MonoClass*)frame->imethod->data_items[ip [1]];
g_assert (m_class_is_valuetype (c));
/* if this assertion fails, we need to add a write barrier */
g_assert (!MONO_TYPE_IS_REFERENCE (m_class_get_byval_arg (c)));
MINT_IN_BREAK;
}
MINT_IN_CASE(MINT_CPOBJ_VT) {
- MonoClass* const c = (MonoClass*)frame->imethod->data_items[* (guint16 *)(ip + 1)];
+ MonoClass* const c = (MonoClass*)frame->imethod->data_items[ip [1]];
mono_value_copy_internal (sp [-2].data.vt, sp [-1].data.vt, c);
ip += 2;
sp -= 2;
MINT_IN_BREAK;
}
MINT_IN_CASE(MINT_LDSTR)
- sp->data.p = frame->imethod->data_items [* (guint16 *)(ip + 1)];
+ sp->data.p = frame->imethod->data_items [ip [1]];
++sp;
ip += 2;
MINT_IN_BREAK;
MINT_IN_CASE(MINT_LDSTR_TOKEN) {
MonoString *s = NULL;
- guint32 strtoken = (guint32)(gsize)frame->imethod->data_items [* (guint16 *)(ip + 1)];
+ guint32 strtoken = (guint32)(gsize)frame->imethod->data_items [ip [1]];
MonoMethod *method = frame->imethod->method;
if (method->wrapper_type == MONO_WRAPPER_DYNAMIC_METHOD) {
}
MINT_IN_CASE(MINT_NEWOBJ_ARRAY) {
MonoClass *newobj_class;
- guint32 token = * (guint16 *)(ip + 1);
- guint16 param_count = * (guint16 *)(ip + 2);
+ guint32 token = ip [1];
+ guint16 param_count = ip [2];
newobj_class = (MonoClass*) frame->imethod->data_items [token];
}
MINT_IN_CASE(MINT_NEWOBJ_FAST) {
- MonoVTable *vtable = (MonoVTable*) frame->imethod->data_items [*(guint16*)(ip + 3)];
+ MonoVTable *vtable = (MonoVTable*) frame->imethod->data_items [ip [3]];
INIT_VTABLE (vtable);
MonoObject* o = NULL; // See the comment about GC safety above.
guint16 param_count;
- guint16 imethod_index = *(guint16*) (ip + 1);
+ guint16 imethod_index = ip [1];
const gboolean is_inlined = imethod_index == 0xffff;
- param_count = *(guint16*)(ip + 2);
+ param_count = ip [2];
if (param_count) {
sp -= param_count;
// - keep exception handling and resume mostly in the main function
frame->ip = ip;
- child_frame.imethod = (InterpMethod*) frame->imethod->data_items [*(guint16*)(ip + 1)];
- guint16 const param_count = *(guint16*)(ip + 2);
+ child_frame.imethod = (InterpMethod*) frame->imethod->data_items [ip [1]];
+ guint16 const param_count = ip [2];
if (param_count) {
sp -= param_count;
child_frame.stack_args = sp;
gboolean const vtst = *ip == MINT_NEWOBJ_VTST_FAST;
if (vtst) {
- memset (vt_sp, 0, *(guint16*)(ip + 3));
+ memset (vt_sp, 0, ip [3]);
sp->data.p = vt_sp;
ip += 4;
frame->ip = ip;
- guint32 const token = * (guint16 *)(ip + 1);
+ guint32 const token = ip [1];
ip += 2; // FIXME: Do this after throw?
child_frame.ip = NULL;
guint32 token;
frame->ip = ip;
- token = * (guint16 *)(ip + 1);
+ token = ip [1];
ip += 2;
InterpMethod *cmethod = (InterpMethod*)frame->imethod->data_items [token];
MINT_IN_CASE(MINT_ISINST_INTERFACE) {
MonoObject* const o = sp [-1].data.o; // See the comment about GC safety above.
if (o) {
- MonoClass* const c = (MonoClass*)frame->imethod->data_items [*(guint16 *)(ip + 1)];
+ MonoClass* const c = (MonoClass*)frame->imethod->data_items [ip [1]];
gboolean isinst;
if (MONO_VTABLE_IMPLEMENTS_INTERFACE (o->vtable, m_class_get_interface_id (c))) {
isinst = TRUE;
MINT_IN_CASE(MINT_ISINST_COMMON) {
MonoObject* const o = sp [-1].data.o; // See the comment about GC safety above
if (o) {
- MonoClass* const c = (MonoClass*)frame->imethod->data_items [*(guint16 *)(ip + 1)];
+ MonoClass* const c = (MonoClass*)frame->imethod->data_items [ip [1]];
gboolean isinst = mono_class_has_parent_fast (o->vtable->klass, c);
if (!isinst) {
MINT_IN_CASE(MINT_ISINST) {
MonoObject* const o = sp [-1].data.o; // See the comment about GC safety above
if (o) {
- MonoClass* const c = (MonoClass*)frame->imethod->data_items [*(guint16 *)(ip + 1)];
+ MonoClass* const c = (MonoClass*)frame->imethod->data_items [ip [1]];
if (!mono_interp_isinst (o, c)) { // FIXME: do not swallow the error
gboolean const isinst_instr = *ip == MINT_ISINST;
if (isinst_instr)
MINT_IN_CASE(MINT_UNBOX) {
MonoObject* const o = sp [-1].data.o; // See the comment about GC safety above
NULL_CHECK (o);
- MonoClass* const c = (MonoClass*)frame->imethod->data_items[*(guint16 *)(ip + 1)];
+ MonoClass* const c = (MonoClass*)frame->imethod->data_items[ip [1]];
if (!(m_class_get_rank (o->vtable->klass) == 0 && m_class_get_element_class (o->vtable->klass) == m_class_get_element_class (c)))
goto invalid_cast_label;
++ip;
MINT_IN_BREAK;
MINT_IN_CASE(MINT_LDFLDA_UNSAFE) {
- sp[-1].data.p = (char*)sp [-1].data.o + * (guint16 *)(ip + 1);
+ sp[-1].data.p = (char*)sp [-1].data.o + ip [1];
ip += 2;
MINT_IN_BREAK;
}
MINT_IN_CASE(MINT_LDFLDA) {
MonoObject* const o = sp [-1].data.o; // See the comment about GC safety above.
NULL_CHECK (o);
- sp[-1].data.p = (char *)o + * (guint16 *)(ip + 1);
+ sp[-1].data.p = (char *)o + ip [1];
ip += 2;
MINT_IN_BREAK;
}
MINT_IN_CASE(MINT_CKNULL_N) {
/* Same as CKNULL, but further down the stack */
- int const n = *(guint16*)(ip + 1);
+ int const n = ip [1];
MonoObject* const o = sp [-n].data.o; // See the comment about GC safety above.
NULL_CHECK (o);
ip += 2;
MonoObject* const o = sp [-1].data.o; \
NULL_CHECK (o); \
if (unaligned) \
- memcpy (&sp[-1].data.datamem, (char *)o + * (guint16 *)(ip + 1), sizeof (fieldtype)); \
+ memcpy (&sp[-1].data.datamem, (char *)o + ip [1], sizeof (fieldtype)); \
else \
- sp[-1].data.datamem = * (fieldtype *)((char *)o + * (guint16 *)(ip + 1)) ; \
+ sp[-1].data.datamem = * (fieldtype *)((char *)o + ip [1]) ; \
ip += 2; \
} while (0)
int size = READ32(ip + 2);
sp [-1].data.p = vt_sp;
- memcpy (sp [-1].data.p, (char *)o + * (guint16 *)(ip + 1), size);
+ memcpy (sp [-1].data.p, (char *)o + ip [1], size);
vt_sp += ALIGN_TO (size, MINT_VT_ALIGNMENT);
ip += 4;
MINT_IN_BREAK;
NULL_CHECK (o); \
sp -= 2; \
if (unaligned) \
- memcpy ((char *)o + * (guint16 *)(ip + 1), &sp[1].data.datamem, sizeof (fieldtype)); \
+ memcpy ((char *)o + ip [1], &sp[1].data.datamem, sizeof (fieldtype)); \
else \
- * (fieldtype *)((char *)o + * (guint16 *)(ip + 1)) = sp[1].data.datamem; \
+ * (fieldtype *)((char *)o + ip [1]) = sp[1].data.datamem; \
ip += 2; \
} while (0)
MonoObject* const o = sp [-2].data.o; // See the comment about GC safety above.
NULL_CHECK (o);
sp -= 2;
- mono_gc_wbarrier_set_field_internal (o, (char *) o + * (guint16 *)(ip + 1), sp [1].data.o);
+ mono_gc_wbarrier_set_field_internal (o, (char *) o + ip [1], sp [1].data.o);
ip += 2;
MINT_IN_BREAK;
}
NULL_CHECK (o);
sp -= 2;
- MonoClass *klass = (MonoClass*)frame->imethod->data_items[* (guint16 *)(ip + 2)];
+ MonoClass *klass = (MonoClass*)frame->imethod->data_items[ip [2]];
int const i32 = mono_class_value_size (klass, NULL);
- guint16 offset = * (guint16 *)(ip + 1);
+ guint16 offset = ip [1];
mono_value_copy_internal ((char *) o + offset, sp [1].data.p, klass);
vt_sp -= ALIGN_TO (i32, MINT_VT_ALIGNMENT);
MonoObject* const o = sp [-2].data.o; // See the comment about GC safety above.
NULL_CHECK (o);
- field = (MonoClassField*)frame->imethod->data_items[* (guint16 *)(ip + 1)];
+ field = (MonoClassField*)frame->imethod->data_items[ip [1]];
ip += 2;
#ifndef DISABLE_REMOTING
MINT_IN_BREAK;
MINT_IN_CASE(MINT_LDSFLDA) {
- MonoVTable *vtable = (MonoVTable*) frame->imethod->data_items [*(guint16*)(ip + 1)];
+ MonoVTable *vtable = (MonoVTable*) frame->imethod->data_items [ip [1]];
INIT_VTABLE (vtable);
- sp->data.p = frame->imethod->data_items [*(guint16*)(ip + 2)];
+ sp->data.p = frame->imethod->data_items [ip [2]];
ip += 3;
++sp;
MINT_IN_BREAK;
/* We init class here to preserve cctor order */
#define LDSFLD(datamem, fieldtype) { \
- MonoVTable *vtable = (MonoVTable*) frame->imethod->data_items [*(guint16*)(ip + 1)]; \
+ MonoVTable *vtable = (MonoVTable*) frame->imethod->data_items [ip [1]]; \
INIT_VTABLE (vtable); \
- sp[0].data.datamem = * (fieldtype *)(frame->imethod->data_items [* (guint16 *)(ip + 2)]) ; \
+ sp[0].data.datamem = * (fieldtype *)(frame->imethod->data_items [ip [2]]) ; \
ip += 3; \
sp++; \
}
MINT_IN_CASE(MINT_LDSFLD_P) LDSFLD(p, gpointer); MINT_IN_BREAK;
MINT_IN_CASE(MINT_LDSFLD_VT) {
- MonoVTable *vtable = (MonoVTable*) frame->imethod->data_items [*(guint16*)(ip + 1)];
+ MonoVTable *vtable = (MonoVTable*) frame->imethod->data_items [ip [1]];
INIT_VTABLE (vtable);
sp->data.p = vt_sp;
- gpointer addr = frame->imethod->data_items [*(guint16*)(ip + 2)];
+ gpointer addr = frame->imethod->data_items [ip [2]];
int const i32 = READ32 (ip + 3);
memcpy (vt_sp, addr, i32);
vt_sp += ALIGN_TO (i32, MINT_VT_ALIGNMENT);
MINT_IN_CASE(MINT_LDSSFLD) {
guint32 offset = READ32(ip + 2);
gpointer addr = mono_get_special_static_data (offset);
- MonoClassField *field = (MonoClassField*)frame->imethod->data_items [* (guint16 *)(ip + 1)];
+ MonoClassField *field = (MonoClassField*)frame->imethod->data_items [ip [1]];
stackval_from_data (field->type, sp, addr, FALSE);
ip += 4;
++sp;
MINT_IN_BREAK;
}
#define STSFLD(datamem, fieldtype) { \
- MonoVTable *vtable = (MonoVTable*) frame->imethod->data_items [*(guint16*)(ip + 1)]; \
+ MonoVTable *vtable = (MonoVTable*) frame->imethod->data_items [ip [1]]; \
INIT_VTABLE (vtable); \
sp --; \
- * (fieldtype *)(frame->imethod->data_items [* (guint16 *)(ip + 2)]) = sp[0].data.datamem; \
+ * (fieldtype *)(frame->imethod->data_items [ip [2]]) = sp[0].data.datamem; \
ip += 3; \
}
MINT_IN_CASE(MINT_STSFLD_O) STSFLD(p, gpointer); MINT_IN_BREAK;
MINT_IN_CASE(MINT_STSFLD_VT) {
- MonoVTable *vtable = (MonoVTable*) frame->imethod->data_items [*(guint16*)(ip + 1)];
+ MonoVTable *vtable = (MonoVTable*) frame->imethod->data_items [ip [1]];
INIT_VTABLE (vtable);
int const i32 = READ32 (ip + 3);
- gpointer addr = frame->imethod->data_items [*(guint16*)(ip + 2)];
+ gpointer addr = frame->imethod->data_items [ip [2]];
memcpy (addr, sp [-1].data.vt, i32);
vt_sp -= ALIGN_TO (i32, MINT_VT_ALIGNMENT);
MINT_IN_CASE(MINT_STSSFLD) {
guint32 offset = READ32(ip + 2);
gpointer addr = mono_get_special_static_data (offset);
- MonoClassField *field = (MonoClassField*)frame->imethod->data_items [* (guint16 *)(ip + 1)];
+ MonoClassField *field = (MonoClassField*)frame->imethod->data_items [ip [1]];
--sp;
stackval_to_data (field->type, sp, addr, FALSE);
ip += 4;
MINT_IN_CASE(MINT_STOBJ_VT) {
int size;
- MonoClass* const c = (MonoClass*)frame->imethod->data_items[* (guint16 *)(ip + 1)];
+ MonoClass* const c = (MonoClass*)frame->imethod->data_items[ip [1]];
ip += 2;
size = mono_class_value_size (c, NULL);
mono_value_copy_internal (sp [-2].data.p, sp [-1].data.p, c);
MINT_IN_BREAK;
}
MINT_IN_CASE(MINT_NEWARR) {
- MonoVTable *vtable = (MonoVTable*)frame->imethod->data_items[*(guint16 *)(ip + 1)];
+ MonoVTable *vtable = (MonoVTable*)frame->imethod->data_items[ip [1]];
sp [-1].data.o = (MonoObject*) mono_array_new_specific_checked (vtable, sp [-1].data.i, error);
if (!is_ok (error)) {
goto throw_error_label;
MINT_IN_CASE(MINT_LDLEN_SPAN) {
MonoObject* const o = sp [-1].data.o; // See the comment about GC safety above.
NULL_CHECK (o);
- gsize offset_length = (gsize) *(gint16 *) (ip + 1);
+ gsize offset_length = (gsize)(gint16)ip [1];
sp [-1].data.nati = *(gint32 *) ((guint8 *) o + offset_length);
ip += 2;
MINT_IN_BREAK;
NULL_CHECK (span);
- const gsize offset_length = (gsize) *(gint16 *) (ip + 2);
+ const gsize offset_length = (gsize)(gint16)ip [2];
const gint32 length = *(gint32 *) (span + offset_length);
if (index < 0 || index >= length)
THROW_EX (mono_get_exception_index_out_of_range (), ip);
- const gsize element_size = (gsize) *(gint16 *) (ip + 1);
- const gsize offset_pointer = (gsize) *(gint16 *) (ip + 3);
+ const gsize element_size = (gsize)(gint16)ip [1];
+ const gsize offset_pointer = (gsize)(gint16)ip [3];
const gpointer pointer = *(gpointer *)(span + offset_pointer);
sp [-1].data.p = (guint8 *) pointer + index * element_size;
MINT_IN_CASE(MINT_LDELEMA)
MINT_IN_CASE(MINT_LDELEMA_TC) {
- guint16 numargs = *(guint16 *) (ip + 2);
+ guint16 numargs = ip [2];
ip += 3;
sp -= numargs;
MonoObject* const o = sp [0].data.o; // See the comment about GC safety above.
NULL_CHECK (o);
- MonoClass *klass = (MonoClass*)frame->imethod->data_items [*(guint16 *) (ip - 3 + 1)];
+ MonoClass *klass = (MonoClass*)frame->imethod->data_items [ip [-3 + 1]];
const gboolean needs_typecheck = ip [-3] == MINT_LDELEMA_TC;
MonoException *ex = ves_array_element_address (frame, klass, (MonoArray *) o, &sp [1], needs_typecheck);
if (ex)
break;
}
case MINT_STELEM_VT: {
- MonoClass *klass_vt = (MonoClass*)frame->imethod->data_items [*(guint16 *) (ip + 1)];
+ MonoClass *klass_vt = (MonoClass*)frame->imethod->data_items [ip [1]];
int const i32 = READ32 (ip + 2);
char *dst_addr = mono_array_addr_with_size_fast ((MonoArray *) o, i32, aindex);
++ip;
MINT_IN_BREAK;
MINT_IN_CASE(MINT_MKREFANY) {
- MonoClass* const c = (MonoClass*)frame->imethod->data_items [*(guint16 *)(ip + 1)];
+ MonoClass* const c = (MonoClass*)frame->imethod->data_items [ip [1]];
/* The value address is on the stack */
gpointer addr = sp [-1].data.p;
MonoTypedRef *tref = (MonoTypedRef*)sp [-1].data.p;
gpointer addr = tref->value;
- MonoClass* const c = (MonoClass*)frame->imethod->data_items [*(guint16 *)(ip + 1)];
+ MonoClass* const c = (MonoClass*)frame->imethod->data_items [ip [1]];
if (c != tref->klass)
goto invalid_cast_label;
MINT_IN_CASE(MINT_LDTOKEN)
sp->data.p = vt_sp;
vt_sp += 8;
- * (gpointer *)sp->data.p = frame->imethod->data_items[*(guint16 *)(ip + 1)];
+ * (gpointer *)sp->data.p = frame->imethod->data_items[ip [1]];
ip += 2;
++sp;
MINT_IN_BREAK;
MINT_IN_CASE(MINT_ICALL_PPPPPP_V)
MINT_IN_CASE(MINT_ICALL_PPPPPP_P)
frame->ip = ip;
- sp = do_icall_wrapper (frame, NULL, *ip, sp, frame->imethod->data_items [*(guint16 *)(ip + 1)], FALSE);
+ sp = do_icall_wrapper (frame, NULL, *ip, sp, frame->imethod->data_items [ip [1]], FALSE);
EXCEPTION_CHECKPOINT;
CHECK_RESUME_STATE (context);
ip += 2;
MINT_IN_BREAK;
MINT_IN_CASE(MINT_MONO_LDPTR)
- sp->data.p = frame->imethod->data_items [*(guint16 *)(ip + 1)];
+ sp->data.p = frame->imethod->data_items [ip [1]];
ip += 2;
++sp;
MINT_IN_BREAK;
MINT_IN_CASE(MINT_MONO_NEWOBJ)
- sp->data.o = mono_interp_new (frame->imethod->domain, (MonoClass*)frame->imethod->data_items [*(guint16 *)(ip + 1)]); // FIXME: do not swallow the error
+ sp->data.o = mono_interp_new (frame->imethod->domain, (MonoClass*)frame->imethod->data_items [ip [1]]); // FIXME: do not swallow the error
ip += 2;
sp++;
MINT_IN_BREAK;
#undef RELOP_CAST
MINT_IN_CASE(MINT_LDFTN) {
- sp->data.p = frame->imethod->data_items [* (guint16 *)(ip + 1)];
+ sp->data.p = frame->imethod->data_items [ip [1]];
++sp;
ip += 2;
MINT_IN_BREAK;
}
MINT_IN_CASE(MINT_LDVIRTFTN) {
- InterpMethod *m = (InterpMethod*)frame->imethod->data_items [* (guint16 *)(ip + 1)];
+ InterpMethod *m = (InterpMethod*)frame->imethod->data_items [ip [1]];
--sp;
NULL_CHECK (sp->data.p);
}
#define LDARG(datamem, argtype) \
- sp->data.datamem = (argtype) frame->stack_args [*(guint16 *)(ip + 1)].data.datamem; \
+ sp->data.datamem = (argtype) frame->stack_args [ip [1]].data.datamem; \
ip += 2; \
++sp;
MINT_IN_CASE(MINT_LDARG_VT) {
sp->data.p = vt_sp;
int const i32 = READ32 (ip + 2);
- memcpy(sp->data.p, frame->stack_args [* (guint16 *)(ip + 1)].data.p, i32);
+ memcpy(sp->data.p, frame->stack_args [ip [1]].data.p, i32);
vt_sp += ALIGN_TO (i32, MINT_VT_ALIGNMENT);
ip += 4;
++sp;
#define STARG(datamem, argtype) \
--sp; \
- frame->stack_args [*(guint16 *)(ip + 1)].data.datamem = (argtype) sp->data.datamem; \
+ frame->stack_args [ip [1]].data.datamem = (argtype) sp->data.datamem; \
ip += 2; \
MINT_IN_CASE(MINT_STARG_I1) STARG(i, gint8); MINT_IN_BREAK;
MINT_IN_CASE(MINT_STARG_VT) {
int const i32 = READ32 (ip + 2);
--sp;
- memcpy(frame->stack_args [* (guint16 *)(ip + 1)].data.p, sp->data.p, i32);
+ memcpy(frame->stack_args [ip [1]].data.p, sp->data.p, i32);
vt_sp -= ALIGN_TO (i32, MINT_VT_ALIGNMENT);
ip += 4;
MINT_IN_BREAK;
}
MINT_IN_CASE(MINT_LDARGA)
- sp->data.p = &frame->stack_args [* (guint16 *)(ip + 1)];
+ sp->data.p = &frame->stack_args [ip [1]];
ip += 2;
++sp;
MINT_IN_BREAK;
MINT_IN_CASE(MINT_LDARGA_VT)
- sp->data.p = frame->stack_args [* (guint16 *)(ip + 1)].data.p;
+ sp->data.p = frame->stack_args [ip [1]].data.p;
ip += 2;
++sp;
MINT_IN_BREAK;
#define LDLOC(datamem, argtype) \
- sp->data.datamem = * (argtype *)(locals + * (guint16 *)(ip + 1)); \
+ sp->data.datamem = * (argtype *)(locals + ip [1]); \
ip += 2; \
++sp;
MINT_IN_CASE(MINT_LDLOC_VT) {
sp->data.p = vt_sp;
int const i32 = READ32 (ip + 2);
- memcpy(sp->data.p, locals + * (guint16 *)(ip + 1), i32);
+ memcpy(sp->data.p, locals + ip [1], i32);
vt_sp += ALIGN_TO (i32, MINT_VT_ALIGNMENT);
ip += 4;
++sp;
MINT_IN_BREAK;
}
MINT_IN_CASE(MINT_LDLOCA_S)
- sp->data.p = locals + * (guint16 *)(ip + 1);
+ sp->data.p = locals + ip [1];
ip += 2;
++sp;
MINT_IN_BREAK;
#define STLOC(datamem, argtype) \
--sp; \
- * (argtype *)(locals + * (guint16 *)(ip + 1)) = sp->data.datamem; \
+ * (argtype *)(locals + ip [1]) = sp->data.datamem; \
ip += 2;
MINT_IN_CASE(MINT_STLOC_I1) STLOC(i, gint8); MINT_IN_BREAK;
MINT_IN_CASE(MINT_STLOC_P) STLOC(p, gpointer); MINT_IN_BREAK;
#define STLOC_NP(datamem, argtype) \
- * (argtype *)(locals + * (guint16 *)(ip + 1)) = sp [-1].data.datamem; \
+ * (argtype *)(locals + ip [1]) = sp [-1].data.datamem; \
ip += 2;
MINT_IN_CASE(MINT_STLOC_NP_I4) STLOC_NP(i, gint32); MINT_IN_BREAK;
MINT_IN_CASE(MINT_STLOC_VT) {
int const i32 = READ32 (ip + 2);
--sp;
- memcpy(locals + * (guint16 *)(ip + 1), sp->data.p, i32);
+ memcpy(locals + ip [1], sp->data.p, i32);
vt_sp -= ALIGN_TO (i32, MINT_VT_ALIGNMENT);
ip += 4;
MINT_IN_BREAK;
}
#define MOVLOC(argtype) \
- * (argtype *)(locals + * (guint16 *)(ip + 2)) = * (argtype *)(locals + * (guint16 *)(ip + 1)); \
+ * (argtype *)(locals + ip [2]) = * (argtype *)(locals + ip [1]); \
ip += 3;
MINT_IN_CASE(MINT_MOVLOC_1) MOVLOC(guint8); MINT_IN_BREAK;
MINT_IN_CASE(MINT_MOVLOC_VT) {
int const i32 = READ32(ip + 3);
- memcpy (locals + * (guint16 *)(ip + 2), locals + * (guint16*)(ip + 1), i32);
+ memcpy (locals + ip [2], locals + ip [1], i32);
ip += 5;
MINT_IN_BREAK;
}
MINT_IN_BREAK;
#endif
MINT_IN_CASE(MINT_RETHROW) {
- int exvar_offset = *(guint16*)(ip + 1);
+ int exvar_offset = ip [1];
THROW_EX_GENERAL (*(MonoException**)(frame_locals (frame) + exvar_offset), ip, TRUE);
MINT_IN_BREAK;
}
}
MINT_IN_CASE(MINT_LD_DELEGATE_INVOKE_IMPL) {
MonoDelegate *del;
- int n = *(guint16*)(ip + 1);
+ int n = ip [1];
del = (MonoDelegate*)sp [-n].data.p;
if (!del->interp_invoke_impl) {
/*
MINT_IN_CASE(MINT_TANH) MATH_UNOP(tanh); MINT_IN_BREAK;
MINT_IN_CASE(MINT_INTRINS_ENUM_HASFLAG) {
- MonoClass *klass = (MonoClass*)frame->imethod->data_items[* (guint16 *)(ip + 1)];
+ MonoClass *klass = (MonoClass*)frame->imethod->data_items[ip [1]];
mono_interp_enum_hasflag (sp, klass);
sp--;
ip += 2;