Author: mfursov
Date: Thu Jul 5 05:51:20 2007
New Revision: 553484
URL: http://svn.apache.org/viewvc?view=rev&rev=553484
Log:
Fix for HARMONY-4349 (error in lazy resolution helpers)
Fix for HARMONY-4334 (support for unresolved compressed types in Jitrino.OPT)
Fix for HARMONY-4181 (fix for x86_64 calling conventions support in Jitrino.JET)
reenabling HARMONY-4267 regression test on x86_64 platforms
Modified:
harmony/enhanced/drlvm/trunk/src/test/regression/excludes/exclude.linux.x86_64
harmony/enhanced/drlvm/trunk/src/test/regression/excludes/exclude.windows.x86_64
harmony/enhanced/drlvm/trunk/vm/jitrino/src/jet/compiler.cpp
harmony/enhanced/drlvm/trunk/vm/jitrino/src/jet/csig.h
harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/Opnd.cpp
harmony/enhanced/drlvm/trunk/vm/jitrino/src/shared/Type.cpp
harmony/enhanced/drlvm/trunk/vm/jitrino/src/shared/Type.h
harmony/enhanced/drlvm/trunk/vm/jitrino/src/translator/java/JavaLabelPrepass.h
harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/Resolve.cpp
Modified: harmony/enhanced/drlvm/trunk/src/test/regression/excludes/exclude.linux.x86_64
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/src/test/regression/excludes/exclude.linux.x86_64?view=diff&rev=553484&r1=553483&r2=553484
==============================================================================
--- harmony/enhanced/drlvm/trunk/src/test/regression/excludes/exclude.linux.x86_64 (original)
+++ harmony/enhanced/drlvm/trunk/src/test/regression/excludes/exclude.linux.x86_64 Thu Jul
5 05:51:20 2007
@@ -16,6 +16,4 @@
H3909
# Exclude this test because JVMTI is not implemented for x86_64 in JIT mode yet
H3982
-# Exclude this test because unresolved types support is not ready for x86_64 in JIT
-H4267
Modified: harmony/enhanced/drlvm/trunk/src/test/regression/excludes/exclude.windows.x86_64
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/src/test/regression/excludes/exclude.windows.x86_64?view=diff&rev=553484&r1=553483&r2=553484
==============================================================================
--- harmony/enhanced/drlvm/trunk/src/test/regression/excludes/exclude.windows.x86_64 (original)
+++ harmony/enhanced/drlvm/trunk/src/test/regression/excludes/exclude.windows.x86_64 Thu Jul
5 05:51:20 2007
@@ -19,6 +19,3 @@
#HARMONY-4093
H2113
-# Exclude this test because unresolved types support is not ready for x86_64 in JIT mode
yet.
-H4267
-
Modified: harmony/enhanced/drlvm/trunk/vm/jitrino/src/jet/compiler.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/jitrino/src/jet/compiler.cpp?view=diff&rev=553484&r1=553483&r2=553484
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/jitrino/src/jet/compiler.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/jitrino/src/jet/compiler.cpp Thu Jul 5 05:51:20 2007
@@ -1404,8 +1404,14 @@
if (gr == bp) continue;
g_global_grs.push_back(gr);
}
- // ... for fr registers, leave 3 registers available for scratch
- for (unsigned i=3; i<fr_num; i++) {
+ // On a platform with float-point args passed on registers, we need at
+ // least one scratch register in addition to the regs occupied by the args.
+ // For example: when all arg regs are occupied and we need to perform mem-mem
+ // move e.g. field from operand stack into a memory stack.
+ // When no float-point args are passed on regs, we need at least 3 scratch
+ // to perform computations and mem-mem moves in codegen.
+ const unsigned num_of_scratch = MAX_FR_ARGS<3 ? 3 : (MAX_FR_ARGS+1);
+ for (unsigned i=num_of_scratch; i<fr_num; i++) {
AR fr = _fr(i);
g_global_frs.push_back(fr);
}
Modified: harmony/enhanced/drlvm/trunk/vm/jitrino/src/jet/csig.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/jitrino/src/jet/csig.h?view=diff&rev=553484&r1=553483&r2=553484
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/jitrino/src/jet/csig.h (original)
+++ harmony/enhanced/drlvm/trunk/vm/jitrino/src/jet/csig.h Thu Jul 5 05:51:20 2007
@@ -89,9 +89,16 @@
* @brief On IA-32 it's CCONV_CDECL_IA32, on EM64T it's CCONV_EM64T.
*/
#define CCONV_CDECL CCONV_EM64T
+ #ifdef _WIN32
+ /// A nubmer of FR registers dedicated to pass float-point arguments.
+ #define MAX_FR_ARGS (4)
+ #else
+ #define MAX_FR_ARGS (8)
+ #endif
#else
#define CCONV_STDCALL CCONV_STDCALL_IA32
#define CCONV_CDECL CCONV_CDECL_IA32
+ #define MAX_FR_ARGS (0)
#endif
/**
Modified: harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/Opnd.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/Opnd.cpp?view=diff&rev=553484&r1=553483&r2=553484
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/Opnd.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/Opnd.cpp Thu Jul 5 05:51:20 2007
@@ -154,6 +154,7 @@
return typeManager.getFloatType();
// object types
case Type::CompressedSystemObject:
+ case Type::CompressedUnresolvedObject:
case Type::CompressedSystemClass:
case Type::CompressedSystemString:
case Type::CompressedArray: case Type::CompressedObject:
Modified: harmony/enhanced/drlvm/trunk/vm/jitrino/src/shared/Type.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/jitrino/src/shared/Type.cpp?view=diff&rev=553484&r1=553483&r2=553484
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/jitrino/src/shared/Type.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/jitrino/src/shared/Type.cpp Thu Jul 5 05:51:20 2007
@@ -145,6 +145,7 @@
case Type::CompressedSystemClass:
case Type::CompressedSystemString:
case Type::CompressedNullObject:
+ case Type::CompressedUnresolvedObject:
case Type::CompressedArray:
case Type::CompressedObject:
case Type::CompressedMethodPtr:
@@ -326,6 +327,7 @@
compressedSystemStringType(NULL),
compressedSystemObjectType(NULL),
+ compressedUnresolvedObjectType(NULL),
compressedSystemClassType(NULL),
compressedNullObjectType(Type::CompressedNullObject),
@@ -395,6 +397,8 @@
ObjectType(Type::CompressedSystemString,systemStringVMTypeHandle,*this);
compressedSystemObjectType = new (memManager)
ObjectType(Type::CompressedSystemObject,systemObjectVMTypeHandle,*this);
+ compressedUnresolvedObjectType = new (memManager)
+ ObjectType(Type::CompressedUnresolvedObject,systemObjectVMTypeHandle,*this);
compressedSystemClassType = new (memManager)
ObjectType(Type::CompressedSystemClass,systemClassVMTypeHandle,*this);
compressedUserObjectTypes.insert(systemStringVMTypeHandle,compressedSystemStringType);
@@ -736,6 +740,8 @@
}
case Type::CompressedSystemObject:
return getSystemObjectType();
+ case Type::CompressedUnresolvedObject:
+ return getUnresolvedObjectType();
case Type::CompressedSystemClass:
return getSystemClassType();
case Type::CompressedSystemString:
@@ -767,6 +773,8 @@
}
case Type::SystemObject:
return getCompressedSystemObjectType();
+ case Type::UnresolvedObject:
+ return getCompressedUnresolvedObjectType();
case Type::SystemClass:
return getCompressedSystemClassType();
case Type::SystemString:
@@ -934,6 +942,7 @@
case CompressedArray: s = "cmp[]"; break;
case CompressedObject: s = "cmpo"; break;
case CompressedNullObject: s = "cmpnull"; break;
+ case CompressedUnresolvedObject: s = "cmpunreso"; break;
default: s = "???"; break;
}
os << s;
@@ -1076,6 +1085,7 @@
case CompressedSystemClass: s = "ccl"; break;
case CompressedSystemString: s = "cst"; break;
case CompressedNullObject: s = "cnl"; break;
+ case CompressedUnresolvedObject:s = "cun"; break;
case CompressedArray: s = "c[]"; break;
case CompressedObject: s = "co "; break;
case VTablePtrObj: s = "vtb"; break;
@@ -1146,6 +1156,7 @@
case Type::CompressedSystemClass:
case Type::CompressedSystemString:
case Type::CompressedNullObject:
+ case Type::CompressedUnresolvedObject:
case Type::CompressedArray:
case Type::CompressedObject:
case Type::CompressedVTablePtr:
@@ -1271,6 +1282,7 @@
DECL_TAG_ITEM(CompressedSystemClass, "ccl "),
DECL_TAG_ITEM(CompressedSystemString, "cst "),
DECL_TAG_ITEM(CompressedNullObject, "cnl "),
+ DECL_TAG_ITEM(CompressedUnresolvedObject, "cun "),
DECL_TAG_ITEM(CompressedArray, "c[] "),
DECL_TAG_ITEM(CompressedObject, "co "),
Modified: harmony/enhanced/drlvm/trunk/vm/jitrino/src/shared/Type.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/jitrino/src/shared/Type.h?view=diff&rev=553484&r1=553483&r2=553484
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/jitrino/src/shared/Type.h (original)
+++ harmony/enhanced/drlvm/trunk/vm/jitrino/src/shared/Type.h Thu Jul 5 05:51:20 2007
@@ -124,6 +124,8 @@
// special null object reference
CompressedNullObject,
+ // Unresolved Object
+ CompressedUnresolvedObject,
// (2.1.2) Array type
CompressedArray,
@@ -276,28 +278,30 @@
}
static Tag compressReference(Tag tag) {
switch (tag) {
- case SystemObject: return CompressedSystemObject;
- case SystemClass: return CompressedSystemClass;
- case SystemString: return CompressedSystemString;
- case NullObject: return CompressedNullObject;
- case Array: return CompressedArray;
- case Object: return CompressedObject;
- case MethodPtr: return CompressedMethodPtr;
- case VTablePtr: return CompressedVTablePtr;
+ case SystemObject: return CompressedSystemObject;
+ case SystemClass: return CompressedSystemClass;
+ case SystemString: return CompressedSystemString;
+ case NullObject: return CompressedNullObject;
+ case UnresolvedObject: return CompressedUnresolvedObject;
+ case Array: return CompressedArray;
+ case Object: return CompressedObject;
+ case MethodPtr: return CompressedMethodPtr;
+ case VTablePtr: return CompressedVTablePtr;
default:
assert(0); return Void;
}
}
static Tag unCompressReference(Tag tag) {
switch (tag) {
- case CompressedSystemObject: return SystemObject;
- case CompressedSystemClass: return SystemClass;
- case CompressedSystemString: return SystemString;
- case CompressedNullObject: return NullObject;
- case CompressedArray: return Array;
- case CompressedObject: return Object;
- case CompressedMethodPtr: return MethodPtr;
- case CompressedVTablePtr: return VTablePtr;
+ case CompressedSystemObject: return SystemObject;
+ case CompressedSystemClass: return SystemClass;
+ case CompressedSystemString: return SystemString;
+ case CompressedNullObject: return NullObject;
+ case CompressedUnresolvedObject: return UnresolvedObject;
+ case CompressedArray: return Array;
+ case CompressedObject: return Object;
+ case CompressedMethodPtr: return MethodPtr;
+ case CompressedVTablePtr: return VTablePtr;
default:
assert(0); return Void;
}
@@ -307,7 +311,7 @@
((CompressedSystemObject <= tag) && (tag <= CompressedObject)));
}
static bool isUnresolvedObject(Tag tag) {
- return tag == UnresolvedObject;
+ return ((tag == UnresolvedObject) || (tag == CompressedUnresolvedObject));
}
static bool isNullObject(Tag tag) {
return ((tag == NullObject) || (tag == CompressedNullObject));
@@ -697,6 +701,7 @@
Type* getCompressedNullObjectType() {return &compressedNullObjectType;}
ObjectType* getCompressedSystemStringType(){return compressedSystemStringType;}
ObjectType* getCompressedSystemObjectType(){return compressedSystemObjectType;}
+ ObjectType* getCompressedUnresolvedObjectType(){return compressedUnresolvedObjectType;}
ObjectType* getCompressedSystemClassType() {return compressedSystemClassType;}
NamedType* getValueType(void* vmTypeHandle);
@@ -787,6 +792,7 @@
Type offsetPlusHeapbaseType;
ObjectType* compressedSystemStringType;
ObjectType* compressedSystemObjectType;
+ ObjectType* compressedUnresolvedObjectType;
ObjectType* compressedSystemClassType;
Type compressedNullObjectType;
// hashtable for user-defined object and value types
Modified: harmony/enhanced/drlvm/trunk/vm/jitrino/src/translator/java/JavaLabelPrepass.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/jitrino/src/translator/java/JavaLabelPrepass.h?view=diff&rev=553484&r1=553483&r2=553484
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/jitrino/src/translator/java/JavaLabelPrepass.h (original)
+++ harmony/enhanced/drlvm/trunk/vm/jitrino/src/translator/java/JavaLabelPrepass.h Thu Jul
5 05:51:20 2007
@@ -280,6 +280,7 @@
case Type::CompressedArray:
case Type::CompressedObject:
case Type::CompressedNullObject:
+ case Type::CompressedUnresolvedObject:
case Type::CompressedSystemString:
case Type::CompressedSystemObject:
return A;
Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/Resolve.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/Resolve.cpp?view=diff&rev=553484&r1=553483&r2=553484
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/Resolve.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/Resolve.cpp Thu Jul 5 05:51:20
2007
@@ -886,7 +886,7 @@
}
}
}
- if(method && !method_can_link_special(curr_clss, index, method, false))
+ if(method && !method_can_link_special(curr_clss, index, method, raise_exn))
return NULL;
return method;
} //resolve_special_method_env
|