You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by va...@apache.org on 2007/05/25 13:19:01 UTC

svn commit: r541618 - /harmony/enhanced/drlvm/trunk/vm/jitrino/src/codegenerator/ia32/Ia32InstCodeSelector.cpp

Author: varlax
Date: Fri May 25 04:19:00 2007
New Revision: 541618

URL: http://svn.apache.org/viewvc?view=rev&rev=541618
Log:
Regression fix for HARMONY-3954

Modified:
    harmony/enhanced/drlvm/trunk/vm/jitrino/src/codegenerator/ia32/Ia32InstCodeSelector.cpp

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=541618&r1=541617&r2=541618
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/jitrino/src/codegenerator/ia32/Ia32InstCodeSelector.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/jitrino/src/codegenerator/ia32/Ia32InstCodeSelector.cpp Fri May 25 04:19:00 2007
@@ -2540,11 +2540,20 @@
         case OpndSize_8:   mn = Mnemonic_MOVS8; break;
         case OpndSize_16:  mn = Mnemonic_MOVS16; break;
         case OpndSize_32:  mn = Mnemonic_MOVS32; break;
-        case OpndSize_64: {
-                            appendInsts(irManager.newInst(Mnemonic_SHL, counter, irManager.newImmOpnd(counterType, (int32)1)));
-                            mn = Mnemonic_MOVS32;
-                          }
-                          break;
+        case OpndSize_64: 
+            {
+                /**
+                 * FIXME 
+                 * Currently JIT erroneously supposes that compressed mode is always on.
+                 * So if type is object, it is actually compressed (32-bit sized).
+                 * But IRManager::getTypeSize() "correctly" returns OpndSize_64.
+                 */
+                if (!srcAddrType->getPointedToType()->isObject()) {
+                    appendInsts(irManager.newInst(Mnemonic_SHL, counter, irManager.newImmOpnd(counterType, (int32)1)));
+                }
+                mn = Mnemonic_MOVS32;
+            }
+            break;
         default: assert(0); mn = Mnemonic_MOVS32; break;
     }
     Inst* copyInst = irManager.newInst(mn,dstAddrReg,srcAddrReg,counter);