CVSROOT: /sources/dotgnu-pnet
Module name: pnet
Branch:
Changes by: Aleksey Demakov <[EMAIL PROTECTED]> 06/02/27 16:27:00
Modified files:
engine : jitc_arith.c
Log message:
convert operands of arithmetic binary operations to the required type
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/dotgnu-pnet/pnet/engine/jitc_arith.c.diff?tr1=1.2&tr2=1.3&r1=text&r2=text
Patches:
Index: pnet/engine/jitc_arith.c
diff -u pnet/engine/jitc_arith.c:1.2 pnet/engine/jitc_arith.c:1.3
--- pnet/engine/jitc_arith.c:1.2 Sat Dec 31 10:25:39 2005
+++ pnet/engine/jitc_arith.c Mon Feb 27 16:27:00 2006
@@ -26,164 +26,130 @@
static void JITCoder_Binary(ILCoder *coder, int opcode,
ILEngineType type1,
ILEngineType type2)
{
-
ILJITCoder *jitCoder = _ILCoderToILJITCoder(coder);
-
+ ILJitValue value1 = jitCoder->jitStack[jitCoder->stackTop - 2];
+ ILJitValue value2 = jitCoder->jitStack[jitCoder->stackTop - 1];
+ ILJitValue result = 0;
+
switch(opcode)
{
case IL_OP_ADD:
{
- jitCoder->jitStack[jitCoder->stackTop - 2] =
jit_insn_add(jitCoder->jitFunction,
-
jitCoder->jitStack[jitCoder->stackTop - 2],
-
jitCoder->jitStack[jitCoder->stackTop - 1]);
- JITC_ADJUST(jitCoder, -1);
+ AdjustMixedBinary(jitCoder, 0, &value1, &value2);
+ result = jit_insn_add(jitCoder->jitFunction, value1,
value2);
}
break;
case IL_OP_ADD_OVF:
{
- jitCoder->jitStack[jitCoder->stackTop - 2] =
jit_insn_add_ovf(jitCoder->jitFunction,
-
jitCoder->jitStack[jitCoder->stackTop - 2],
-
jitCoder->jitStack[jitCoder->stackTop - 1]);
- JITC_ADJUST(jitCoder, -1);
-
+ AdjustMixedBinary(jitCoder, 0, &value1, &value2);
+ result = jit_insn_add_ovf(jitCoder->jitFunction,
value1, value2);
}
break;
case IL_OP_ADD_OVF_UN:
{
- jitCoder->jitStack[jitCoder->stackTop - 2] =
jit_insn_add_ovf(jitCoder->jitFunction,
-
jitCoder->jitStack[jitCoder->stackTop - 2],
-
jitCoder->jitStack[jitCoder->stackTop - 1]);
- JITC_ADJUST(jitCoder, -1);
+ AdjustMixedBinary(jitCoder, 1, &value1, &value2);
+ result = jit_insn_add_ovf(jitCoder->jitFunction,
value1, value2);
}
break;
case IL_OP_SUB:
{
- jitCoder->jitStack[jitCoder->stackTop - 2] =
jit_insn_sub(jitCoder->jitFunction,
-
jitCoder->jitStack[jitCoder->stackTop - 2],
-
jitCoder->jitStack[jitCoder->stackTop - 1]);
- JITC_ADJUST(jitCoder, -1);
-
+ AdjustMixedBinary(jitCoder, 0, &value1, &value2);
+ result = jit_insn_sub(jitCoder->jitFunction, value1,
value2);
}
break;
case IL_OP_SUB_OVF:
{
- jitCoder->jitStack[jitCoder->stackTop - 2] =
jit_insn_sub_ovf(jitCoder->jitFunction,
-
jitCoder->jitStack[jitCoder->stackTop - 2],
-
jitCoder->jitStack[jitCoder->stackTop - 1]);
- JITC_ADJUST(jitCoder, -1);
-
+ AdjustMixedBinary(jitCoder, 0, &value1, &value2);
+ result = jit_insn_sub_ovf(jitCoder->jitFunction,
value1, value2);
}
break;
case IL_OP_SUB_OVF_UN:
{
- jitCoder->jitStack[jitCoder->stackTop - 2] =
jit_insn_sub_ovf(jitCoder->jitFunction,
-
jitCoder->jitStack[jitCoder->stackTop - 2],
-
jitCoder->jitStack[jitCoder->stackTop - 1]);
- JITC_ADJUST(jitCoder, -1);
+ AdjustMixedBinary(jitCoder, 1, &value1, &value2);
+ result = jit_insn_sub_ovf(jitCoder->jitFunction,
value1, value2);
}
break;
case IL_OP_MUL:
{
- jitCoder->jitStack[jitCoder->stackTop - 2] =
jit_insn_mul(jitCoder->jitFunction,
-
jitCoder->jitStack[jitCoder->stackTop - 2],
-
jitCoder->jitStack[jitCoder->stackTop - 1]);
- JITC_ADJUST(jitCoder, -1);
+ AdjustMixedBinary(jitCoder, 0, &value1, &value2);
+ result = jit_insn_mul(jitCoder->jitFunction, value1,
value2);
}
break;
case IL_OP_MUL_OVF:
{
- jitCoder->jitStack[jitCoder->stackTop - 2] =
jit_insn_mul_ovf(jitCoder->jitFunction,
-
jitCoder->jitStack[jitCoder->stackTop - 2],
-
jitCoder->jitStack[jitCoder->stackTop - 1]);
- JITC_ADJUST(jitCoder, -1);
+ AdjustMixedBinary(jitCoder, 0, &value1, &value2);
+ result = jit_insn_mul_ovf(jitCoder->jitFunction,
value1, value2);
}
break;
case IL_OP_MUL_OVF_UN:
{
-
- jitCoder->jitStack[jitCoder->stackTop - 2] =
jit_insn_mul_ovf(jitCoder->jitFunction,
-
jitCoder->jitStack[jitCoder->stackTop - 2],
-
jitCoder->jitStack[jitCoder->stackTop - 1]);
- JITC_ADJUST(jitCoder, -1);
+ AdjustMixedBinary(jitCoder, 1, &value1, &value2);
+ result = jit_insn_mul_ovf(jitCoder->jitFunction,
value1, value2);
}
break;
case IL_OP_DIV:
-
{
- jitCoder->jitStack[jitCoder->stackTop - 2] =
jit_insn_div(jitCoder->jitFunction,
-
jitCoder->jitStack[jitCoder->stackTop - 2],
-
jitCoder->jitStack[jitCoder->stackTop - 1]);
- JITC_ADJUST(jitCoder, -1);
+ AdjustMixedBinary(jitCoder, 0, &value1, &value2);
+ result = jit_insn_div(jitCoder->jitFunction, value1,
value2);
}
break;
case IL_OP_DIV_UN:
{
-
- jitCoder->jitStack[jitCoder->stackTop - 2] =
jit_insn_div(jitCoder->jitFunction,
-
jitCoder->jitStack[jitCoder->stackTop - 2],
-
jitCoder->jitStack[jitCoder->stackTop - 1]);
- JITC_ADJUST(jitCoder, -1);
+ AdjustMixedBinary(jitCoder, 1, &value1, &value2);
+ result = jit_insn_div(jitCoder->jitFunction, value1,
value2);
}
break;
case IL_OP_REM:
{
- jitCoder->jitStack[jitCoder->stackTop - 2] =
jit_insn_rem_ieee(jitCoder->jitFunction,
-
jitCoder->jitStack[jitCoder->stackTop - 2],
-
jitCoder->jitStack[jitCoder->stackTop - 1]);
- JITC_ADJUST(jitCoder, -1);
+ AdjustMixedBinary(jitCoder, 0, &value1, &value2);
+ result = jit_insn_rem_ieee(jitCoder->jitFunction,
value1, value2);
}
break;
case IL_OP_REM_UN:
{
- jitCoder->jitStack[jitCoder->stackTop - 2] =
jit_insn_rem_ieee(jitCoder->jitFunction,
-
jitCoder->jitStack[jitCoder->stackTop - 2],
-
jitCoder->jitStack[jitCoder->stackTop - 1]);
- JITC_ADJUST(jitCoder, -1);
+ AdjustMixedBinary(jitCoder, 1, &value1, &value2);
+ result = jit_insn_rem_ieee(jitCoder->jitFunction,
value1, value2);
}
break;
case IL_OP_AND:
{
- jitCoder->jitStack[jitCoder->stackTop - 2] =
jit_insn_and(jitCoder->jitFunction,
-
jitCoder->jitStack[jitCoder->stackTop - 2],
-
jitCoder->jitStack[jitCoder->stackTop - 1]);
- JITC_ADJUST(jitCoder, -1);
+ result = jit_insn_and(jitCoder->jitFunction, value1,
value2);
}
break;
case IL_OP_OR:
{
-
- jitCoder->jitStack[jitCoder->stackTop - 2] =
jit_insn_or(jitCoder->jitFunction,
-
jitCoder->jitStack[jitCoder->stackTop - 2],
-
jitCoder->jitStack[jitCoder->stackTop - 1]);
- JITC_ADJUST(jitCoder, -1);
+ result = jit_insn_or(jitCoder->jitFunction, value1,
value2);
}
break;
case IL_OP_XOR:
{
-
- jitCoder->jitStack[jitCoder->stackTop - 2] =
jit_insn_xor(jitCoder->jitFunction,
-
jitCoder->jitStack[jitCoder->stackTop - 2],
-
jitCoder->jitStack[jitCoder->stackTop - 1]);
- JITC_ADJUST(jitCoder, -1);
+ result = jit_insn_xor(jitCoder->jitFunction, value1,
value2);
}
break;
+
+ default:
+ {
+ return;
+ }
+ }
- }
+ jitCoder->jitStack[jitCoder->stackTop - 2] = result;
+ JITC_ADJUST(jitCoder, -1);
}
/*
_______________________________________________
dotgnu-pnet-commits mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/dotgnu-pnet-commits