Return-Path: Delivered-To: apmail-harmony-commits-archive@www.apache.org Received: (qmail 25884 invoked from network); 3 Apr 2007 11:25:30 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 3 Apr 2007 11:25:30 -0000 Received: (qmail 87013 invoked by uid 500); 3 Apr 2007 11:25:37 -0000 Delivered-To: apmail-harmony-commits-archive@harmony.apache.org Received: (qmail 86990 invoked by uid 500); 3 Apr 2007 11:25:37 -0000 Mailing-List: contact commits-help@harmony.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@harmony.apache.org Delivered-To: mailing list commits@harmony.apache.org Received: (qmail 86981 invoked by uid 99); 3 Apr 2007 11:25:37 -0000 Received: from herse.apache.org (HELO herse.apache.org) (140.211.11.133) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 03 Apr 2007 04:25:37 -0700 X-ASF-Spam-Status: No, hits=-99.5 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 03 Apr 2007 04:25:29 -0700 Received: by eris.apache.org (Postfix, from userid 65534) id 418951A9838; Tue, 3 Apr 2007 04:25:09 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r525137 - in /harmony/enhanced/drlvm/trunk/vm: gc_cc/javasrc/org/apache/harmony/drlvm/gc_cc/ jitrino/src/codegenerator/ia32/ jitrino/src/optimizer/ jitrino/src/translator/java/ Date: Tue, 03 Apr 2007 11:25:09 -0000 To: commits@harmony.apache.org From: varlax@apache.org X-Mailer: svnmailer-1.1.0 Message-Id: <20070403112509.418951A9838@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: varlax Date: Tue Apr 3 04:25:08 2007 New Revision: 525137 URL: http://svn.apache.org/viewvc?view=rev&rev=525137 Log: Applied HARMONY-3460 [drlvm][em64t][jit] allocation and monitors helpers inlining on EM64T platform Modified: harmony/enhanced/drlvm/trunk/vm/gc_cc/javasrc/org/apache/harmony/drlvm/gc_cc/GCHelper.java harmony/enhanced/drlvm/trunk/vm/jitrino/src/codegenerator/ia32/Ia32InstCodeSelector.cpp harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/helper_inliner.cpp harmony/enhanced/drlvm/trunk/vm/jitrino/src/translator/java/JavaByteCodeTranslator.cpp Modified: harmony/enhanced/drlvm/trunk/vm/gc_cc/javasrc/org/apache/harmony/drlvm/gc_cc/GCHelper.java URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/gc_cc/javasrc/org/apache/harmony/drlvm/gc_cc/GCHelper.java?view=diff&rev=525137&r1=525136&r2=525137 ============================================================================== --- harmony/enhanced/drlvm/trunk/vm/gc_cc/javasrc/org/apache/harmony/drlvm/gc_cc/GCHelper.java (original) +++ harmony/enhanced/drlvm/trunk/vm/gc_cc/javasrc/org/apache/harmony/drlvm/gc_cc/GCHelper.java Tue Apr 3 04:25:08 2007 @@ -33,7 +33,8 @@ private static final int ARRAY_LEN_OFFSET = 8; - private static final int GC_OBJECT_ALIGNMENT = 4; //TODO: EM64 or IPF could have 8! + private static final int GC_OBJECT_ALIGNMENT = VMHelper.POINTER_TYPE_SIZE; //4 for 32bit and 8 for 64bit + private static final int GC_ARRAY_MIN_FIRST_ELEM_FROM_LEN_OFFSET = VMHelper.POINTER_TYPE_SIZE; //4 for 32bit and 8 for 64bit @Inline @@ -61,7 +62,7 @@ @Inline public static Address allocArray(int arrayLen, int elemSize, int allocationHandle) { if (arrayLen >= 0) { - int firstElementOffset = ARRAY_LEN_OFFSET + (elemSize==8?8:4); + int firstElementOffset = ARRAY_LEN_OFFSET + (elemSize==8?8:GC_ARRAY_MIN_FIRST_ELEM_FROM_LEN_OFFSET); int size = firstElementOffset + elemSize*arrayLen; size = (((size + (GC_OBJECT_ALIGNMENT - 1)) & (~(GC_OBJECT_ALIGNMENT - 1)))); Modified: harmony/enhanced/drlvm/trunk/vm/jitrino/src/codegenerator/ia32/Ia32InstCodeSelector.cpp URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/jitrino/src/codegenerator/ia32/Ia32InstCodeSelector.cpp?view=diff&rev=525137&r1=525136&r2=525137 ============================================================================== --- harmony/enhanced/drlvm/trunk/vm/jitrino/src/codegenerator/ia32/Ia32InstCodeSelector.cpp (original) +++ harmony/enhanced/drlvm/trunk/vm/jitrino/src/codegenerator/ia32/Ia32InstCodeSelector.cpp Tue Apr 3 04:25:08 2007 @@ -2878,7 +2878,7 @@ { assert(numArgs == 0); Opnd * tlsBaseReg = irManager.newOpnd(typeManager.getUnmanagedPtrType(typeManager.getInt8Type())); -#ifdef PLATFORM_POSIX +#if defined(PLATFORM_POSIX) || defined (_EM64T_) TypeManager& tm =irManager.getTypeManager(); Opnd * callAddrOpnd =irManager.newImmOpnd(tm.getUnmanagedPtrType(tm.getIntPtrType()), Opnd::RuntimeInfo::Kind_HelperAddress, (void*)CompilationInterface::Helper_GetTLSBase); Modified: harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/helper_inliner.cpp URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/helper_inliner.cpp?view=diff&rev=525137&r1=525136&r2=525137 ============================================================================== --- harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/helper_inliner.cpp (original) +++ harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/helper_inliner.cpp Tue Apr 3 04:25:08 2007 @@ -361,7 +361,7 @@ void NewObjHelperInliner::doInline() { -#if defined (_EM64T_) || defined (_IPF_) +#if defined (_IPF_) return; #else assert(inst->getOpcode() == Op_NewObj); @@ -377,8 +377,12 @@ } //replace newObj with call to a method + +#ifdef _EM64T_ + assert(VMInterface::areReferencesCompressed()); +#endif //the method signature is (int objSize, int allocationHandle) - int allocationHandle= (int)objType->getAllocationHandle(); + int allocationHandle= (int)(POINTER_SIZE_INT)objType->getAllocationHandle(); int objSize=objType->getObjectSize(); Opnd* tauSafeOpnd = opndManager->createSsaTmpOpnd(typeManager->getTauType()); @@ -412,7 +416,7 @@ } void NewArrayHelperInliner::doInline() { -#if defined (_EM64T_) || defined (_IPF_) +#if defined (_IPF_) return; #else assert(inst->getOpcode() == Op_NewArray); @@ -420,9 +424,12 @@ //the method signature is (int objSize, int allocationHandle) Opnd* dstOpnd = inst->getDst(); ArrayType* arrayType = dstOpnd->getType()->asArrayType(); - int allocationHandle = (int)arrayType->getAllocationHandle(); +#ifdef _EM64T_ + assert(VMInterface::areReferencesCompressed()); +#endif + int allocationHandle = (int)(POINTER_SIZE_INT)arrayType->getAllocationHandle(); Type* elemType = arrayType->getElementType(); - int elemSize = 4; //TODO: EM64T references! + int elemSize = 4; //TODO: check if references are compressed! if (elemType->isDouble() || elemType->isInt8()) { elemSize = 8; } else if (elemType->isInt2() || elemType->isChar()) { @@ -461,7 +468,7 @@ void ObjMonitorEnterHelperInliner::doInline() { -#if defined (_EM64T_) || defined (_IPF_) +#if defined (_IPF_) return; #else assert(inst->getOpcode() == Op_TauMonitorEnter); @@ -484,11 +491,9 @@ //every call must have exception edge -> add it if (call->getNode()->getExceptionEdge() == NULL) { Node* node = call->getNode(); - Node* dispatchNode = node->getUnconditionalEdgeTarget()->getExceptionEdgeTarget(); - if (dispatchNode == NULL) { - dispatchNode = cfg->getUnwindNode(); - assert(dispatchNode != NULL); //method with monitors must have unwind, so no additional checks is done - } + //this is fake dispatch edge -> monenter must never throw exceptions + Node* dispatchNode = cfg->getUnwindNode(); + assert(dispatchNode != NULL); //method with monitors must have unwind, so no additional checks is done cfg->addEdge(node, dispatchNode); } @@ -497,7 +502,7 @@ } void ObjMonitorExitHelperInliner::doInline() { -#if defined (_EM64T_) || defined (_IPF_) +#if defined (_IPF_) return; #else assert(inst->getOpcode() == Op_TauMonitorExit); Modified: harmony/enhanced/drlvm/trunk/vm/jitrino/src/translator/java/JavaByteCodeTranslator.cpp URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/jitrino/src/translator/java/JavaByteCodeTranslator.cpp?view=diff&rev=525137&r1=525136&r2=525137 ============================================================================== --- harmony/enhanced/drlvm/trunk/vm/jitrino/src/translator/java/JavaByteCodeTranslator.cpp (original) +++ harmony/enhanced/drlvm/trunk/vm/jitrino/src/translator/java/JavaByteCodeTranslator.cpp Tue Apr 3 04:25:08 2007 @@ -90,7 +90,7 @@ //vm helpers support bool isVMHelperClass(NamedType* type) { -#ifdef _EM64T_ +#ifdef _IPF_ return false;//natives are not tested on EM64T. #else static const char vmhelperPackage[] = "org/apache/harmony/drlvm/VMHelper"; @@ -2695,7 +2695,7 @@ if (isMagicMethod(methodDesc)) { genMagic(methodDesc, numArgs, srcOpnds, returnType); return; - } else if (isVMHelperMethod(methodDesc)) { + } else if (isVMHelperMethod(methodDesc) && !methodDesc->isNative()) { genVMHelper(methodDesc, numArgs, srcOpnds, returnType); return; }