x86_push_reg (s->code, reg); \
x86_push_imm (s->code, reg); \
x86_push_imm (s->code, text " %d %p\n"); \
-x86_call_code (s->code, printf); \
+x86_mov_reg_imm (s->code, X86_EAX, printf); \
+x86_call_reg (s->code, X86_EAX); \
x86_alu_reg_imm (s->code, X86_ADD, X86_ESP, 3*4); \
x86_pop_reg (s->code, X86_ECX); \
x86_pop_reg (s->code, X86_EDX); \
x86_imm_emit32 ((inst), (disp)); \
} while (0)
+/* emit an exception if condition is fail */
+#define EMIT_COND_EXCEPTION(cond, exc) \
+ do { \
+ x86_branch8 (s->code, cond, 12, TRUE); \
+ x86_mov_reg_imm (s->code, X86_ECX, exc); \
+ x86_mov_reg_imm (s->code, X86_EAX, get_throw_exception ()); \
+ x86_call_reg (s->code, X86_EAX); \
+ } while (0);
+
%%
#
}
stmt: THROW (reg) {
+ tree->is_jump = TRUE;
+
if (tree->left->reg1 != X86_ECX)
x86_mov_reg_reg (s->code, X86_ECX, tree->left->reg1, 4);
stmt: RETHROW {
int offset = g_array_index (s->varinfo, MonoVarInfo, tree->data.i).offset;
+ tree->is_jump = TRUE;
+
x86_mov_reg_membase (s->code, X86_ECX, X86_EBP, offset, 4);
x86_call_code (s->code, get_throw_exception ());
stmt: HANDLER {
gint32 addr = tree->data.bb->addr - tree->addr - 5;
- tree->is_jump = 1;
+ tree->is_jump = TRUE;
x86_call_imm (s->code, addr);
}
reg: CONV_OVF_U4 (reg) {
x86_test_reg_imm (s->code, tree->left->reg1, 0x8000000);
- x86_branch8 (s->code, X86_CC_EQ, 10, TRUE);
- x86_mov_reg_imm (s->code, X86_ECX, get_exception_overflow ());
- x86_call_code (s->code, get_throw_exception ());
+ EMIT_COND_EXCEPTION (X86_CC_EQ, get_exception_overflow ());
if (tree->reg1 != tree->left->reg1)
x86_mov_reg_reg (s->code, tree->reg1, tree->left->reg1, 4);
}
reg: CONV_OVF_I1 (reg) {
/* probe value to be within -128 to 127 */
x86_alu_reg_imm (s->code, X86_CMP, tree->left->reg1, 127);
- x86_branch8 (s->code, X86_CC_LE, 10, TRUE);
- x86_mov_reg_imm (s->code, X86_ECX, get_exception_overflow ());
- x86_call_code (s->code, get_throw_exception ());
-
+ EMIT_COND_EXCEPTION (X86_CC_LE, get_exception_overflow ());
x86_alu_reg_imm (s->code, X86_CMP, tree->left->reg1, -128);
- x86_branch8 (s->code, X86_CC_LT, -17, TRUE);
+ // fixme: check that branch distance
+ g_assert_not_reached ();
+ x86_branch8 (s->code, X86_CC_LT, -19, TRUE);
if (tree->reg1 != tree->left->reg1)
x86_mov_reg_reg (s->code, tree->reg1, tree->left->reg1, 4);
}
reg: CONV_OVF_I1_UN (reg) {
/* probe values between 0 to 128 */
x86_test_reg_imm (s->code, tree->left->reg1, 0xffffff80);
- x86_branch8 (s->code, X86_CC_EQ, 10, TRUE);
- x86_mov_reg_imm (s->code, X86_ECX, get_exception_overflow ());
- x86_call_code (s->code, get_throw_exception ());
+ EMIT_COND_EXCEPTION (X86_CC_EQ, get_exception_overflow ());
if (tree->reg1 != tree->left->reg1)
x86_mov_reg_reg (s->code, tree->reg1, tree->left->reg1, 4);
}
reg: CONV_OVF_U1 (reg) {
/* probe value to be within 0 to 255 */
x86_test_reg_imm (s->code, tree->left->reg1, 0xffffff00);
- x86_branch8 (s->code, X86_CC_EQ, 10, TRUE);
- x86_mov_reg_imm (s->code, X86_ECX, get_exception_overflow ());
- x86_call_code (s->code, get_throw_exception ());
+ EMIT_COND_EXCEPTION (X86_CC_EQ, get_exception_overflow ());
if (tree->reg1 != tree->left->reg1)
x86_mov_reg_reg (s->code, tree->reg1, tree->left->reg1, 4);
}
reg: CONV_OVF_I2 (reg) {
/* Probe value to be within -32768 and 32767 */
-
x86_alu_reg_imm (s->code, X86_CMP, tree->left->reg1, 32767);
- x86_branch8 (s->code, X86_CC_LE, 10, TRUE);
- x86_mov_reg_imm (s->code, X86_ECX, get_exception_overflow ());
- x86_call_code (s->code, get_throw_exception ());
-
+ EMIT_COND_EXCEPTION (X86_CC_LE, get_exception_overflow ());
x86_alu_reg_imm (s->code, X86_CMP, tree->left->reg1, -32768);
+ // fixme: check branch
+ g_assert_not_reached ();
x86_branch8 (s->code, X86_CC_LT, -17, TRUE);
if (tree->reg1 != tree->left->reg1)
x86_mov_reg_reg (s->code, tree->reg1, tree->left->reg1, 4);
reg: CONV_OVF_U2 (reg) {
/* Probe value to be within 0 and 65535 */
x86_test_reg_imm (s->code, tree->left->reg1, 0xffff0000);
- x86_branch8 (s->code, X86_CC_EQ, 10, TRUE);
- x86_mov_reg_imm (s->code, X86_ECX, get_exception_overflow ());
- x86_call_code (s->code, get_throw_exception ());
+ EMIT_COND_EXCEPTION (X86_CC_EQ, get_exception_overflow ());
if (tree->reg1 != tree->left->reg1)
x86_mov_reg_reg (s->code, tree->reg1, tree->left->reg1, 4);
}
reg: CONV_OVF_I2_UN (reg) {
/* Convert uint value into short, value within 0 and 32767 */
x86_test_reg_imm (s->code, tree->left->reg1, 0xffff8000);
- x86_branch8 (s->code, X86_CC_EQ, 10, TRUE);
- x86_mov_reg_imm (s->code, X86_ECX, get_exception_overflow ());
- x86_call_code (s->code, get_throw_exception ());
+ EMIT_COND_EXCEPTION (X86_CC_EQ, get_exception_overflow ());
if (tree->reg1 != tree->left->reg1)
x86_mov_reg_reg (s->code, tree->reg1, tree->left->reg1, 4);
}
x86_push_reg (s->code, tree->left->reg1);
x86_push_imm (s->code, tree->data.p);
- x86_call_code (s->code, mono_array_new);
+ x86_mov_reg_imm (s->code, X86_EAX, mono_array_new);
+ x86_call_reg (s->code, X86_EAX);
x86_alu_reg_imm (s->code, X86_ADD, X86_ESP, sizeof (gpointer) + 4);
x86_pop_reg (s->code, X86_EDX);
x86_push_reg (s->code, X86_EDX);
x86_push_imm (s->code, tree->data.klass);
- x86_call_code (s->code, mono_object_new);
+ x86_mov_reg_imm (s->code, X86_EAX, mono_object_new);
+ x86_call_reg (s->code, X86_EAX);
x86_alu_reg_imm (s->code, X86_ADD, X86_ESP, sizeof (gpointer));
x86_pop_reg (s->code, X86_EDX);
}
reg: UNBOX (reg) {
- guint8 *start = s->code, *l1, *l2, *l3, *le;
- int i;
-
- tree->is_jump = TRUE;
- l1 = l2 = l3 = le = NULL;
-
- for (i = 0; i < 2; i++) {
- s->code = start;
-
- if (tree->reg1 != tree->left->reg1)
- x86_mov_reg_reg (s->code, tree->reg1, tree->left->reg1, 4);
+ if (tree->reg1 != tree->left->reg1)
+ x86_mov_reg_reg (s->code, tree->reg1, tree->left->reg1, 4);
- x86_alu_reg_imm (s->code, X86_CMP, tree->reg1, 0);
- x86_branch8 (s->code, X86_CC_NE, l2 - l1, FALSE);
- l1 = s->code;
- x86_mov_reg_imm (s->code, X86_ECX, get_exception_null_reference ());
- x86_call_code (s->code, get_throw_exception ());
- l2 = s->code;
- x86_alu_membase_imm (s->code, X86_CMP, tree->reg1, 0, ((int)(tree->data.klass)));
- x86_branch8 (s->code, X86_CC_EQ, le - l3, FALSE);
- l3 = s->code;
- x86_mov_reg_imm (s->code, X86_ECX, get_exception_invalid_cast ());
- x86_call_code (s->code, get_throw_exception ());
- le = s->code;
- x86_alu_reg_imm (s->code, X86_ADD, tree->reg1, sizeof (MonoObject));
- }
+ x86_alu_reg_imm (s->code, X86_CMP, tree->reg1, 0);
+ EMIT_COND_EXCEPTION (X86_CC_NE, get_exception_null_reference ());
+ x86_alu_membase_imm (s->code, X86_CMP, tree->reg1, 0, ((int)(tree->data.klass)));
+ EMIT_COND_EXCEPTION (X86_CC_EQ, get_exception_invalid_cast ());
+ x86_alu_reg_imm (s->code, X86_ADD, tree->reg1, sizeof (MonoObject));
}
reg: CASTCLASS (reg) {
- guint8 *start = s->code, *l1, *l2, *l3, *l4, *le;
+ guint8 *start = s->code, *l1, *l2, *le;
int i;
tree->is_jump = TRUE;
- l1 = l2 = l3 = l4 = le = NULL;
+ l1 = l2 = le = NULL;
for (i = 0; i < 2; i++) {
s->code = start;
x86_push_imm (s->code, tree->data.klass);
x86_push_reg (s->code, tree->left->reg1);
- x86_call_code (s->code, mono_object_isinst);
+ x86_mov_reg_imm (s->code, X86_EAX, mono_object_isinst);
+ x86_call_reg (s->code, X86_EAX);
x86_alu_reg_imm (s->code, X86_ADD, X86_ESP, 8);
x86_pop_reg (s->code, X86_EDX);
x86_pop_reg (s->code, X86_ECX);
x86_alu_reg_imm (s->code, X86_CMP, X86_EAX, 0);
- x86_branch8 (s->code, X86_CC_NE, le - l3, FALSE);
- l3 = s->code;
-
- x86_mov_reg_imm (s->code, X86_ECX, get_exception_invalid_cast ());
- x86_call_code (s->code, get_throw_exception ());
-
+ EMIT_COND_EXCEPTION (X86_CC_NE, get_exception_invalid_cast ());
le = s->code;
}
x86_push_imm (s->code, tree->data.klass);
x86_push_reg (s->code, tree->left->reg1);
- x86_call_code (s->code, mono_object_isinst);
+ x86_mov_reg_imm (s->code, X86_EAX, mono_object_isinst);
+ x86_call_reg (s->code, X86_EAX);
x86_alu_reg_imm (s->code, X86_ADD, X86_ESP, 8);
x86_pop_reg (s->code, X86_EDX);
stmt: BR {
gint32 addr = tree->data.bb->addr - tree->addr - 5;
- tree->is_jump = 1;
+ tree->is_jump = TRUE;
x86_jump32 (s->code, addr);
}
stmt: BLT (reg, reg) 1 {
gint32 offset;
- tree->is_jump = 1;
+ tree->is_jump = TRUE;
x86_alu_reg_reg (s->code, X86_CMP, tree->left->reg1, tree->right->reg1);
offset = 6 + s->code - s->start;
x86_branch32 (s->code, X86_CC_LT, tree->data.bb->addr - offset, TRUE);
stmt: BLT (reg, CONST_I4) "MB_USE_OPT1(0)" {
gint32 offset;
- tree->is_jump = 1;
+ tree->is_jump = TRUE;
x86_alu_reg_imm (s->code, X86_CMP, tree->left->reg1, tree->right->data.i);
offset = 6 + s->code - s->start;
x86_branch32 (s->code, X86_CC_LT, tree->data.bb->addr - offset, TRUE);
stmt: BLT_UN (reg, reg) 1 {
gint32 offset;
- tree->is_jump = 1;
+ tree->is_jump = TRUE;
x86_alu_reg_reg (s->code, X86_CMP, tree->left->reg1, tree->right->reg1);
offset = 6 + s->code - s->start;
x86_branch32 (s->code, X86_CC_LT, tree->data.bb->addr - offset, FALSE);
stmt: BLT_UN (reg, CONST_I4) "MB_USE_OPT1(0)" {
gint32 offset;
- tree->is_jump = 1;
+ tree->is_jump = TRUE;
x86_alu_reg_imm (s->code, X86_CMP, tree->left->reg1, tree->right->data.i);
offset = 6 + s->code - s->start;
x86_branch32 (s->code, X86_CC_LT, tree->data.bb->addr - offset, FALSE);
stmt: BGT (reg, reg) 1 {
gint32 offset;
- tree->is_jump = 1;
+ tree->is_jump = TRUE;
x86_alu_reg_reg (s->code, X86_CMP, tree->left->reg1, tree->right->reg1);
offset = 6 + s->code - s->start;
x86_branch32 (s->code, X86_CC_GT, tree->data.bb->addr - offset, TRUE);
stmt: BGT (reg, CONST_I4) "MB_USE_OPT1(0)" {
gint32 offset;
- tree->is_jump = 1;
+ tree->is_jump = TRUE;
x86_alu_reg_imm (s->code, X86_CMP, tree->left->reg1, tree->right->data.i);
offset = 6 + s->code - s->start;
x86_branch32 (s->code, X86_CC_GT, tree->data.bb->addr - offset, TRUE);
stmt: BGT_UN (reg, reg) 1 {
gint32 offset;
- tree->is_jump = 1;
+ tree->is_jump = TRUE;
x86_alu_reg_reg (s->code, X86_CMP, tree->left->reg1, tree->right->reg1);
offset = 6 + s->code - s->start;
x86_branch32 (s->code, X86_CC_GT, tree->data.bb->addr - offset, FALSE);
stmt: BGT_UN (reg, CONST_I4) "MB_USE_OPT1(0)" {
gint32 offset;
- tree->is_jump = 1;
+ tree->is_jump = TRUE;
x86_alu_reg_imm (s->code, X86_CMP, tree->left->reg1, tree->right->data.i);
offset = 6 + s->code - s->start;
x86_branch32 (s->code, X86_CC_GT, tree->data.bb->addr - offset, FALSE);
stmt: BEQ (reg, CONST_I4) "MB_USE_OPT1(0)" {
gint32 offset;
- tree->is_jump = 1;
+ tree->is_jump = TRUE;
x86_alu_reg_imm (s->code, X86_CMP, tree->left->reg1, tree->right->data.i);
offset = 6 + s->code - s->start;
x86_branch32 (s->code, X86_CC_EQ, tree->data.bb->addr - offset, TRUE);
stmt: BEQ (reg, reg) 1 {
gint32 offset;
- tree->is_jump = 1;
+ tree->is_jump = TRUE;
x86_alu_reg_reg (s->code, X86_CMP, tree->left->reg1, tree->right->reg1);
offset = 6 + s->code - s->start;
x86_branch32 (s->code, X86_CC_EQ, tree->data.bb->addr - offset, TRUE);
stmt: BNE_UN (reg, reg) 1 {
gint32 offset;
- tree->is_jump = 1;
+ tree->is_jump = TRUE;
x86_alu_reg_reg (s->code, X86_CMP, tree->left->reg1, tree->right->reg1);
offset = 6 + s->code - s->start;
x86_branch32 (s->code, X86_CC_NE, tree->data.bb->addr - offset, FALSE);
stmt: BNE_UN (reg, CONST_I4) "MB_USE_OPT1(0)" {
gint32 offset;
- tree->is_jump = 1;
+ tree->is_jump = TRUE;
x86_alu_reg_imm (s->code, X86_CMP, tree->left->reg1, tree->right->data.i);
offset = 6 + s->code - s->start;
x86_branch32 (s->code, X86_CC_NE, tree->data.bb->addr - offset, FALSE);
stmt: BGE (reg, reg) 1 {
gint32 offset;
- tree->is_jump = 1;
+ tree->is_jump = TRUE;
x86_alu_reg_reg (s->code, X86_CMP, tree->left->reg1, tree->right->reg1);
offset = 6 + s->code - s->start;
x86_branch32 (s->code, X86_CC_GE, tree->data.bb->addr - offset, TRUE);
stmt: BGE (reg, CONST_I4) "MB_USE_OPT1(0)" {
gint32 offset;
- tree->is_jump = 1;
+ tree->is_jump = TRUE;
x86_alu_reg_imm (s->code, X86_CMP, tree->left->reg1, tree->right->data.i);
offset = 6 + s->code - s->start;
x86_branch32 (s->code, X86_CC_GE, tree->data.bb->addr - offset, TRUE);
stmt: BGE_UN (reg, reg) 1 {
gint32 offset;
- tree->is_jump = 1;
+ tree->is_jump = TRUE;
x86_alu_reg_reg (s->code, X86_CMP, tree->left->reg1, tree->right->reg1);
offset = 6 + s->code - s->start;
x86_branch32 (s->code, X86_CC_GE, tree->data.bb->addr - offset, FALSE);
stmt: BGE_UN (reg, CONST_I4) "MB_USE_OPT1(0)" {
gint32 offset;
- tree->is_jump = 1;
+ tree->is_jump = TRUE;
x86_alu_reg_imm (s->code, X86_CMP, tree->left->reg1, tree->right->data.i);
offset = 6 + s->code - s->start;
x86_branch32 (s->code, X86_CC_GE, tree->data.bb->addr - offset, FALSE);
stmt: BLE (reg, reg) 1 {
gint32 offset;
- tree->is_jump = 1;
+ tree->is_jump = TRUE;
x86_alu_reg_reg (s->code, X86_CMP, tree->left->reg1, tree->right->reg1);
offset = 6 + s->code - s->start;
x86_branch32 (s->code, X86_CC_LE, tree->data.bb->addr - offset, TRUE);
stmt: BLE (reg, CONST_I4) "MB_USE_OPT1(0)" {
gint32 offset;
- tree->is_jump = 1;
+ tree->is_jump = TRUE;
x86_alu_reg_imm (s->code, X86_CMP, tree->left->reg1, tree->right->data.i);
offset = 6 + s->code - s->start;
x86_branch32 (s->code, X86_CC_LE, tree->data.bb->addr - offset, TRUE);
stmt: BLE_UN (reg, reg) 1 {
gint32 offset;
- tree->is_jump = 1;
+ tree->is_jump = TRUE;
x86_alu_reg_reg (s->code, X86_CMP, tree->left->reg1, tree->right->reg1);
offset = 6 + s->code - s->start;
x86_branch32 (s->code, X86_CC_LE, tree->data.bb->addr - offset, FALSE);
stmt: BLE_UN (reg, CONST_I4) "MB_USE_OPT1(0)" {
gint32 offset;
- tree->is_jump = 1;
+ tree->is_jump = TRUE;
x86_alu_reg_imm (s->code, X86_CMP, tree->left->reg1, tree->right->data.i);
offset = 6 + s->code - s->start;
x86_branch32 (s->code, X86_CC_LE, tree->data.bb->addr - offset, FALSE);
stmt: BRTRUE (reg) {
gint32 offset;
- tree->is_jump = 1;
+ tree->is_jump = TRUE;
x86_alu_reg_imm (s->code, X86_CMP, tree->left->reg1, 0);
offset = 6 + s->code - s->start;
x86_branch32 (s->code, X86_CC_NE, tree->data.bb->addr - offset, TRUE);
stmt: BRFALSE (reg) {
gint32 offset;
- tree->is_jump = 1;
+ tree->is_jump = TRUE;
x86_alu_reg_imm (s->code, X86_CMP, tree->left->reg1, 0);
offset = 6 + s->code - s->start;
x86_branch32 (s->code, X86_CC_EQ, tree->data.bb->addr - offset, TRUE);
x86_mov_reg_reg (s->code, X86_EAX, tree->left->reg1, 4);
if (!tree->last_instr) {
- tree->is_jump = 1;
+ tree->is_jump = TRUE;
x86_jump32 (s->code, s->epilog - 5);
}
}
stmt: RET_VOID {
if (!tree->last_instr) {
- tree->is_jump = 1;
+ tree->is_jump = TRUE;
x86_jump32 (s->code, s->epilog - 5);
}
}
x86_push_reg (s->code, X86_EDX);
x86_push_reg (s->code, tree->left->reg1);
- x86_call_code (s->code, mono_string_to_utf8);
+ x86_mov_reg_imm (s->code, X86_EAX, mono_string_to_utf8);
+ x86_call_reg (s->code, X86_EAX);
x86_alu_reg_imm (s->code, X86_ADD, X86_ESP, 4);
x86_mov_membase_reg (s->code, X86_ESP, 12, X86_EAX, 4);
guint32 offset;
guint32 *jt = (guint32 *)tree->data.p;
- tree->is_jump = 1;
+ tree->is_jump = TRUE;
x86_alu_reg_imm (s->code, X86_CMP, tree->left->reg1, jt [0]);
offset = 6 + (guint32)s->code;
/* We are not negative (no top bit set, check for our top word to be zero */
x86_test_reg_reg (s->code, tree->left->reg2, tree->left->reg2);
- x86_branch8 (s->code, X86_CC_EQ, 15, TRUE);
+ x86_branch8 (s->code, X86_CC_EQ, 17, TRUE);
/* throw exception */
x86_mov_reg_imm (s->code, X86_ECX, get_exception_overflow ());
- x86_call_code (s->code, get_throw_exception ());
+ x86_mov_reg_imm (s->code, X86_EAX, get_throw_exception ());
+ x86_call_reg (s->code, X86_EAX);
/* our top bit is set, check that top word is 0xfffffff */
x86_alu_reg_imm (s->code, X86_CMP, tree->left->reg2, 0xffffffff);
/* nope, emit exception */
- x86_branch8 (s->code, X86_CC_NE, -15, TRUE);
+ x86_branch8 (s->code, X86_CC_NE, -17, TRUE);
if (tree->reg1 != tree->left->reg1)
x86_mov_reg_reg (s->code, tree->reg1, tree->left->reg1, 4);
reg: CONV_OVF_U4 (lreg) {
/* top word must be 0 */
x86_test_reg_reg (s->code, tree->left->reg2, tree->left->reg2);
- x86_branch8 (s->code, X86_CC_EQ, 15, TRUE);
-
- x86_mov_reg_imm (s->code, X86_ECX, get_exception_overflow ());
- x86_call_code (s->code, get_throw_exception ());
-
+ EMIT_COND_EXCEPTION (X86_CC_EQ, get_exception_overflow ());
if (tree->reg1 != tree->left->reg1)
x86_mov_reg_reg (s->code, tree->reg1, tree->left->reg1, 4);
}
lreg: CONV_OVF_U8 (CONST_I4) {
if (tree->left->data.i < 0){
x86_mov_reg_imm (s->code, X86_ECX, get_exception_overflow ());
- x86_call_code (s->code, get_throw_exception ());
+ x86_mov_reg_imm (s->code, X86_EAX, get_throw_exception ());
+ x86_call_reg (s->code, X86_EAX);
} else {
x86_mov_reg_imm (s->code, tree->reg1, tree->left->data.i);
x86_alu_reg_reg (s->code, X86_XOR, tree->reg2, tree->reg2);
lreg: CONV_OVF_U8 (reg) {
x86_test_reg_imm (s->code, tree->left->reg1, 0x8000000);
- x86_branch8 (s->code, X86_CC_EQ, 10, TRUE);
- x86_mov_reg_imm (s->code, X86_ECX, get_exception_overflow ());
- x86_call_code (s->code, get_throw_exception ());
+ EMIT_COND_EXCEPTION (X86_CC_EQ, get_exception_overflow ());
if (tree->reg1 != tree->left->reg1)
x86_mov_reg_reg (s->code, tree->reg1, tree->left->reg1, 4);
x86_push_reg (s->code, tree->right->reg1);
x86_push_reg (s->code, tree->left->reg2);
x86_push_reg (s->code, tree->left->reg1);
- x86_call_code (s->code, mono_llmult);
+ x86_mov_reg_imm (s->code, X86_EAX, mono_llmult);
+ x86_call_reg (s->code, X86_EAX);
x86_alu_reg_imm (s->code, X86_ADD, X86_ESP, 16);
if (mono_regset_reg_used (s->rs, X86_ECX))
x86_push_reg (s->code, tree->right->reg1);
x86_push_reg (s->code, tree->left->reg2);
x86_push_reg (s->code, tree->left->reg1);
- x86_call_code (s->code, mono_lldiv);
+ x86_mov_reg_imm (s->code, X86_EAX, mono_lldiv);
+ x86_call_reg (s->code, X86_EAX);
x86_alu_reg_imm (s->code, X86_ADD, X86_ESP, 16);
if (mono_regset_reg_used (s->rs, X86_ECX))
x86_push_reg (s->code, tree->right->reg1);
x86_push_reg (s->code, tree->left->reg2);
x86_push_reg (s->code, tree->left->reg1);
- x86_call_code (s->code, mono_llrem);
+ x86_mov_reg_imm (s->code, X86_EAX, mono_llrem);
+ x86_call_reg (s->code, X86_EAX);
x86_alu_reg_imm (s->code, X86_ADD, X86_ESP, 16);
if (mono_regset_reg_used (s->rs, X86_ECX))
x86_push_reg (s->code, tree->right->reg1);
x86_push_reg (s->code, tree->left->reg2);
x86_push_reg (s->code, tree->left->reg1);
- x86_call_code (s->code, mono_lldiv_un);
+ x86_mov_reg_imm (s->code, X86_EAX, mono_lldiv_un);
+ x86_call_reg (s->code, X86_EAX);
x86_alu_reg_imm (s->code, X86_ADD, X86_ESP, 16);
if (mono_regset_reg_used (s->rs, X86_ECX))
x86_push_reg (s->code, tree->right->reg1);
x86_push_reg (s->code, tree->left->reg2);
x86_push_reg (s->code, tree->left->reg1);
- x86_call_code (s->code, mono_llrem_un);
+ x86_mov_reg_imm (s->code, X86_EAX, mono_llrem_un);
+ x86_call_reg (s->code, X86_EAX);
x86_alu_reg_imm (s->code, X86_ADD, X86_ESP, 16);
if (mono_regset_reg_used (s->rs, X86_ECX))
}
if (!tree->last_instr) {
- tree->is_jump = 1;
+ tree->is_jump = TRUE;
x86_jump32 (s->code, s->epilog - 5);
}
}
guint8 *start = s->code;
gint32 o1, o2, i;
- tree->is_jump = 1;
+ tree->is_jump = TRUE;
for (i = 0; i < 2; i ++) {
s->code = start;
stmt: BNE_UN (lreg, lreg) {
gint32 offset;
- tree->is_jump = 1;
+ tree->is_jump = TRUE;
x86_alu_reg_reg (s->code, X86_CMP, tree->left->reg1, tree->right->reg1);
offset = 6 + s->code - s->start;
guint8 *start = s->code;
gint32 o1, o2, oe, i;
- tree->is_jump = 1;
+ tree->is_jump = TRUE;
for (i = 0; i < 2; i ++) {
s->code = start;
guint8 *start = s->code;
gint32 o1, o2, oe, i;
- tree->is_jump = 1;
+ tree->is_jump = TRUE;
for (i = 0; i < 2; i ++) {
s->code = start;
guint8 *start = s->code;
gint32 o1, o2, oe, i;
- tree->is_jump = 1;
+ tree->is_jump = TRUE;
for (i = 0; i < 2; i ++) {
s->code = start;
guint8 *start = s->code;
gint32 o1, o2, oe, i;
- tree->is_jump = 1;
+ tree->is_jump = TRUE;
for (i = 0; i < 2; i ++) {
s->code = start;
guint8 *start = s->code;
gint32 o1, o2, oe, i;
- tree->is_jump = 1;
+ tree->is_jump = TRUE;
for (i = 0; i < 2; i ++) {
s->code = start;
guint8 *start = s->code;
gint32 o1, o2, oe, i;
- tree->is_jump = 1;
+ tree->is_jump = TRUE;
for (i = 0; i < 2; i ++) {
s->code = start;
guint8 *start = s->code;
gint32 o1, o2, oe, i;
- tree->is_jump = 1;
+ tree->is_jump = TRUE;
for (i = 0; i < 2; i ++) {
s->code = start;
guint8 *start = s->code;
gint32 o1, o2, oe, i;
- tree->is_jump = 1;
+ tree->is_jump = TRUE;
for (i = 0; i < 2; i ++) {
s->code = start;
stmt: BEQ (freg, freg) {
gint32 offset;
- tree->is_jump = 1;
+ tree->is_jump = TRUE;
x86_fcompp (s->code);
x86_fnstsw (s->code);
x86_alu_reg_imm (s->code, X86_AND, X86_EAX, 0x4500);
stmt: BNE_UN (freg, freg) {
gint32 offset;
- tree->is_jump = 1;
+ tree->is_jump = TRUE;
x86_fcompp (s->code);
x86_fnstsw (s->code);
x86_alu_reg_imm (s->code, X86_AND, X86_EAX, 0x4500);
stmt: BLT (freg, freg) {
gint32 offset;
- tree->is_jump = 1;
+ tree->is_jump = TRUE;
x86_fcompp (s->code);
x86_fnstsw (s->code);
x86_alu_reg_imm (s->code, X86_AND, X86_EAX, 0x4500);
stmt: BLT_UN (freg, freg) {
gint32 offset;
- tree->is_jump = 1;
+ tree->is_jump = TRUE;
x86_fcompp (s->code);
x86_fnstsw (s->code);
x86_alu_reg_imm (s->code, X86_AND, X86_EAX, 0x4500);
stmt: BGE_UN (freg, freg) {
gint32 offset;
- tree->is_jump = 1;
+ tree->is_jump = TRUE;
x86_fcompp (s->code);
x86_fnstsw (s->code);
x86_alu_reg_imm (s->code, X86_AND, X86_EAX, 0x4500);
stmt: BGT_UN (freg, freg) {
gint32 offset;
- tree->is_jump = 1;
+ tree->is_jump = TRUE;
x86_fcompp (s->code);
x86_fnstsw (s->code);
x86_alu_reg_imm (s->code, X86_AND, X86_EAX, 0x4500);
stmt: BLE_UN (freg, freg) {
gint32 offset;
- tree->is_jump = 1;
+ tree->is_jump = TRUE;
x86_fcompp (s->code);
x86_fnstsw (s->code);
x86_alu_reg_imm (s->code, X86_AND, X86_EAX, 0x4500);
stmt: RET (freg) {
if (!tree->last_instr) {
- tree->is_jump = 1;
+ tree->is_jump = TRUE;
x86_jump32 (s->code, s->epilog - 5);
}
}
x86_push_imm (s->code, tree->data.i);
x86_push_reg (s->code, tree->right->reg1);
x86_push_reg (s->code, tree->left->reg1);
- x86_call_code (s->code, MEMCOPY);
+ x86_mov_reg_imm (s->code, X86_EAX, MEMCOPY);
+ x86_call_reg (s->code, X86_EAX);
x86_alu_reg_imm (s->code, X86_ADD, X86_ESP, 12);
x86_pop_reg (s->code, X86_ECX);
x86_lea_membase (s->code, X86_EAX, X86_ESP, 5*4);
x86_push_reg (s->code, X86_EAX);
- x86_call_code (s->code, MEMCOPY);
+ x86_mov_reg_imm (s->code, X86_EAX, MEMCOPY);
+ x86_call_reg (s->code, X86_EAX);
x86_alu_reg_imm (s->code, X86_ADD, X86_ESP, 12);
x86_pop_reg (s->code, X86_ECX);
x86_push_reg (s->code, tree->left->reg1);
x86_push_membase (s->code, X86_EBP, 8);
- x86_call_code (s->code, MEMCOPY);
+ x86_mov_reg_imm (s->code, X86_EAX, MEMCOPY);
+ x86_call_reg (s->code, X86_EAX);
+
x86_alu_reg_imm (s->code, X86_ADD, X86_ESP, 12);
if (!tree->last_instr) {
- tree->is_jump = 1;
+ tree->is_jump = TRUE;
x86_jump32 (s->code, s->epilog - 5);
}
}