harmony-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From mfur...@apache.org
Subject svn commit: r632253 - in /harmony/enhanced/drlvm/trunk: src/test/regression/H5127/ vm/jitrino/src/codegenerator/ia32/ vm/port/src/encoder/ia32_em64t/
Date Fri, 29 Feb 2008 07:43:59 GMT
Author: mfursov
Date: Thu Feb 28 23:43:57 2008
New Revision: 632253

URL: http://svn.apache.org/viewvc?rev=632253&view=rev
Log:
Fix for HARMONY-5127 [drlvm][jit][opt] Inlining of integer-to-float conversion helpers
+ correctness test


Added:
    harmony/enhanced/drlvm/trunk/src/test/regression/H5127/
    harmony/enhanced/drlvm/trunk/src/test/regression/H5127/Test.java   (with props)
    harmony/enhanced/drlvm/trunk/src/test/regression/H5127/run.test.xml   (with props)
Modified:
    harmony/enhanced/drlvm/trunk/vm/jitrino/src/codegenerator/ia32/Ia32CodeGenerator.cpp
    harmony/enhanced/drlvm/trunk/vm/jitrino/src/codegenerator/ia32/Ia32CodeSelector.cpp
    harmony/enhanced/drlvm/trunk/vm/jitrino/src/codegenerator/ia32/Ia32CodeSelector.h
    harmony/enhanced/drlvm/trunk/vm/jitrino/src/codegenerator/ia32/Ia32CopyExpansion.cpp
    harmony/enhanced/drlvm/trunk/vm/jitrino/src/codegenerator/ia32/Ia32InstCodeSelector.cpp
    harmony/enhanced/drlvm/trunk/vm/jitrino/src/codegenerator/ia32/Ia32StackLayout.cpp
    harmony/enhanced/drlvm/trunk/vm/port/src/encoder/ia32_em64t/enc_tabl.cpp

Added: harmony/enhanced/drlvm/trunk/src/test/regression/H5127/Test.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/src/test/regression/H5127/Test.java?rev=632253&view=auto
==============================================================================
--- harmony/enhanced/drlvm/trunk/src/test/regression/H5127/Test.java (added)
+++ harmony/enhanced/drlvm/trunk/src/test/regression/H5127/Test.java Thu Feb 28 23:43:57 2008
@@ -0,0 +1,113 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+
+package org.apache.harmony.drlvm.tests.regression.h5127;
+
+import junit.framework.TestCase;
+import java.util.*;
+
+class IntConversionTest {
+
+    IntConversionTest(int i, float f, double d) { intValue = i; floatValue = f; doubleValue
= d;}
+
+    int     intValue;
+    float   floatValue;
+    double  doubleValue;
+}
+
+class LongConversionTest {
+
+    LongConversionTest(long l, float f, double d) { longValue = l; floatValue = f; doubleValue
= d;}
+
+    long    longValue;
+    float   floatValue;
+    double  doubleValue;
+}
+
+
+
+public class Test extends TestCase {
+
+    List<IntConversionTest> intTests = new ArrayList<IntConversionTest>();
+    List<LongConversionTest> longTests = new ArrayList<LongConversionTest>();
+
+    public void testMe() {
+        prepareTests();
+        runTests();
+    }
+
+
+    void prepareTests() {
+        intTests.add(new IntConversionTest(0, (float)0.0, 0.0));
+        intTests.add(new IntConversionTest(1, (float)1.0, 1.0));
+        intTests.add(new IntConversionTest(-1, (float)-1.0, -1.0));
+        intTests.add(new IntConversionTest(Integer.MAX_VALUE, 2.14748365E9F, 2.147483647E9));
+        intTests.add(new IntConversionTest(Integer.MIN_VALUE, -2.14748365E9F, -2.147483648E9));
+
+
+
+        longTests.add(new LongConversionTest(0L, (float)0.0, 0.0));
+        longTests.add(new LongConversionTest(1L, (float)1.0, 1.0));
+        longTests.add(new LongConversionTest(-1L, (float)-1.0, -1.0));
+        longTests.add(new LongConversionTest(Long.MAX_VALUE, 9.223372E18F, 9.223372036854776E18));
+        longTests.add(new LongConversionTest(Long.MIN_VALUE, -9.223372E18F, -9.223372036854776E18));
+
+
+        longTests.add(new LongConversionTest((long)Integer.MAX_VALUE, 2.14748365E9F, 2.147483647E9));
+        longTests.add(new LongConversionTest((long)Integer.MIN_VALUE, -2.14748365E9F, -2.147483648E9));
+
+        longTests.add(new LongConversionTest((long)Integer.MAX_VALUE+1, 2.14748365E9F, 2.147483648E9));
+        longTests.add(new LongConversionTest((long)Integer.MIN_VALUE+1, -2.14748365E9F, -2.147483647E9));
+
+        longTests.add(new LongConversionTest((long)Integer.MAX_VALUE-1, 2.14748365E9F, 2.147483646E9));
+        longTests.add(new LongConversionTest((long)Integer.MIN_VALUE-1, -2.14748365E9F, -2.147483649E9));
+
+
+    }
+
+
+    void runTests() {
+        for(IntConversionTest t: intTests) {
+            check(t.floatValue, t.intValue);
+            check(t.doubleValue, t.intValue);
+        }
+
+        for(LongConversionTest t: longTests) {
+            check(t.floatValue, t.longValue);
+            check(t.doubleValue, t.longValue);
+        }
+    }
+
+
+    void check(float f, int i) {
+        assertEquals(f, (float)i);
+    }
+
+    void check(float f, long l) {
+        assertEquals(f, (float)l);
+    }
+
+    void check(double d, int i) {
+        assertEquals(d,(double)i);
+    }
+
+    void check(double d, long l) {
+        assertEquals(d,(double)l);
+    }
+
+
+}

