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