[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[dotgnu-pnet-commits] pnet ./ChangeLog engine/jitc.c engine/jitc_bran...
From: |
Aleksey Demakov |
Subject: |
[dotgnu-pnet-commits] pnet ./ChangeLog engine/jitc.c engine/jitc_bran... |
Date: |
Mon, 27 Feb 2006 15:51:20 +0000 |
CVSROOT: /sources/dotgnu-pnet
Module name: pnet
Branch:
Changes by: Aleksey Demakov <address@hidden> 06/02/27 15:51:19
Modified files:
. : ChangeLog
engine : jitc.c jitc_branch.c jitc_conv.c
Log message:
Convert arguments of binary arithmetic operations to the required type.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/dotgnu-pnet/pnet/ChangeLog.diff?tr1=1.3298&tr2=1.3299&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/dotgnu-pnet/pnet/engine/jitc.c.diff?tr1=1.20&tr2=1.21&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/dotgnu-pnet/pnet/engine/jitc_branch.c.diff?tr1=1.7&tr2=1.8&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/dotgnu-pnet/pnet/engine/jitc_conv.c.diff?tr1=1.2&tr2=1.3&r1=text&r2=text
Patches:
Index: pnet/ChangeLog
diff -u pnet/ChangeLog:1.3298 pnet/ChangeLog:1.3299
--- pnet/ChangeLog:1.3298 Sun Feb 26 20:33:25 2006
+++ pnet/ChangeLog Mon Feb 27 15:51:19 2006
@@ -1,3 +1,13 @@
+2006-02-27 Aleksey Demakov <address@hidden>
+
+ * engine/jitc_conv.c (JITCoder_Conv): fix a typo.
+
+ * engine/jitc_arith.c (JITCoder_Binary): use AdjustMixedBinary
+ for arithmetic ops.
+ * engine/jitc_branch.c, engine/jitc.c (AdjustMixedBinary): moved
+ AdjustMixedBinary from jitc_branch.c to jitc.c. Bail out on floating
+ point values.
+
2006-02-26 Klaus Treichel <address@hidden>
* engine/call.c: add an additional slot in the arg buffer for ctors.
Return
Index: pnet/engine/jitc.c
diff -u pnet/engine/jitc.c:1.20 pnet/engine/jitc.c:1.21
--- pnet/engine/jitc.c:1.20 Sun Feb 26 20:33:25 2006
+++ pnet/engine/jitc.c Mon Feb 27 15:51:19 2006
@@ -255,6 +255,168 @@
} while (0)
/*
+ * Check if the typeKind is a floating point number.
+ */
+#define _JIT_TYPEKIND_IS_FLOAT(typeKind) \
+((typeKind == JIT_TYPE_FLOAT32) || \
+ (typeKind == JIT_TYPE_FLOAT64) || \
+ (typeKind == JIT_TYPE_NFLOAT))
+
+/*
+ * Check if the typeKind is a long.
+ */
+#ifdef IL_NATIVE_INT64
+#define _JIT_TYPEKIND_IS_LONG(typeKind) \
+((typeKind == JIT_TYPE_LONG) || \
+ (typeKind == JIT_TYPE_ULONG) || \
+ (typeKind == JIT_TYPE_NINT) || \
+ (typeKind == JIT_TYPE_NUINT) || \
+ (typeKind == JIT_TYPE_PTR))
+#else
+#define _JIT_TYPEKIND_IS_LONG(typeKind) \
+((typeKind == JIT_TYPE_LONG) || \
+ (typeKind == JIT_TYPE_ULONG))
+#endif
+
+/*
+ * Check if the typeKind is unsigned.
+ */
+#define _JIT_TYPEKIND_IS_UNSIGNED(typeKind) \
+((typeKind == JIT_TYPE_ULONG) || \
+ (typeKind == JIT_TYPE_NUINT) || \
+ (typeKind == JIT_TYPE_UINT) || \
+ (typeKind == JIT_TYPE_USHORT) || \
+ (typeKind == JIT_TYPE_UBYTE))
+
+/*
+ * Check if the typeKind is signed.
+ */
+#define _JIT_TYPEKIND_IS_SIGNED(typeKind) \
+((typeKind == JIT_TYPE_LONG) || \
+ (typeKind == JIT_TYPE_NINT) || \
+ (typeKind == JIT_TYPE_INT) || \
+ (typeKind == JIT_TYPE_SHORT) || \
+ (typeKind == JIT_TYPE_SBYTE))
+
+/*
+ * Readjust the stack to normalize binary operands when
+ * I and I4 are mixed together. Also determine which of
+ * I4 or I8 to use if the operation involves I.
+ */
+static void AdjustMixedBinary(ILJITCoder *coder, int isUnsigned,
+ ILJitValue *value1,
ILJitValue *value2)
+{
+ ILJitType type1 = jit_value_get_type(*value1);
+ ILJitType newType1 = type1;
+ ILJitType type2 = jit_value_get_type(*value2);
+ ILJitType newType2 = type2;
+ int type1Kind = jit_type_get_kind(type1);
+ int type2Kind = jit_type_get_kind(type2);
+ int type1IsFloat = _JIT_TYPEKIND_IS_FLOAT(type1Kind);
+ int type2IsFloat = _JIT_TYPEKIND_IS_FLOAT(type2Kind);
+ int type1IsLong = _JIT_TYPEKIND_IS_LONG(type1Kind);
+ int type2IsLong = _JIT_TYPEKIND_IS_LONG(type2Kind);
+
+ if(type1IsFloat || type2IsFloat)
+ {
+ return;
+ }
+
+ /* If the arguments mix I8 and I4, then cast the I4 value to I8 */
+ if(type1IsLong && !type2IsLong)
+ {
+ if(isUnsigned)
+ {
+ newType2 = _IL_JIT_TYPE_UINT64;
+ }
+ else
+ {
+ newType2 = _IL_JIT_TYPE_INT64;
+ }
+ type2Kind = jit_type_get_kind(newType2);
+ type2IsLong = 1;
+ }
+ else if(!type1IsLong && type2IsLong)
+ {
+ if(isUnsigned)
+ {
+ newType1 = _IL_JIT_TYPE_UINT64;
+ }
+ else
+ {
+ newType1 = _IL_JIT_TYPE_INT64;
+ }
+ type1Kind = jit_type_get_kind(newType1);
+ type1IsLong = 1;
+ }
+
+ if(isUnsigned)
+ {
+ if(_JIT_TYPEKIND_IS_SIGNED(type1Kind))
+ {
+ if(type1IsLong)
+ {
+ newType1 = _IL_JIT_TYPE_UINT64;
+ }
+ else
+ {
+ newType1 = _IL_JIT_TYPE_UINT32;
+ }
+ type1Kind = jit_type_get_kind(newType1);
+ }
+ if(_JIT_TYPEKIND_IS_SIGNED(type2Kind))
+ {
+ if(type2IsLong)
+ {
+ newType2 = _IL_JIT_TYPE_UINT64;
+ }
+ else
+ {
+ newType2 = _IL_JIT_TYPE_UINT32;
+ }
+ type2Kind = jit_type_get_kind(newType2);
+ }
+ }
+ else
+ {
+ if(_JIT_TYPEKIND_IS_UNSIGNED(type1Kind))
+ {
+ if(type1IsLong)
+ {
+ newType1 = _IL_JIT_TYPE_INT64;
+ }
+ else
+ {
+ newType1 = _IL_JIT_TYPE_INT32;
+ }
+ type1Kind = jit_type_get_kind(newType1);
+ }
+ if(_JIT_TYPEKIND_IS_UNSIGNED(type2Kind))
+ {
+ if(type2IsLong)
+ {
+ newType2 = _IL_JIT_TYPE_INT64;
+ }
+ else
+ {
+ newType2 = _IL_JIT_TYPE_INT32;
+ }
+ type2Kind = jit_type_get_kind(newType2);
+ }
+ }
+
+ /* now do the conversion if necessairy. */
+ if(type1 != newType1)
+ {
+ *value1 = jit_insn_convert(coder->jitFunction, *value1,
newType1, 0);
+ }
+ if(type2 != newType2)
+ {
+ *value2 = jit_insn_convert(coder->jitFunction, *value2,
newType2, 0);
+ }
+}
+
+/*
* Perform a class layout.
*/
static int _LayoutClass(ILExecThread *thread, ILClass *info)
Index: pnet/engine/jitc_branch.c
diff -u pnet/engine/jitc_branch.c:1.7 pnet/engine/jitc_branch.c:1.8
--- pnet/engine/jitc_branch.c:1.7 Sun Feb 19 18:31:11 2006
+++ pnet/engine/jitc_branch.c Mon Feb 27 15:51:19 2006
@@ -201,154 +201,6 @@
}
/*
- * Check if the typeKind is a long.
- */
-#ifdef IL_NATIVE_INT64
-#define _JIT_TYPEKIND_IS_LONG(typeKind) \
-((typeKind == JIT_TYPE_LONG) || \
- (typeKind == JIT_TYPE_ULONG) || \
- (typeKind == JIT_TYPE_NINT) || \
- (typeKind == JIT_TYPE_NUINT) || \
- (type1Kind == JIT_TYPE_PTR))
-#else
-#define _JIT_TYPEKIND_IS_LONG(typeKind) \
-((typeKind == JIT_TYPE_LONG) || \
- (typeKind == JIT_TYPE_ULONG))
-#endif
-
-/*
- * Check if the typeKind is unsigned.
- */
-#define _JIT_TYPEKIND_IS_UNSIGNED(typeKind) \
-((typeKind == JIT_TYPE_ULONG) || \
- (typeKind == JIT_TYPE_NUINT) || \
- (typeKind == JIT_TYPE_UINT) || \
- (typeKind == JIT_TYPE_USHORT) || \
- (type1Kind == JIT_TYPE_UBYTE))
-
-/*
- * Check if the typeKind is signed.
- */
-#define _JIT_TYPEKIND_IS_SIGNED(typeKind) \
-((typeKind == JIT_TYPE_LONG) || \
- (typeKind == JIT_TYPE_NINT) || \
- (typeKind == JIT_TYPE_INT) || \
- (typeKind == JIT_TYPE_SHORT) || \
- (type1Kind == JIT_TYPE_SBYTE))
-
-/*
- * Readjust the stack to normalize binary operands when
- * I and I4 are mixed together. Also determine which of
- * I4 or I8 to use if the operation involves I.
- */
-static void AdjustMixedBinary(ILJITCoder *coder, int isUnsigned,
- ILJitValue *value1,
ILJitValue *value2)
-
-{
- ILJitType type1 = jit_value_get_type(*value1);
- ILJitType newType1 = type1;
- ILJitType type2 = jit_value_get_type(*value2);
- ILJitType newType2 = type2;
- int type1Kind = jit_type_get_kind(type1);
- int type2Kind = jit_type_get_kind(type2);
- int type1IsLong = _JIT_TYPEKIND_IS_LONG(type1Kind);
- int type2IsLong = _JIT_TYPEKIND_IS_LONG(type2Kind);
-
- /* If the arguments mix I8 and I4, then cast the I4 value to I8 */
- if(type1IsLong && !type2IsLong)
- {
- if(isUnsigned)
- {
- newType2 = _IL_JIT_TYPE_UINT64;
- }
- else
- {
- newType2 = _IL_JIT_TYPE_INT64;
- }
- type2Kind = jit_type_get_kind(newType2);
- type2IsLong = 1;
- }
- else if(!type1IsLong && type2IsLong)
- {
- if(isUnsigned)
- {
- newType1 = _IL_JIT_TYPE_UINT64;
- }
- else
- {
- newType1 = _IL_JIT_TYPE_INT64;
- }
- type1Kind = jit_type_get_kind(newType1);
- type1IsLong = 1;
- }
-
- if(isUnsigned)
- {
- if(_JIT_TYPEKIND_IS_SIGNED(type1Kind))
- {
- if(type1IsLong)
- {
- newType1 = _IL_JIT_TYPE_UINT64;
- }
- else
- {
- newType1 = _IL_JIT_TYPE_UINT32;
- }
- type1Kind = jit_type_get_kind(newType1);
- }
- if(_JIT_TYPEKIND_IS_SIGNED(type2Kind))
- {
- if(type2IsLong)
- {
- newType2 = _IL_JIT_TYPE_UINT64;
- }
- else
- {
- newType2 = _IL_JIT_TYPE_UINT32;
- }
- type2Kind = jit_type_get_kind(newType2);
- }
- }
- else
- {
- if(_JIT_TYPEKIND_IS_UNSIGNED(type1Kind))
- {
- if(type1IsLong)
- {
- newType1 = _IL_JIT_TYPE_INT64;
- }
- else
- {
- newType1 = _IL_JIT_TYPE_INT32;
- }
- type1Kind = jit_type_get_kind(newType1);
- }
- if(_JIT_TYPEKIND_IS_UNSIGNED(type2Kind))
- {
- if(type2IsLong)
- {
- newType2 = _IL_JIT_TYPE_INT64;
- }
- else
- {
- newType2 = _IL_JIT_TYPE_INT32;
- }
- type2Kind = jit_type_get_kind(newType2);
- }
- }
-
- /* now do the conversion if necessairy. */
- if(type1 != newType1)
- {
- *value1 = jit_insn_convert(coder->jitFunction, *value1,
newType1, 0);
- }
- if(type2 != newType2)
- {
- *value2 = jit_insn_convert(coder->jitFunction, *value2,
newType2, 0);
- }
-}
-
-/*
* Output a comparision between the 2 top most values on the evaluation stack.
* The result value is returned.
*/
Index: pnet/engine/jitc_conv.c
diff -u pnet/engine/jitc_conv.c:1.2 pnet/engine/jitc_conv.c:1.3
--- pnet/engine/jitc_conv.c:1.2 Wed Jan 4 18:54:39 2006
+++ pnet/engine/jitc_conv.c Mon Feb 27 15:51:19 2006
@@ -322,7 +322,7 @@
#endif
{
/* Convert to "unsigned int32" */
- value = ConvertValue(jitCoder, IL_OP_CONV_U8, 0, 0);
+ value = ConvertValue(jitCoder, IL_OP_CONV_U4, 0, 0);
jitCoder->jitStack[jitCoder->stackTop - 1] = value;
}
break;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [dotgnu-pnet-commits] pnet ./ChangeLog engine/jitc.c engine/jitc_bran...,
Aleksey Demakov <=