Propchange: harmony/enhanced/drlvm/trunk/src/test/regression/H5127/Test.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: harmony/enhanced/drlvm/trunk/src/test/regression/H5127/run.test.xml
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/src/test/regression/H5127/run.test.xml?rev=632253&view=auto
==============================================================================
--- harmony/enhanced/drlvm/trunk/src/test/regression/H5127/run.test.xml (added)
+++ harmony/enhanced/drlvm/trunk/src/test/regression/H5127/run.test.xml Thu Feb 28 23:43:57
2008
@@ -0,0 +1,30 @@
+<!-- 
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+     
+         http://www.apache.org/licenses/LICENSE-2.0
+     
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License. -->
+
+<project name="RUN HARMONY-5127 Regression Test">
+    <target name="run-test">
+        <run-junit-test 
+             test="org.apache.harmony.drlvm.tests.regression.h5127.Test"
+             vmarg="-Xem:jet">
+        </run-junit-test>
+
+        <run-junit-test 
+             test="org.apache.harmony.drlvm.tests.regression.h5127.Test"
+             vmarg="-Xem:opt">
+        </run-junit-test>
+    </target>
+</project>
+

Propchange: harmony/enhanced/drlvm/trunk/src/test/regression/H5127/run.test.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: harmony/enhanced/drlvm/trunk/vm/jitrino/src/codegenerator/ia32/Ia32CodeGenerator.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/jitrino/src/codegenerator/ia32/Ia32CodeGenerator.cpp?rev=632253&r1=632252&r2=632253&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/jitrino/src/codegenerator/ia32/Ia32CodeGenerator.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/jitrino/src/codegenerator/ia32/Ia32CodeGenerator.cpp Thu
Feb 28 23:43:57 2008
@@ -115,9 +115,8 @@
 #endif     
     cc->setLIRManager(irManager);
     
-    bool slowLdString = sa->getBoolArg("SlowLdString", false); 
     MemoryManager  codeSelectorMemManager("CodeGenerator::selectCode.codeSelectorMemManager");
-    MethodCodeSelector    codeSelector(*ci, mm, codeSelectorMemManager, *irManager, slowLdString);
+    MethodCodeSelector    codeSelector(sa, *ci, mm, codeSelectorMemManager, *irManager);
 
     inputProvider.selectCode(codeSelector);
 

