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_arith....


From: Klaus Treichel
Subject: [dotgnu-pnet-commits] pnet ChangeLog engine/jitc.c engine/jitc_arith....
Date: Sun, 15 Oct 2006 09:32:28 +0000

CVSROOT:        /cvsroot/dotgnu-pnet
Module name:    pnet
Changes by:     Klaus Treichel <ktreichel>      06/10/15 09:32:28

Modified files:
        .              : ChangeLog 
        engine         : jitc.c jitc_arith.c jitc_call.c jitc_conv.c 
                         jitc_var.c verify_call.c 
        include        : il_coder.h 

Log message:
        2006-10-15  Klaus Treichel  <address@hidden>
        
                * engine/jitc.c, engine/jitc_call.c, engine/verify_call.c,
                include/il_coder.h: Add the call signature to the 
ILCoderMethodInfo to
                create the libjit call signature for the indirect call (calli 
opcode).
                Handle call signature in _ILJitCreateMethodSignature. Implement 
the
                calli opcode.
        
                * engine/jitc_arith.c: Preserve the flags of the pointer value 
in
                pointer operations if one and only one pointer is involved.
        
                * engine/jitc_conv.c: Preserve the flags of the original value 
after the
                conversion is done.
        
                * engine/jitc_var.c: Add stats info for the address_of opcodes.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/pnet/ChangeLog?cvsroot=dotgnu-pnet&r1=1.3374&r2=1.3375
http://cvs.savannah.gnu.org/viewcvs/pnet/engine/jitc.c?cvsroot=dotgnu-pnet&r1=1.56&r2=1.57
http://cvs.savannah.gnu.org/viewcvs/pnet/engine/jitc_arith.c?cvsroot=dotgnu-pnet&r1=1.6&r2=1.7
http://cvs.savannah.gnu.org/viewcvs/pnet/engine/jitc_call.c?cvsroot=dotgnu-pnet&r1=1.28&r2=1.29
http://cvs.savannah.gnu.org/viewcvs/pnet/engine/jitc_conv.c?cvsroot=dotgnu-pnet&r1=1.6&r2=1.7
http://cvs.savannah.gnu.org/viewcvs/pnet/engine/jitc_var.c?cvsroot=dotgnu-pnet&r1=1.9&r2=1.10
http://cvs.savannah.gnu.org/viewcvs/pnet/engine/verify_call.c?cvsroot=dotgnu-pnet&r1=1.53&r2=1.54
http://cvs.savannah.gnu.org/viewcvs/pnet/include/il_coder.h?cvsroot=dotgnu-pnet&r1=1.50&r2=1.51

Patches:
Index: ChangeLog
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnet/ChangeLog,v
retrieving revision 1.3374
retrieving revision 1.3375
diff -u -b -r1.3374 -r1.3375
--- ChangeLog   13 Oct 2006 15:04:03 -0000      1.3374
+++ ChangeLog   15 Oct 2006 09:32:27 -0000      1.3375
@@ -1,3 +1,19 @@
+2006-10-15  Klaus Treichel  <address@hidden>
+
+       * engine/jitc.c, engine/jitc_call.c, engine/verify_call.c,
+       include/il_coder.h: Add the call signature to the ILCoderMethodInfo to
+       create the libjit call signature for the indirect call (calli opcode).
+       Handle call signature in _ILJitCreateMethodSignature. Implement the
+       calli opcode.
+
+       * engine/jitc_arith.c: Preserve the flags of the pointer value in
+       pointer operations if one and only one pointer is involved.
+
+       * engine/jitc_conv.c: Preserve the flags of the original value after the
+       conversion is done.
+
+       * engine/jitc_var.c: Add stats info for the address_of opcodes.
+
 2006-10-13  Klaus Treichel  <address@hidden>
 
        * engine/jitc_obj.c, engine/jitc_ptr.c: Handle the pointer relative 
store

