offset += 8;
}
- amd64_shift_reg_imm (code, X86_SHR, sreg, 4);
+ amd64_shift_reg_imm (code, X86_SHR, sreg, 3);
if (sreg != AMD64_RCX)
amd64_mov_reg_reg (code, AMD64_RCX, sreg, 8);
amd64_alu_reg_reg (code, X86_XOR, AMD64_RAX, AMD64_RAX);
cpos += 6;
cov->data [bb->dfn].cil_code = bb->cil_code;
+ amd64_mov_reg_imm (code, AMD64_R11, (guint64)&cov->data [bb->dfn].count);
/* this is not thread save, but good enough */
- amd64_inc_mem (code, (guint64)&cov->data [bb->dfn].count);
+ amd64_inc_membase (code, AMD64_R11, 0);
}
offset = code - cfg->native_code;
+ mono_debug_open_block (cfg, bb, offset);
+
ins = bb->code;
while (ins) {
offset = code - cfg->native_code;
}
if (breg == AMD64_RAX) {
- amd64_mov_reg_reg (code, AMD64_R11, AMD64_RAX, size);
+ amd64_mov_reg_reg (code, AMD64_R11, AMD64_RAX, 8);
breg = AMD64_R11;
}
save_mode = SAVE_XMM;
break;
case MONO_TYPE_GENERICINST:
- if (mono_type_generic_inst_is_valuetype (mono_method_signature (method)->ret)) {
+ if (!mono_type_generic_inst_is_valuetype (mono_method_signature (method)->ret)) {
save_mode = SAVE_EAX;
break;
}
guint32 opcode;
if (fsig->params [0]->type == MONO_TYPE_I4)
- opcode = OP_ATOMIC_ADD_I4;
+ opcode = OP_ATOMIC_ADD_NEW_I4;
else if (fsig->params [0]->type == MONO_TYPE_I8)
- opcode = OP_ATOMIC_ADD_I8;
+ opcode = OP_ATOMIC_ADD_NEW_I8;
else
g_assert_not_reached ();