Modified: harmony/enhanced/drlvm/trunk/vm/jitrino/src/codegenerator/ia32/Ia32CodeSelector.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/jitrino/src/codegenerator/ia32/Ia32CodeSelector.cpp?rev=632253&r1=632252&r2=632253&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/jitrino/src/codegenerator/ia32/Ia32CodeSelector.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/jitrino/src/codegenerator/ia32/Ia32CodeSelector.cpp Thu
Feb 28 23:43:57 2008
@@ -46,12 +46,13 @@
 //_______________________________________________________________________________________________
 /**  Construct CFG builder */
 
-CfgCodeSelector::CfgCodeSelector(CompilationInterface&      compIntfc,
-                                            MethodCodeSelector& methodCodeSel,
-                                            MemoryManager&          codeSelectorMM, 
-                                            uint32                  nNodes, 
-                                            IRManager&          irM
-                                        )
+CfgCodeSelector::CfgCodeSelector(::Jitrino::SessionAction* sa, 
+                                 CompilationInterface&      compIntfc,
+                                 MethodCodeSelector& methodCodeSel,
+                                 MemoryManager&          codeSelectorMM, 
+                                 uint32                  nNodes, 
+                                 IRManager&          irM
+                                 )
     : numNodes(nNodes), nextNodeId(0), compilationInterface(compIntfc), methodCodeSelector(methodCodeSel),
       irMemManager(irM.getMemoryManager()), 
       codeSelectorMemManager(codeSelectorMM),  irManager(irM),
@@ -64,6 +65,8 @@
         nodes[i] = NULL;
 
     InstCodeSelector::onCFGInit(irManager);
+    flags.useInternalHelpersForInteger2FloatConv = sa->getBoolArg("useInternalHelpersForInteger2FloatConv",
false);
+    flags.slowLdString = sa->getBoolArg("SlowLdString", false); 
 }
 
 //_______________________________________________________________________________________________
@@ -471,17 +474,17 @@
 //_______________________________________________________________________________________________
 /** Generate control flow graph */
 
-MethodCodeSelector::MethodCodeSelector(CompilationInterface& compIntfc,
+MethodCodeSelector::MethodCodeSelector(
+                    ::Jitrino::SessionAction* _sa, 
+                    CompilationInterface& compIntfc,
                    MemoryManager&          irMM,
                    MemoryManager&          codeSelectorMM,
-                   IRManager&              irM,
-                   bool                    slowLoadString)
-: compilationInterface(compIntfc),
+                   IRManager&              irM)
+: sa(_sa), compilationInterface(compIntfc),
 irMemManager(irMM), codeSelectorMemManager(codeSelectorMM),
 irManager(irM),
 methodDesc(NULL),