Index: engine/jitc.c
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnet/engine/jitc.c,v
retrieving revision 1.56
retrieving revision 1.57
diff -u -b -r1.56 -r1.57
--- engine/jitc.c       12 Oct 2006 16:07:38 -0000      1.56
+++ engine/jitc.c       15 Oct 2006 09:32:28 -0000      1.57
@@ -3115,83 +3115,147 @@
  */
 static ILJitType _ILJitCreateMethodSignature(ILJITCoder *coder,
                                                                                
         ILMethod *method,
+                                                                               
         ILType* signature,
                                                                                
         ILUInt32 implementationType)
 {
-       ILType *signature = ILMethod_Signature(method);
        ILType *type;
-
        /* number of args in the bytecode */
        /* Argument 0 is the type of the return value. */
-       ILUInt32 num = ILTypeNumParams(signature);
+       ILUInt32 num = 0;
        /* total number of args */
-#ifdef IL_JIT_THREAD_IN_SIGNATURE
-       /* because we pass the ILExecThread as first arg we have to add one */
-       ILUInt32 total = num + 1;
-       /* We set jitArgc to 1 because we allways pass the current ILExecThread 
*/
-       /* in jitArgs[0]. */
-       ILUInt32 jitArgc = 1;
-#else
-       ILUInt32 total = num;
-       ILUInt32 jitArgc = 0;
-#endif
+       ILUInt32 total;
+       ILUInt32 jitArgc;
        ILUInt32 current;
-       jit_abi_t jitAbi = IL_JIT_CALLCONV_DEFAULT;
+       /* calling convention for this function. */
+       /* Hold the abi to use for libjit. */
+       jit_abi_t jitAbi;
        /* JitType to hold the return type */
        ILJitType jitReturnType;
-       /* calling convention for this function. */
        /* The type of the jit signature for this function. */
        ILJitType jitSignature;
        /* Flag if this is an array or string constructor. */
        int isArrayOrString = 0;
        /* Flag if the method is a ctor. */
-       int isCtor = ILMethodIsConstructor(method);
+       int isCtor = 0;
        /* Some infos that we'll need later. */
-       ILClass *info = ILMethod_Owner(method);
+       ILClass *info = 0;
 #ifdef IL_CONFIG_VARARGS
        /* Flag to check if this is an internal vararg method. */
        ILInt32 isInternalVararg = 0;
 #endif
 
-       if(ILType_HasThis(signature))
+       /* Get the information needed from the method. */
+       if(method)
        {
-               if(!isCtor)
+               signature = ILMethod_Signature(method);
+               isCtor = ILMethodIsConstructor(method);
+               info = ILMethod_Owner(method);
+       }
+
+       /* Get the number of args in the signature. */
+       num = ILTypeNumParams(signature);
+       /* Get the total number of args for the jit signature. */
+#ifdef IL_JIT_THREAD_IN_SIGNATURE
+       /* because we pass the ILExecThread as first arg we have to add one */
+       total = num + 1;
+       /* We set jitArgc to 1 because we allways pass the current ILExecThread 
*/
+       /* in jitArgs[0]. */
+       jitArgc = 1;
+#else
+       total = num;
+       jitArgc = 0;
+#endif
+
+       /* Get the calling convention to use for this method/call. */
+       switch((ILType_CallConv(signature) & IL_META_CALLCONV_MASK))
                {
-                       /* we need an other arg for this */
-                       total++;
+               case IL_META_CALLCONV_DEFAULT:
+               {
+                       jitAbi = IL_JIT_CALLCONV_DEFAULT;
                }
-               else
+               break;
+
+               case IL_META_CALLCONV_C:
                {
-                       if(implementationType != _IL_JIT_IMPL_INTERNALALLOC)
+                       jitAbi = IL_JIT_CALLCONV_CDECL;
+               }
+               break;
+
+               case IL_META_CALLCONV_STDCALL:
                        {
-                               /* we need an other arg for this */
-                               total++;
+                       jitAbi = IL_JIT_CALLCONV_STDCALL;
+               }
+               break;
+
+               case IL_META_CALLCONV_THISCALL:
+               {
+                       /* This calling convention is not yet supported with 
libjit. */
+                       /* So we use cdecl instead. */
+                       jitAbi = IL_JIT_CALLCONV_CDECL;
+               }
+               break;
+
+               case IL_META_CALLCONV_FASTCALL:
+               {
+                       jitAbi = IL_JIT_CALLCONV_FASTCALL;
+               }
+               break;
+
+               case IL_META_CALLCONV_VARARG:
+               {
+               #ifdef IL_CONFIG_VARARGS
+                       if((implementationType & _IL_JIT_IMPL_PINVOKE) != 0)
+                       {
+                               /* Methods not implemented internal must have 
the vararg calling */
+                               /* convertion. */
+                               jitAbi = IL_JIT_CALLCONV_VARARG;
                        }
                        else
                        {
-                               isArrayOrString = 1;
+                               /* For internal vararg methods we add an 
additional arg and */
+                               /* use the default calling convention instead. 
*/
+                               jitAbi = IL_JIT_CALLCONV_DEFAULT;
+                               total++;
+                               isInternalVararg = 1;
                        }
+               #else
+                       /* Vararg calls are not supported. */
+                       return 0;
+               #endif
                }
+               break;
+
+               default:
+               {
+                       /* Invalid calling convention. */
+                       return 0;
        }
+               break;
 
-#ifdef IL_CONFIG_VARARGS
-       /* Vararg methods implemented in the engine have an additional argument 
*/
-       /* of type void * which must be added to the jit signature. */
-       if((ILType_CallConv(signature) & IL_META_CALLCONV_MASK) ==
-                       IL_META_CALLCONV_VARARG)
+       }
+
+       /* Check if the method has a not explicit this argument. */
+       /* This is true only for non function pointer signatures. */
+       if(ILType_HasThis(signature))
        {
-               if((implementationType & _IL_JIT_IMPL_INTERNALMASK) != 0)
+               if(!isCtor)
                {
+                       /* we need an other arg for this */
                        total++;
-                       isInternalVararg = 1;
                }
                else
                {
-                       /* Methods not implemented internal must have the 
vararg calling */
-                       /* convertion. */
-                       jitAbi = IL_JIT_CALLCONV_VARARG;
+                       if(implementationType != _IL_JIT_IMPL_INTERNALALLOC)
+                       {
+                               /* we need an other arg for this */
+                               total++;
+                       }
+                       else
+                       {
+                               isArrayOrString = 1;
+                       }
                }
        }
-#endif
 
        /* Array to hold the parameter types. */
        ILJitType jitArgs[total];
@@ -3553,7 +3617,9 @@
 
                if(!jitSignature)
                {
-                       if(!(jitSignature = 
_ILJitCreateMethodSignature(jitCoder, method,
+                       if(!(jitSignature = 
_ILJitCreateMethodSignature(jitCoder,
+                                                                               
                                        method,
+                                                                               
                                        0,
                                                                                
                                        implementationType)))
                        {
                                return 0;

Index: engine/jitc_arith.c
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnet/engine/jitc_arith.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -b -r1.6 -r1.7
--- engine/jitc_arith.c 12 Oct 2006 16:07:38 -0000      1.6
+++ engine/jitc_arith.c 15 Oct 2006 09:32:28 -0000      1.7
@@ -21,6 +21,11 @@
 #ifdef IL_JITC_CODE
 
 /*
+ * Check if the engine type is a pointer type.
+ */
+#define _IL_JIT_ENGINE_TYPE_IS_POINTER(type)  (((type) == ILEngineType_M) || 
((type) == ILEngineType_T))
+
+/*
  * Handle a binary opcode.
  */
 static void JITCoder_Binary(ILCoder *coder, int opcode,
@@ -217,6 +222,8 @@
                                                           ILEngineType type1, 
ILEngineType type2)
 {
        ILJITCoder *jitCoder = _ILCoderToILJITCoder(coder);
+       int value1IsPointer = _IL_JIT_ENGINE_TYPE_IS_POINTER(type1);
+       int value2IsPointer = _IL_JIT_ENGINE_TYPE_IS_POINTER(type2);
        _ILJitStackItemNew(value2);
        _ILJitStackItemNew(value1);
        ILJitValue result = 0;
@@ -253,7 +260,28 @@
                }
                break;
        }
+       if(value1IsPointer && value2IsPointer)
+       {
+               /* We can't keep the reference information for this case. */
+               _ILJitStackPushValue(jitCoder, result);
+       }
+       else if(value1IsPointer)
+       {
+               /* Keep the reference information for value1. */
+               _ILJitStackItemSetValue(value1, result);
+               _ILJitStackPush(jitCoder, value1);
+       }
+       else if(value2IsPointer)
+       {
+               /* Keep the reference information for value2. */
+               _ILJitStackItemSetValue(value2, result);
+               _ILJitStackPush(jitCoder, value2);
+       }
+       else
+       {
+               /* There is no pointer involved in this operation. */
        _ILJitStackPushValue(jitCoder, result);
+       }
 }
 
 /*

Index: engine/jitc_call.c
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnet/engine/jitc_call.c,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -b -r1.28 -r1.29
--- engine/jitc_call.c  12 Oct 2006 16:07:38 -0000      1.28
+++ engine/jitc_call.c  15 Oct 2006 09:32:28 -0000      1.29
@@ -36,7 +36,7 @@
 
                if(!func)
                {
-                       *signature = _ILJitCreateMethodSignature(coder, method, 
0);
+                       *signature = _ILJitCreateMethodSignature(coder, method, 
0, 0);
                        return 1;
                }
                else
@@ -45,6 +45,14 @@
                        return 0;
                }
        }
+       else
+       {
+               *signature = _ILJitCreateMethodSignature(coder,
+                                                                               
                 method,
+                                                                               
                 info->signature,
+                                                                               
                 0);
+               return 1;
+       }
        return 0;
 }
 
@@ -821,8 +829,13 @@
                                                                  
ILEngineStackItem *returnItem)
 {
        ILJITCoder *jitCoder = _ILCoderToILJITCoder(coder);
-       _ILJitStackItemNew(stackItem);
+       int argCount = _ILJitStackNumArgs(info);
        ILJitValue ftnPtr;
+       ILJitType callSignature = 0;
+       int destroyCallSignature = 0;
+       ILJitValue jitParams[argCount + 1];
+       ILJitValue returnValue;
+       _ILJitStackItemNew(stackItem);
 
 #if !defined(IL_CONFIG_REDUCE_CODE) && !defined(IL_WITHOUT_TOOLS)
        if (jitCoder->flags & IL_CODER_FLAG_STATS)
@@ -842,10 +855,85 @@
                                                                  
ILRuntimeMethodToVtablePointer,
                                                                  
_ILJitSignature_ILRuntimeMethodToVtablePointer,
                                                                  
&(_ILJitStackItemValue(stackItem)), 1, 0);
+#else
+       /* The function pointer on the stack is the vtable pointer. */
+       ftnPtr = _ILJitStackItemValue(stackItem);
+#endif
+
+#ifdef IL_JIT_THREAD_IN_SIGNATURE
+       jitParams[0] = _ILJitCoderGetThread(jitCoder);
+       destroyCallSignature = _ILJitFillArguments(jitCoder,
+                                                                               
           0,
+                                                                               
           info,
+                                                                               
           &(jitParams[1]),
+                                                                               
           1,
+                                                                               
           &callSignature);
+
+#else
+       destroyCallSignature = _ILJitFillArguments(jitCoder,
+                                                                               
           0,
+                                                                               
           info,
+                                                                               
           &(jitParams[0]),
+                                                                               
           0,
+                                                                               
           &callSignature);
 #endif
 
-       /* TODO: build a signature from the call signature (info) and call the 
*/
-       /* method. */
+#if !defined(IL_CONFIG_REDUCE_CODE) && !defined(IL_WITHOUT_TOOLS) && 
defined(_IL_JIT_ENABLE_DEBUG)
+       if (jitCoder->flags & IL_CODER_FLAG_STATS)
+       {
+               ILMutexLock(globalTraceMutex);
+               fprintf(stdout,
+                       "CallInfos: StackTop: %i, ArgCount: %i, Signature 
argCount: %i\n",
+                       jitCoder->stackTop,
+                       argCount,
+                       jit_type_num_params(callSignature));
+               ILMutexUnlock(globalTraceMutex);
+       }
+#endif
+       if(info->tailCall == 1)
+       {
+       #ifdef IL_JIT_THREAD_IN_SIGNATURE
+               returnValue = 
jit_insn_call_indirect_vtable(jitCoder->jitFunction,
+                                                                               
                        ftnPtr,
+                                                                               
                        callSignature,
+                                                                               
                        jitParams,
+                                                                               
                        argCount + 1,
+                                                                               
                        JIT_CALL_TAIL);
+       #else
+               returnValue = 
jit_insn_call_indirect_vtable(jitCoder->jitFunction,
+                                                                               
                        ftnPtr,
+                                                                               
                        callSignature,
+                                                                               
                        jitParams,
+                                                                               
                        argCount,
+                                                                               
                        JIT_CALL_TAIL);
+       #endif
+       }
+       else
+       {
+       #ifdef IL_JIT_THREAD_IN_SIGNATURE
+               returnValue = 
jit_insn_call_indirect_vtable(jitCoder->jitFunction,
+                                                                               
                        ftnPtr,
+                                                                               
                        callSignature,
+                                                                               
                        jitParams,
+                                                                               
                        argCount + 1,
+                                                                               
                        0);
+       #else
+               returnValue = 
jit_insn_call_indirect_vtable(jitCoder->jitFunction,
+                                                                               
                        ftnPtr,
+                                                                               
                        callSignature,
+                                                                               
                        jitParams,
+                                                                               
                        argCount,
+                                                                               
                        0);
+       #endif
+       }
+       if(returnItem->engineType != ILEngineType_Invalid)
+       {
+               _ILJitStackPushValue(jitCoder, returnValue);
+       }
+       if(destroyCallSignature && callSignature)
+       {
+               jit_type_free(callSignature);
+       }
 }
 
 static void JITCoder_CallCtor(ILCoder *coder, ILCoderMethodInfo *info,
@@ -1043,7 +1131,7 @@
 {
 
        ILJITCoder *jitCoder = _ILCoderToILJITCoder(coder);
-       int argCount = info->numBaseArgs + info->numVarArgs;
+       int argCount = _ILJitStackNumArgs(info);
        ILJitFunction func = ILJitFunctionFromILMethod(methodInfo);
        ILJitType  signature;
        int destroyCallSignature = 0;
@@ -1153,7 +1241,7 @@
                                                                   ILMethod 
*methodInfo)
 {
        ILJITCoder *jitCoder = _ILCoderToILJITCoder(coder);
-       int argCount = info->numBaseArgs + info->numVarArgs;
+       int argCount = _ILJitStackNumArgs(info);
        ILJitType  signature = 0;
        int destroyCallSignature = 0;
        ILJitValue jitParams[argCount + 1];

Index: engine/jitc_conv.c
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnet/engine/jitc_conv.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -b -r1.6 -r1.7
--- engine/jitc_conv.c  10 Oct 2006 17:10:45 -0000      1.6
+++ engine/jitc_conv.c  15 Oct 2006 09:32:28 -0000      1.7
@@ -27,10 +27,10 @@
 {
        ILJITCoder *jitCoder = _ILCoderToILJITCoder(coder);
        ILJitValue value = 0;
-       _ILJitStackItemNew(stackItem);
+       ILJitStackItem *stackItem;
 
-       /* Pop the topmost item from the stack. */
-       _ILJitStackPop(jitCoder, stackItem);
+       /* Get the topmost item on the stack. */
+       stackItem = _ILJitStackItemGetTop(jitCoder, 0);
 
        /* Determine how to convert the value */
        switch(opcode)
@@ -39,7 +39,7 @@
                {
                        /* Convert to "int8" */
                        value = 
_ILJitValueConvertExplicit(jitCoder->jitFunction,
-                                                                               
           _ILJitStackItemValue(stackItem),
+                                                                               
           _ILJitStackItemValue(*stackItem),
                                                                                
           _IL_JIT_TYPE_SBYTE,
                                                                                
           0, 0);
                }
@@ -49,43 +49,47 @@
                {
                        /* Convert to "int16" */
                        value = 
_ILJitValueConvertExplicit(jitCoder->jitFunction,
-                                                                               
           _ILJitStackItemValue(stackItem),
+                                                                               
           _ILJitStackItemValue(*stackItem),
                                                                                
           _IL_JIT_TYPE_INT16,
                                                                                
           0, 0);
                }
                break;
 
                case IL_OP_CONV_I4:
-       #ifdef IL_NATIVE_INT32
-               case IL_OP_CONV_I:
-       #endif
                {
                        /* Convert to "int32" */
                        value = 
_ILJitValueConvertExplicit(jitCoder->jitFunction,
-                                                                               
           _ILJitStackItemValue(stackItem),
+                                                                               
           _ILJitStackItemValue(*stackItem),
                                                                                
           _IL_JIT_TYPE_INT32,
                                                                                
           0, 0);
                }
                break;
 
                case IL_OP_CONV_I8:
-       #ifdef IL_NATIVE_INT64
-               case IL_OP_CONV_I:
-       #endif
                {
                        /* Convert to "int64" */
                        value = 
_ILJitValueConvertExplicit(jitCoder->jitFunction,
-                                                                               
           _ILJitStackItemValue(stackItem),
+                                                                               
           _ILJitStackItemValue(*stackItem),
                                                                                
           _IL_JIT_TYPE_INT64,
                                                                                
           0, 0);
                }
                break;
 
+               case IL_OP_CONV_I:
+               {
+                       /* Convert to "native int" */
+                       value = 
_ILJitValueConvertExplicit(jitCoder->jitFunction,
+                                                                               
           _ILJitStackItemValue(*stackItem),
+                                                                               
           _IL_JIT_TYPE_NINT,
+                                                                               
           0, 0);
+               }
+               break;
+
                case IL_OP_CONV_R4:
                {
                        /* Convert to "float32" */
                        value = 
_ILJitValueConvertExplicit(jitCoder->jitFunction,
-                                                                               
           _ILJitStackItemValue(stackItem),
+                                                                               
           _ILJitStackItemValue(*stackItem),
                                                                                
           _IL_JIT_TYPE_SINGLE,
                                                                                
           0, 0);
                }
@@ -95,7 +99,7 @@
                {
                        /* Convert to "float64" */
                        value = 
_ILJitValueConvertExplicit(jitCoder->jitFunction,
-                                                                               
           _ILJitStackItemValue(stackItem),
+                                                                               
           _ILJitStackItemValue(*stackItem),
                                                                                
           _IL_JIT_TYPE_DOUBLE,
                                                                                
           0, 0);
                }
@@ -105,7 +109,7 @@
                {
                        /* Convert to "unsigned int8" */
                        value = 
_ILJitValueConvertExplicit(jitCoder->jitFunction,
-                                                                               
           _ILJitStackItemValue(stackItem),
+                                                                               
           _ILJitStackItemValue(*stackItem),
                                                                                
           _IL_JIT_TYPE_BYTE,
                                                                                
           0, 0);
                }
@@ -115,43 +119,47 @@
                {
                        /* Convert to "unsigned int16" */
                        value = 
_ILJitValueConvertExplicit(jitCoder->jitFunction,
-                                                                               
           _ILJitStackItemValue(stackItem),
+                                                                               
           _ILJitStackItemValue(*stackItem),
                                                                                
           _IL_JIT_TYPE_UINT16,
                                                                                
           0, 0);
                }
                break;
 
                case IL_OP_CONV_U4:
-       #ifdef IL_NATIVE_INT32
-               case IL_OP_CONV_U:
-       #endif
                {
                        /* Convert to "unsigned int32" */
                        value = 
_ILJitValueConvertExplicit(jitCoder->jitFunction,
-                                                                               
           _ILJitStackItemValue(stackItem),
+                                                                               
           _ILJitStackItemValue(*stackItem),
                                                                                
           _IL_JIT_TYPE_UINT32,
                                                                                
           0, 0);
                }
                break;
 
                case IL_OP_CONV_U8:
-       #ifdef IL_NATIVE_INT64
-               case IL_OP_CONV_U:
-       #endif
                {
                        /* Convert to "unsigned int64" */
                        value = 
_ILJitValueConvertExplicit(jitCoder->jitFunction,
-                                                                               
           _ILJitStackItemValue(stackItem),
+                                                                               
           _ILJitStackItemValue(*stackItem),
                                                                                
           _IL_JIT_TYPE_UINT64,
                                                                                
           0, 0);
                }
                break;
 
+               case IL_OP_CONV_U:
+               {
+                       /* Convert to "unsigned native int" */
+                       value = 
_ILJitValueConvertExplicit(jitCoder->jitFunction,
+                                                                               
           _ILJitStackItemValue(*stackItem),
+                                                                               
           _IL_JIT_TYPE_NUINT,
+                                                                               
           0, 0);
+               }
+               break;
+
                case IL_OP_CONV_R_UN:
                {
                        /* Convert to "native float" with unsigned input */
                        value = 
_ILJitValueConvertExplicit(jitCoder->jitFunction,
-                                                                               
           _ILJitStackItemValue(stackItem),
+                                                                               
           _ILJitStackItemValue(*stackItem),
                                                                                
           _IL_JIT_TYPE_NFLOAT,
                                                                                
           1, 0);
                }
@@ -161,7 +169,7 @@
                {
                        /* Convert to "int8" with unsigned input and overflow */
                        value = 
_ILJitValueConvertExplicit(jitCoder->jitFunction,
-                                                                               
           _ILJitStackItemValue(stackItem),
+                                                                               
           _ILJitStackItemValue(*stackItem),
                                                                                
           _IL_JIT_TYPE_SBYTE,
                                                                                
           1, 1);
                }
@@ -171,43 +179,47 @@
                {
                        /* Convert to "int16" with unsigned input and overflow 
*/
                        value = 
_ILJitValueConvertExplicit(jitCoder->jitFunction,
-                                                                               
           _ILJitStackItemValue(stackItem),
+                                                                               
           _ILJitStackItemValue(*stackItem),
                                                                                
           _IL_JIT_TYPE_INT16,
                                                                                
           1, 1);
                }
                break;
 
                case IL_OP_CONV_OVF_I4_UN:
-       #ifdef IL_NATIVE_INT32
-               case IL_OP_CONV_OVF_I_UN:
-       #endif
                {
                        /* Convert to "int32" with unsigned input and overflow 
*/
                        value = 
_ILJitValueConvertExplicit(jitCoder->jitFunction,
-                                                                               
           _ILJitStackItemValue(stackItem),
+                                                                               
           _ILJitStackItemValue(*stackItem),
                                                                                
           _IL_JIT_TYPE_INT32,
                                                                                
           1, 1);
                }
                break;
 
                case IL_OP_CONV_OVF_I8_UN:
-       #ifdef IL_NATIVE_INT64
-               case IL_OP_CONV_OVF_I_UN:
-       #endif
                {
                        /* Convert to "int64" with unsigned input and overflow 
*/
                        value = 
_ILJitValueConvertExplicit(jitCoder->jitFunction,
-                                                                               
           _ILJitStackItemValue(stackItem),
+                                                                               
           _ILJitStackItemValue(*stackItem),
                                                                                
           _IL_JIT_TYPE_INT64,
                                                                                
           1, 1);
                }
                break;
 
+               case IL_OP_CONV_OVF_I_UN:
+               {
+                       /* Convert to "native int" with unsigned input and 
overflow */
+                       value = 
_ILJitValueConvertExplicit(jitCoder->jitFunction,
+                                                                               
           _ILJitStackItemValue(*stackItem),
+                                                                               
           _IL_JIT_TYPE_NINT,
+                                                                               
           1, 1);
+               }
+               break;
+
                case IL_OP_CONV_OVF_U1_UN:
                {
                        /* Convert to "unsigned int8" with unsigned input and 
overflow */
                        value = 
_ILJitValueConvertExplicit(jitCoder->jitFunction,
-                                                                               
           _ILJitStackItemValue(stackItem),
+                                                                               
           _ILJitStackItemValue(*stackItem),
                                                                                
           _IL_JIT_TYPE_BYTE,
                                                                                
           1, 1);
                }
@@ -217,43 +229,48 @@
                {
                        /* Convert to "unsigned int16" with unsigned input and 
overflow */
                        value = 
_ILJitValueConvertExplicit(jitCoder->jitFunction,
-                                                                               
           _ILJitStackItemValue(stackItem),
+                                                                               
           _ILJitStackItemValue(*stackItem),
                                                                                
           _IL_JIT_TYPE_UINT16,
                                                                                
           1, 1);
                }
                break;
 
                case IL_OP_CONV_OVF_U4_UN:
-       #ifdef IL_NATIVE_INT32
-               case IL_OP_CONV_OVF_U_UN:
-       #endif
                {
                        /* Convert to "unsigned int32" with unsigned input and 
overflow */
                        value = 
_ILJitValueConvertExplicit(jitCoder->jitFunction,
-                                                                               
           _ILJitStackItemValue(stackItem),
+                                                                               
           _ILJitStackItemValue(*stackItem),
                                                                                
           _IL_JIT_TYPE_UINT32,
                                                                                
           1, 1);
                }
                break;
 
                case IL_OP_CONV_OVF_U8_UN:
-       #ifdef IL_NATIVE_INT64
-               case IL_OP_CONV_OVF_U_UN:
-       #endif
                {
                        /* Convert to "unsigned int64" with unsigned input and 
overflow */
                        value = 
_ILJitValueConvertExplicit(jitCoder->jitFunction,
-                                                                               
           _ILJitStackItemValue(stackItem),
+                                                                               
           _ILJitStackItemValue(*stackItem),
                                                                                
           _IL_JIT_TYPE_UINT64,
                                                                                
           1, 1);
                }
                break;
 
+               case IL_OP_CONV_OVF_U_UN:
+               {
+                       /* Convert to "unsigned native int" with unsigned input 
and overflow */
+                       value = 
_ILJitValueConvertExplicit(jitCoder->jitFunction,
+                                                                               
           _ILJitStackItemValue(*stackItem),
+                                                                               
           _IL_JIT_TYPE_NUINT,
+                                                                               
           1, 1);
+
+               }
+               break;
+
                case IL_OP_CONV_OVF_I1:
                {
                        /* Convert to "int8" with signed input and overflow */
                        value = 
_ILJitValueConvertExplicit(jitCoder->jitFunction,
-                                                                               
           _ILJitStackItemValue(stackItem),
+                                                                               
           _ILJitStackItemValue(*stackItem),
                                                                                
           _IL_JIT_TYPE_SBYTE,
                                                                                
           0, 1);
                }
@@ -263,7 +280,7 @@
                {
                        /* Convert to "unsigned int8" with signed input and 
overflow */
                        value = 
_ILJitValueConvertExplicit(jitCoder->jitFunction,
-                                                                               
           _ILJitStackItemValue(stackItem),
+                                                                               
           _ILJitStackItemValue(*stackItem),
                                                                                
           _IL_JIT_TYPE_BYTE,
                                                                                
           0, 1);
                }
@@ -273,7 +290,7 @@
                {
                        /* Convert to "int16" with signed input and overflow */
                        value = 
_ILJitValueConvertExplicit(jitCoder->jitFunction,
-                                                                               
           _ILJitStackItemValue(stackItem),
+                                                                               
           _ILJitStackItemValue(*stackItem),
                                                                                
           _IL_JIT_TYPE_INT16,
                                                                                
           0, 1);
                }
@@ -283,65 +300,73 @@
                {
                        /* Convert to "unsigned int16" with signed input and 
overflow */
                        value = 
_ILJitValueConvertExplicit(jitCoder->jitFunction,
-                                                                               
           _ILJitStackItemValue(stackItem),
+                                                                               
           _ILJitStackItemValue(*stackItem),
                                                                                
           _IL_JIT_TYPE_UINT16,
                                                                                
           0, 1);
                }
                break;
 
                case IL_OP_CONV_OVF_I4:
-       #ifdef IL_NATIVE_INT32
-               case IL_OP_CONV_OVF_I:
-       #endif
                {
                        /* Convert to "int32" with signed input and overflow */
                        value = 
_ILJitValueConvertExplicit(jitCoder->jitFunction,
-                                                                               
           _ILJitStackItemValue(stackItem),
+                                                                               
           _ILJitStackItemValue(*stackItem),
                                                                                
           _IL_JIT_TYPE_INT32,
                                                                                
           0, 1);
                }
                break;
 
                case IL_OP_CONV_OVF_U4:
-       #ifdef IL_NATIVE_INT32
-               case IL_OP_CONV_OVF_U:
-       #endif
                {
                        /* Convert to "unsigned int32" with signed input and 
overflow */
                        value = 
_ILJitValueConvertExplicit(jitCoder->jitFunction,
-                                                                               
           _ILJitStackItemValue(stackItem),
+                                                                               
           _ILJitStackItemValue(*stackItem),
                                                                                
           _IL_JIT_TYPE_UINT32,
                                                                                
           0, 1);
                }
                break;
 
-               case IL_OP_CONV_OVF_I8:
-       #ifdef IL_NATIVE_INT64
                case IL_OP_CONV_OVF_I:
-       #endif
+               {
+                       /* Convert to "native int" with signed input and 
overflow */
+                       value = 
_ILJitValueConvertExplicit(jitCoder->jitFunction,
+                                                                               
           _ILJitStackItemValue(*stackItem),
+                                                                               
           _IL_JIT_TYPE_NINT,
+                                                                               
           0, 1);
+               }
+               break;
+
+               case IL_OP_CONV_OVF_U:
+               {
+                       /* Convert to "unsigned native int" with signed input 
and overflow */
+                       value = 
_ILJitValueConvertExplicit(jitCoder->jitFunction,
+                                                                               
           _ILJitStackItemValue(*stackItem),
+                                                                               
           _IL_JIT_TYPE_NUINT,
+                                                                               
           0, 1);
+               }
+               break;
+
+               case IL_OP_CONV_OVF_I8:
                {
                        /* Convert to "int64" with signed input and overflow */
                        value = 
_ILJitValueConvertExplicit(jitCoder->jitFunction,
-                                                                               
           _ILJitStackItemValue(stackItem),
+                                                                               
           _ILJitStackItemValue(*stackItem),
                                                                                
           _IL_JIT_TYPE_INT64,
                                                                                
           0, 1);
                }
                break;
 
                case IL_OP_CONV_OVF_U8:
-       #ifdef IL_NATIVE_INT64
-               case IL_OP_CONV_OVF_U:
-       #endif
                {
                        /* Convert to "unsigned int64" with signed input and 
overflow */
                        value = 
_ILJitValueConvertExplicit(jitCoder->jitFunction,
-                                                                               
           _ILJitStackItemValue(stackItem),
+                                                                               
           _ILJitStackItemValue(*stackItem),
                                                                                
           _IL_JIT_TYPE_UINT64,
                                                                                
           0, 1);
                }
                break;
        }
-       _ILJitStackPushValue(jitCoder, value);
+       _ILJitStackItemSetValue(*stackItem, value);
 }
 
 /*

Index: engine/jitc_var.c
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnet/engine/jitc_var.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -b -r1.9 -r1.10
--- engine/jitc_var.c   10 Oct 2006 17:10:45 -0000      1.9
+++ engine/jitc_var.c   15 Oct 2006 09:32:28 -0000      1.10
@@ -113,6 +113,17 @@
 {
        ILJITCoder *jitCoder = _ILCoderToILJITCoder(coder);
 
+#if !defined(IL_CONFIG_REDUCE_CODE) && !defined(IL_WITHOUT_TOOLS)
+       if (jitCoder->flags & IL_CODER_FLAG_STATS)
+       {
+               ILMutexLock(globalTraceMutex);
+               fprintf(stdout,
+                       "Address of Arg: %i\n", 
+                       argNum);
+               ILMutexUnlock(globalTraceMutex);
+       }
+#endif
+
        _ILJitStackPushAddressOfArg(jitCoder, argNum);
 }
 
@@ -123,6 +134,17 @@
 {
        ILJITCoder *jitCoder = _ILCoderToILJITCoder(coder);
 
+#if !defined(IL_CONFIG_REDUCE_CODE) && !defined(IL_WITHOUT_TOOLS)
+       if (jitCoder->flags & IL_CODER_FLAG_STATS)
+       {
+               ILMutexLock(globalTraceMutex);
+               fprintf(stdout,
+                       "Address of Local: %i\n", 
+                       localNum);
+               ILMutexUnlock(globalTraceMutex);
+       }
+#endif
+
        _ILJitStackPushAddressOfLocal(jitCoder, localNum);
 }
 

Index: engine/verify_call.c
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnet/engine/verify_call.c,v
retrieving revision 1.53
retrieving revision 1.54
diff -u -b -r1.53 -r1.54
--- engine/verify_call.c        3 Dec 2005 18:28:38 -0000       1.53
+++ engine/verify_call.c        15 Oct 2006 09:32:28 -0000      1.54
@@ -964,6 +964,7 @@
        callInfo->numVarArgs = totalParams - numParams;
        callInfo->hasParamArray = 0;
        callInfo->tailCall = tailCall;
+       callInfo->signature = signature;
 
 #ifdef IL_CONFIG_VARARGS
        /* Convert the vararg parameters into an "Object[]" array */

Index: include/il_coder.h
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnet/include/il_coder.h,v
retrieving revision 1.50
retrieving revision 1.51
diff -u -b -r1.50 -r1.51
--- include/il_coder.h  23 Aug 2005 10:45:53 -0000      1.50
+++ include/il_coder.h  15 Oct 2006 09:32:28 -0000      1.51
@@ -90,6 +90,7 @@
        ILUInt32 numVarArgs;
        int hasParamArray;
        int tailCall;
+       ILType *signature;
 
 } ILCoderMethodInfo;
 




reply via email to

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