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()
|