-edgeProfile(NULL),
-slowLdString(slowLoadString)
+edgeProfile(NULL)
 {  
     ProfilingInterface* pi = irManager.getProfilingInterface();
     if (pi!=NULL && pi->isProfilingEnabled(ProfileType_Edge, JITProfilingRole_GEN))
{
@@ -497,9 +500,8 @@
     ControlFlowGraph* fg = irManager.getFlowGraph();
     fg->setEdgeProfile(useEdgeProfile);
 
-    CfgCodeSelector cfgCodeSelector(compilationInterface, *this,
-                        codeSelectorMemManager,numNodes,
-                        irManager);
+    CfgCodeSelector cfgCodeSelector(sa, compilationInterface, *this,
+                        codeSelectorMemManager,numNodes, irManager);
     { 
         AutoTimer tm(selectionTimer); 
         if( NULL == irManager.getEntryPointInst() ) {

Modified: harmony/enhanced/drlvm/trunk/vm/jitrino/src/codegenerator/ia32/Ia32CodeSelector.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/jitrino/src/codegenerator/ia32/Ia32CodeSelector.h?rev=632253&r1=632252&r2=632253&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/jitrino/src/codegenerator/ia32/Ia32CodeSelector.h (original)
+++ harmony/enhanced/drlvm/trunk/vm/jitrino/src/codegenerator/ia32/Ia32CodeSelector.h Thu
Feb 28 23:43:57 2008
@@ -50,6 +50,20 @@
 
 class MethodCodeSelector;
 
+class CodeSelectionFlags {
+public:
+    CodeSelectionFlags() {
+        useInternalHelpersForInteger2FloatConv = false;
+        slowLdString = false;
+    }
+
+    bool useInternalHelpersForInteger2FloatConv;
+    bool slowLdString; 
+
+};
+
+
+
 //========================================================================================================
 //  Cfg code selector -- builds IA32 flow graph with instructions
 //========================================================================================================
@@ -64,7 +78,7 @@
     //
     //  CFGCodeSelector::Callback methods
     //
-    CfgCodeSelector(CompilationInterface& compIntfc,
+    CfgCodeSelector(::Jitrino::SessionAction* sa, CompilationInterface& compIntfc,
                          MethodCodeSelector& methodCodeSel, 
                          MemoryManager& codeSelectorMM, uint32 nNodes, 
                          IRManager& irM);
@@ -107,6 +121,8 @@
 
     //    Callbacks for the instruction code selector
     void    methodHasCalls(bool nonExceptionCall);
+
+    const CodeSelectionFlags& getFlags() const {return flags;}
 private:
     //
     //    Methods
@@ -132,6 +148,7 @@
 
     Opnd *                  returnOperand;
 
+    CodeSelectionFlags      flags;
 
     friend class InstCodeSelector;
 };
@@ -149,11 +166,11 @@
 
 class MethodCodeSelector : public ::Jitrino::MethodCodeSelector::Callback {
 public:
-    MethodCodeSelector(CompilationInterface&    compIntfc,
+    MethodCodeSelector(::Jitrino::SessionAction* sa, 
+                            CompilationInterface&    compIntfc,
                             MemoryManager&      irMM,
                             MemoryManager&      codeSelectorMM,
-                            IRManager&          irM,
-                            bool                slowLoadString = false);
+                            IRManager&          irM);
      
 
       void                genVars(uint32 numVars, ::Jitrino::VarCodeSelector& varCodeSelector);
@@ -170,6 +187,7 @@
     //
     //    Fields
     //
+    ::Jitrino::SessionAction* sa;
     int                 numVarOpnds;
     CompilationInterface& compilationInterface;
     MemoryManager&      irMemManager;           // for data live after code selection
@@ -179,8 +197,6 @@
     MethodDesc *        methodDesc;
 
     EdgeMethodProfile*  edgeProfile;
-
-    bool                slowLdString; // 'false' by default
 
     friend class CFGCodeSelector;
     friend class VarGenerator;

Modified: harmony/enhanced/drlvm/trunk/vm/jitrino/src/codegenerator/ia32/Ia32CopyExpansion.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/jitrino/src/codegenerator/ia32/Ia32CopyExpansion.cpp?rev=632253&r1=632252&r2=632253&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/jitrino/src/codegenerator/ia32/Ia32CopyExpansion.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/jitrino/src/codegenerator/ia32/Ia32CopyExpansion.cpp Thu
Feb 28 23:43:57 2008
@@ -300,6 +300,16 @@
 void SimpleStackOpndCoalescer::removeInsts()
 {
     uint32 opndCount = irManager.getOpndCount();
+    
+    // Exclude aliased memory locations from the optimization
+    // example: if for "mov arg1, arg0"  both args are on stack but arg0 is placed in incoming
args stack area 
+    // and arg1 in locals stack area -> we must not remove this copy. 
+    // Reasons: opnds order rearrangement due to different CC, stackdepth adjustment for
all stackautolayout opnds in emmiter.
+
+    IRManager::AliasRelation * relations = new (memoryManager) IRManager::AliasRelation[opndCount];
+    irManager.getAliasRelations(relations);
+
+
     replacementsAdded = 0;
     opndReplacements.resize(opndCount);
     for (uint32 i = 0; i < opndCount; i++)
@@ -307,7 +317,20 @@
     for (uint32 i = 0; i < candidateInsts.size(); i++){
         int adj;
         Inst * inst = candidateInsts[i].inst;
+        if (Log::isEnabled()) {
+            Log::out()<<"SimpleStackOpndCoalescer: optimizing inst: I"; 
+            IRPrinter::printInst(Log::out(), inst);Log::out()<<std::endl;;
+        }
         Opnd * dstOpnd = inst->getOpnd(0), * srcOpnd = inst->getOpnd(1);
+        
+        if (relations[dstOpnd->getId()].outerOpnd!=NULL) { //no not optimize aliased opnds
+            if (Log::isEnabled()) {
+                Log::out()<<"SimpleStackOpndCoalescer: memory aliasing found for dstOpnd:
";
+                IRPrinter::printOpnd(Log::out(),dstOpnd); Log::out()<<" skipping optimization"<<std::endl;
+            }
+            continue;
+        }
+
         if (opndReplacements[dstOpnd->getId()] != NULL){
             dstOpnd = opndReplacements[dstOpnd->getId()];
             assert(opndReplacements[dstOpnd->getId()] == NULL);

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?rev=632253&r1=632252&r2=632253&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/jitrino/src/codegenerator/ia32/Ia32InstCodeSelector.cpp
(original)
+++ harmony/enhanced/drlvm/trunk/vm/jitrino/src/codegenerator/ia32/Ia32InstCodeSelector.cpp
Thu Feb 28 23:43:57 2008
@@ -303,20 +303,66 @@
 Opnd * InstCodeSelector::convertIntToFp(Opnd * srcOpnd, Type * dstType, Opnd * dstOpnd)
 {
     assert(srcOpnd->getType()->isInteger() && dstType->isFP());
-    OpndSize srcSize=srcOpnd->getSize();
-    if (dstOpnd==NULL)
+    if (dstOpnd==NULL) {
         dstOpnd=irManager.newOpnd(dstType);
-    const char * helperName;
-    if (srcSize<=OpndSize_32){
-        if (srcSize<OpndSize_32)
-            srcOpnd=convert(srcOpnd, typeManager.getInt32Type());
-        helperName=dstType->isSingle()?"convI4F4":"convI4F8";
-    }else{
-        assert(srcSize==OpndSize_64);
-        helperName=dstType->isSingle()?"convI8F4":"convI8F8";
     }
-    Opnd * args[] = {srcOpnd};
-    appendInsts(irManager.newInternalRuntimeHelperCallInst(helperName, 1, args, dstOpnd));
+    OpndSize srcSize = srcOpnd->getSize();
+    OpndSize dstSize = dstOpnd->getSize();
+
+    if (srcSize<OpndSize_32) {
+        srcOpnd=convert(srcOpnd, typeManager.getInt32Type());
+        srcSize = srcOpnd->getSize();
+    }
+    assert(srcSize == OpndSize_32 || srcSize == OpndSize_64);
+
+    bool useHelpers = codeSelector.getFlags().useInternalHelpersForInteger2FloatConv; 
+    if (!useHelpers) { //use SSE
+        if (srcSize == OpndSize_32) {
+            Inst* convInst = irManager.newInst(dstSize == OpndSize_32 ? Mnemonic_CVTSI2SS
: Mnemonic_CVTSI2SD, dstOpnd, srcOpnd);            
+            appendInsts(convInst);
+        } else { 
+            //use FPU to convert long to float/double on IA32 platform
+#ifdef _EM64T_
+            Opnd* int64Opnd = srcOpnd;
+#else  //32 bit mode - use memory aliasing for 64bit opnd
+            //copy i8 to stack first
+            Opnd* i8onStackOpnd = irManager.newMemOpnd(srcOpnd->getType(), MemOpndKind_StackAutoLayout,
irManager.getRegOpnd(STACK_REG));
+            Inst* copyInst = irManager.newI8PseudoInst(Mnemonic_MOV, 1, i8onStackOpnd, srcOpnd);
+            appendInsts(copyInst);
+
+            //Alias i8onStackOpnd memory location with new opnd that is not affected by i8lowerer
and keeps int64 type until emitter
+            Opnd* int64Opnd = irManager.newMemOpnd(srcOpnd->getType(), MemOpndKind_StackAutoLayout,
irManager.getRegOpnd(STACK_REG));
+            Opnd * args[] = {i8onStackOpnd};
+            Inst* memAliasInst = irManager.newAliasPseudoInst(int64Opnd, 1, args);
+            appendInsts(memAliasInst);
+#endif
+
+            //load float value to FP0
+            Opnd* fpResOpnd = irManager.newOpnd(irManager.getTypeManager().getDoubleType());
+            Inst* convInst = irManager.newInst(Mnemonic_FILD, fpResOpnd, int64Opnd);    
       
+            appendInsts(convInst);
+
+            //copy from FP0 to SSE
+            if (dstType->isDouble()) {
+                Inst* copy2SSEInst = irManager.newCopySequence(Mnemonic_MOV, dstOpnd, fpResOpnd);
+                appendInsts(copy2SSEInst);
+            } else {
+                assert(dstSize == OpndSize_32);
+                convertFpToFp(fpResOpnd, dstType, dstOpnd);
+            }
+        }
+    }
+
+    if (useHelpers) {
+        const char * helperName;
+        if (srcSize == OpndSize_32) {
+            helperName=dstType->isSingle()?"convI4F4":"convI4F8";
+        } else {
+            helperName=dstType->isSingle()?"convI8F4":"convI8F8";
+        }
+        Opnd * args[] = {srcOpnd};
+        appendInsts(irManager.newInternalRuntimeHelperCallInst(helperName, 1, args, dstOpnd));
+    }
     return dstOpnd;
 }
 
@@ -2189,7 +2235,7 @@
     assert(dstType->isSystemString() || dstType->isSystemClass());
     Opnd * retOpnd=irManager.newOpnd(dstType);
 
-    if (codeSelector.methodCodeSelector.slowLdString || dstType->isSystemClass() ||
+    if (codeSelector.getFlags().slowLdString || dstType->isSystemClass() ||
         *((POINTER_SIZE_INT *) compilationInterface.getStringInternAddr(enclosingMethod,
refToken)) == 0) {
         NamedType * parentType=enclosingMethod->getParentType();
     #ifdef _EM64T_

Modified: harmony/enhanced/drlvm/trunk/vm/jitrino/src/codegenerator/ia32/Ia32StackLayout.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/jitrino/src/codegenerator/ia32/Ia32StackLayout.cpp?rev=632253&r1=632252&r2=632253&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/jitrino/src/codegenerator/ia32/Ia32StackLayout.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/jitrino/src/codegenerator/ia32/Ia32StackLayout.cpp Thu
Feb 28 23:43:57 2008
@@ -285,7 +285,7 @@
     assert(entryPointInst->getNode() == irManager->getFlowGraph()->getEntryNode());
     cClient = &((const EntryPointPseudoInst*)entryPointInst)->getCallingConventionClient();
     cConvention = cClient->getCallingConvention();
-    // Overal size of stack frame should preserve alignment available on method enter. 
+    // Overall size of stack frame should preserve alignment available on method enter. 
     stackSizeAlignment = (cConvention->getStackAlignment() == STACK_ALIGN_HALF16)
         ? STACK_ALIGN16 : cConvention->getStackAlignment();
 

Modified: harmony/enhanced/drlvm/trunk/vm/port/src/encoder/ia32_em64t/enc_tabl.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/port/src/encoder/ia32_em64t/enc_tabl.cpp?rev=632253&r1=632252&r2=632253&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/port/src/encoder/ia32_em64t/enc_tabl.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/port/src/encoder/ia32_em64t/enc_tabl.cpp Thu Feb 28 23:43:57
2008
@@ -739,6 +739,7 @@
 
 BEGIN_MNEMONIC(FILD, MF_NONE, D_U )
 BEGIN_OPCODES()
+    {OpcodeInfo::all, {0xDB, _0}, {FP0S, m32},    D_U },
     {OpcodeInfo::all, {0xDF, _5}, {FP0D, m64},    D_U },
 END_OPCODES()
 END_MNEMONIC()



Mime
View raw message