[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[dotgnu-pnet-commits] pnet ChangeLog engine/jitc_delegate.c engine/ji...
From: |
Klaus Treichel |
Subject: |
[dotgnu-pnet-commits] pnet ChangeLog engine/jitc_delegate.c engine/ji... |
Date: |
Sun, 04 Jun 2006 15:56:51 +0000 |
CVSROOT: /sources/dotgnu-pnet
Module name: pnet
Changes by: Klaus Treichel <ktreichel> 06/06/04 15:56:51
Modified files:
. : ChangeLog
engine : jitc_delegate.c jitc_obj.c jitc_ptr.c
Log message:
Ã6-06-04 Klaus Treichel <address@hidden>
* engine/jitc_delegate.c: Fix a dumb bug in
_ILJitDelegateInvokeCodeGen.
* engine/jitc_obj.c: Add support for RVA static fields and
pinvoke static
fields. Replace jit_insn_add_relative with jit_insn_add.
* engine/jitc_ptr.c: Replace jit_insn_add_relative with
jit_insn_add.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/pnet/ChangeLog?cvsroot=dotgnu-pnet&r1=1.3320&r2=1.3321
http://cvs.savannah.gnu.org/viewcvs/pnet/engine/jitc_delegate.c?cvsroot=dotgnu-pnet&r1=1.3&r2=1.4
http://cvs.savannah.gnu.org/viewcvs/pnet/engine/jitc_obj.c?cvsroot=dotgnu-pnet&r1=1.18&r2=1.19
http://cvs.savannah.gnu.org/viewcvs/pnet/engine/jitc_ptr.c?cvsroot=dotgnu-pnet&r1=1.10&r2=1.11
Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/dotgnu-pnet/pnet/ChangeLog,v
retrieving revision 1.3320
retrieving revision 1.3321
diff -u -b -r1.3320 -r1.3321
--- ChangeLog 3 Jun 2006 11:00:40 -0000 1.3320
+++ ChangeLog 4 Jun 2006 15:56:51 -0000 1.3321
@@ -1,3 +1,12 @@
+2006-06-04 Klaus Treichel <address@hidden>
+
+ * engine/jitc_delegate.c: Fix a dumb bug in _ILJitDelegateInvokeCodeGen.
+
+ * engine/jitc_obj.c: Add support for RVA static fields and pinvoke
static
+ fields. Replace jit_insn_add_relative with jit_insn_add.
+
+ * engine/jitc_ptr.c: Replace jit_insn_add_relative with jit_insn_add.
+
2006-06-03 Klaus Treichel <address@hidden>
* engine/jitc.c: Use the on demand compilers for DelegateBeginInvoke and
Index: engine/jitc_delegate.c
===================================================================
RCS file: /sources/dotgnu-pnet/pnet/engine/jitc_delegate.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- engine/jitc_delegate.c 3 Jun 2006 11:00:40 -0000 1.3
+++ engine/jitc_delegate.c 4 Jun 2006 15:56:51 -0000 1.4
@@ -311,7 +311,6 @@
{
ILType *returnType = ILTypeGetParam(endInvokeSignature, 0); /* 0 ==
return type */
-
returnType = ILTypeGetEnumType(returnType);
if(ILType_IsPrimitive(returnType) || ILType_IsValueType(returnType))
@@ -322,8 +321,12 @@
{
return 0;
}
+
+ if(jitType != _IL_JIT_TYPE_VOID)
+ {
jit_insn_return_ptr(func, returnObject, jitType);
}
+ }
else if (ILType_IsClass(returnType))
{
jit_insn_return(func, returnObject);
@@ -414,7 +417,7 @@
jit_insn_label(func, &noTarget);
#ifdef IL_JIT_THREAD_IN_SIGNATURE
types[0] = jit_type_get_param(signature, 0);
- args[0] = thread;
+ invokeArgs[0] = thread;
#endif
for(current = 0; current < argCount; ++current)
{
Index: engine/jitc_obj.c
===================================================================
RCS file: /sources/dotgnu-pnet/pnet/engine/jitc_obj.c,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -b -r1.18 -r1.19
--- engine/jitc_obj.c 3 Jun 2006 11:00:40 -0000 1.18
+++ engine/jitc_obj.c 4 Jun 2006 15:56:51 -0000 1.19
@@ -59,6 +59,79 @@
(jit_nint)classStaticData);
}
+#ifdef IL_CONFIG_PINVOKE
+
+/*
+ * Get the address of a PInvoke-imported field.
+ */
+static ILJitValue _ILJitGetPInvokeFieldAddress(ILJitFunction func,
+
ILField *field,
+
ILPInvoke *pinvoke)
+{
+ char *name;
+ void *handle;
+ void *symbol;
+ const char *symbolName;
+ ILJitValue ptr;
+
+ /* Resolve the module */
+ name = ILPInvokeResolveModule(pinvoke);
+ if(!name)
+ {
+ ptr = jit_value_create_nint_constant(func, _IL_JIT_TYPE_VPTR,
0);
+ jit_insn_check_null(func, ptr);
+ return ptr;
+ }
+
+ /* Load the module into memory */
+ handle = ILDynLibraryOpen(name);
+ ILFree(name);
+ if(!handle)
+ {
+ ptr = jit_value_create_nint_constant(func, _IL_JIT_TYPE_VPTR,
0);
+ jit_insn_check_null(func, ptr);
+ return ptr;
+ }
+
+ /* Resolve the symbol and resolve its address */
+ symbolName = ILPInvoke_Alias(pinvoke);
+ if(!symbolName)
+ {
+ symbolName = ILField_Name(field);
+ }
+ symbol = ILDynLibraryGetSymbol(handle, symbolName);
+
+ /* Check if the symbol could be resolved. */
+ if(!symbol)
+ {
+ ptr = jit_value_create_nint_constant(func, _IL_JIT_TYPE_VPTR,
0);
+ jit_insn_check_null(func, ptr);
+ return ptr;
+ }
+ ptr = jit_value_create_nint_constant(func,
+
_IL_JIT_TYPE_VPTR,
+
(jit_nint)symbol);
+ return ptr;
+}
+
+#endif /* IL_CONFIG_PINVOKE */
+
+/*
+ * Get a ILJitValue with the address of a RVA static field.
+ */
+static ILJitValue _ILJitGetRVAAddress(ILJitFunction func,
+
ILField *field)
+{
+ ILFieldRVA *fieldRVA = ILFieldRVAGetFromOwner(field);
+ ILUInt32 rva = ILFieldRVAGetRVA(fieldRVA);
+ /* Eventually the address should be computed on runtime. */
+ void *ptr = ILImageMapAddress(ILProgramItem_Image(field), rva);
+
+ return jit_value_create_nint_constant(func,
+
_IL_JIT_TYPE_VPTR,
+
(jit_nint)ptr);
+}
+
/*
* Get an ILJitValue with a pointer to the thread static slot.
*/
@@ -125,13 +198,17 @@
static ILJitValue _ILJitLoadFieldAddress(ILJITCoder *coder, ILJitValue base,
ILUInt32 offset, int mayBeNull)
{
+ ILJitValue jitOffset =
jit_value_create_nint_constant(coder->jitFunction,
+
_IL_JIT_TYPE_UINT32,
+
(jit_nint)offset);
+
if(mayBeNull)
{
_ILJitCheckNull(coder, base);
}
if(offset != 0)
{
- return jit_insn_add_relative(coder->jitFunction, base, offset);
+ return jit_insn_add(coder->jitFunction, base, jitOffset);
}
else
{
@@ -294,6 +371,34 @@
{
ILJITCoder *jitCoder = _ILCoderToILJITCoder(coder);
+#ifdef IL_CONFIG_PINVOKE
+ ILPInvoke *pinvoke;
+ if((field->member.attributes & IL_META_FIELDDEF_PINVOKE_IMPL) != 0 &&
+ (pinvoke = ILPInvokeFindField(field)) != 0)
+ {
+ /* Field that is imported via PInvoke */
+ ILJitValue ptr =
_ILJitGetPInvokeFieldAddress(jitCoder->jitFunction,
+
field,
+
pinvoke);
+
+ #if !defined(IL_CONFIG_REDUCE_CODE) &&
!defined(IL_WITHOUT_TOOLS)
+ if (jitCoder->flags & IL_CODER_FLAG_STATS)
+ {
+ ILMutexLock(globalTraceMutex);
+ fprintf(stdout,
+ "LoadStaticPinvokeField: %s.%s\n",
+ ILClass_Name(ILField_Owner(field)),
+ ILField_Name(field));
+ ILMutexUnlock(globalTraceMutex);
+ }
+ #endif
+ jitCoder->jitStack[jitCoder->stackTop] =
+ _ILJitLoadField(jitCoder, ptr, fieldType, 0, 0);
+ }
+ else
+#endif
+ if((field->member.attributes & IL_META_FIELDDEF_HAS_FIELD_RVA) == 0)
+ {
/* Output a call to the static constructor */
_ILJitCallStaticConstructor(jitCoder, ILField_Owner(field), 1);
@@ -336,6 +441,25 @@
jitCoder->jitStack[jitCoder->stackTop] =
_ILJitLoadField(jitCoder, ptr, fieldType, 0, 0);
}
+ }
+ else
+ {
+ ILJitValue ptr = _ILJitGetRVAAddress(jitCoder->jitFunction,
field);
+
+ #if !defined(IL_CONFIG_REDUCE_CODE) &&
!defined(IL_WITHOUT_TOOLS)
+ if (jitCoder->flags & IL_CODER_FLAG_STATS)
+ {
+ ILMutexLock(globalTraceMutex);
+ fprintf(stdout,
+ "LoadRVAStaticField: %s.%s\n",
+ ILClass_Name(ILField_Owner(field)),
+ ILField_Name(field));
+ ILMutexUnlock(globalTraceMutex);
+ }
+ #endif
+ jitCoder->jitStack[jitCoder->stackTop] =
+ _ILJitLoadField(jitCoder, ptr, fieldType, 0, 0);
+ }
JITC_ADJUST(jitCoder, 1);
}
@@ -367,9 +491,41 @@
{
ILJITCoder *jitCoder = _ILCoderToILJITCoder(coder);
+#ifdef IL_CONFIG_PINVOKE
+ ILPInvoke *pinvoke;
+ if((field->member.attributes & IL_META_FIELDDEF_PINVOKE_IMPL) != 0 &&
+ (pinvoke = ILPInvokeFindField(field)) != 0)
+ {
+ /* Field that is imported via PInvoke */
+ ILJitValue ptr =
_ILJitGetPInvokeFieldAddress(jitCoder->jitFunction,
+
field,
+
pinvoke);
+
+ #if !defined(IL_CONFIG_REDUCE_CODE) &&
!defined(IL_WITHOUT_TOOLS)
+ if (jitCoder->flags & IL_CODER_FLAG_STATS)
+ {
+ ILMutexLock(globalTraceMutex);
+ fprintf(stdout,
+ "LoadStaticPivokeFieldAddr: %s.%s\n",
+ ILClass_Name(ILField_Owner(field)),
+ ILField_Name(field));
+ ILMutexUnlock(globalTraceMutex);
+ }
+ #endif
+ jitCoder->jitStack[jitCoder->stackTop] =
+ _ILJitLoadFieldAddress(jitCoder, ptr, 0, 0);
+
+ JITC_ADJUST(jitCoder, 1);
+ return;
+ }
+#endif
+
/* Output a call to the static constructor */
_ILJitCallStaticConstructor(jitCoder, ILField_Owner(field), 1);
+ /* Regular or RVA field? */
+ if((field->member.attributes & IL_META_FIELDDEF_HAS_FIELD_RVA) == 0)
+ {
/* Regular or thread-static field? */
if(!ILFieldIsThreadStatic(field))
{
@@ -409,6 +565,25 @@
jitCoder->jitStack[jitCoder->stackTop] =
_ILJitLoadFieldAddress(jitCoder, ptr, 0, 0);
}
+ }
+ else
+ {
+ ILJitValue ptr = _ILJitGetRVAAddress(jitCoder->jitFunction,
field);
+
+ #if !defined(IL_CONFIG_REDUCE_CODE) &&
!defined(IL_WITHOUT_TOOLS)
+ if (jitCoder->flags & IL_CODER_FLAG_STATS)
+ {
+ ILMutexLock(globalTraceMutex);
+ fprintf(stdout,
+ "LoadRVAStaticFieldAddr: %s.%s\n",
+ ILClass_Name(ILField_Owner(field)),
+ ILField_Name(field));
+ ILMutexUnlock(globalTraceMutex);
+ }
+ #endif
+ jitCoder->jitStack[jitCoder->stackTop] =
+ _ILJitLoadFieldAddress(jitCoder, ptr, 0, 0);
+ }
JITC_ADJUST(jitCoder, 1);
}
@@ -441,10 +616,39 @@
{
ILJITCoder *jitCoder = _ILCoderToILJITCoder(coder);
ILJitValue value = jitCoder->jitStack[jitCoder->stackTop - 1];
+#ifdef IL_CONFIG_PINVOKE
+ ILPInvoke *pinvoke;
+#endif
/* Output a call to the static constructor */
_ILJitCallStaticConstructor(jitCoder, ILField_Owner(field), 1);
+#ifdef IL_CONFIG_PINVOKE
+ if((field->member.attributes & IL_META_FIELDDEF_PINVOKE_IMPL) != 0 &&
+ (pinvoke = ILPInvokeFindField(field)) != 0)
+ {
+ /* Field that is imported via PInvoke */
+ ILJitValue ptr =
_ILJitGetPInvokeFieldAddress(jitCoder->jitFunction,
+
field,
+
pinvoke);
+
+ #if !defined(IL_CONFIG_REDUCE_CODE) &&
!defined(IL_WITHOUT_TOOLS)
+ if (jitCoder->flags & IL_CODER_FLAG_STATS)
+ {
+ ILMutexLock(globalTraceMutex);
+ fprintf(stdout,
+ "StoreStaticPinvokeField: %s.%s\n",
+ ILClass_Name(ILField_Owner(field)),
+ ILField_Name(field));
+ ILMutexUnlock(globalTraceMutex);
+ }
+ #endif
+ _ILJitStoreField(jitCoder, ptr, value, fieldType, 0, 0);
+ }
+ else
+#endif
+ if((field->member.attributes & IL_META_FIELDDEF_HAS_FIELD_RVA) == 0)
+ {
/* Regular or thread-static field? */
if(!ILFieldIsThreadStatic(field))
{
@@ -482,6 +686,24 @@
#endif
_ILJitStoreField(jitCoder, ptr, value, fieldType, 0, 0);
}
+ }
+ else
+ {
+ ILJitValue ptr = _ILJitGetRVAAddress(jitCoder->jitFunction,
field);
+
+ #if !defined(IL_CONFIG_REDUCE_CODE) &&
!defined(IL_WITHOUT_TOOLS)
+ if (jitCoder->flags & IL_CODER_FLAG_STATS)
+ {
+ ILMutexLock(globalTraceMutex);
+ fprintf(stdout,
+ "StoreRVAStaticField: %s.%s\n",
+ ILClass_Name(ILField_Owner(field)),
+ ILField_Name(field));
+ ILMutexUnlock(globalTraceMutex);
+ }
+ #endif
+ _ILJitStoreField(jitCoder, ptr, value, fieldType, 0, 0);
+ }
JITC_ADJUST(jitCoder, -1);
}
Index: engine/jitc_ptr.c
===================================================================
RCS file: /sources/dotgnu-pnet/pnet/engine/jitc_ptr.c,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -b -r1.10 -r1.11
--- engine/jitc_ptr.c 1 May 2006 17:30:50 -0000 1.10
+++ engine/jitc_ptr.c 4 Jun 2006 15:56:51 -0000 1.11
@@ -25,7 +25,11 @@
*/
static ILJitValue GetArrayBase(ILJITCoder *coder, ILJitValue array)
{
- return jit_insn_add_relative(coder->jitFunction, array,
sizeof(System_Array));
+ ILJitValue baseOffset =
jit_value_create_nint_constant(coder->jitFunction,
+
_IL_JIT_TYPE_UINT32,
+
(jit_nint)(sizeof(System_Array)));
+
+ return jit_insn_add(coder->jitFunction, array, baseOffset);
}
/*
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [dotgnu-pnet-commits] pnet ChangeLog engine/jitc_delegate.c engine/ji...,
Klaus Treichel <=