dotgnu-pnet-commits
[Top][All Lists]
Advanced

[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;




reply via email to

[Prev in Thread] Current Thread [Next in Thread]