Revision: 21738
Author:   [email protected]
Date:     Tue Jun 10 09:52:44 2014 UTC
Log:      Update DecodeFieldToSmi to support x32 port.

[email protected]

Review URL: https://codereview.chromium.org/310803003
http://code.google.com/p/v8/source/detail?r=21738

Modified:
 /branches/bleeding_edge/src/x64/macro-assembler-x64.h

=======================================
--- /branches/bleeding_edge/src/x64/macro-assembler-x64.h Tue Jun 10 04:03:51 2014 UTC +++ /branches/bleeding_edge/src/x64/macro-assembler-x64.h Tue Jun 10 09:52:44 2014 UTC
@@ -1053,8 +1053,22 @@

   template<typename Field>
   void DecodeFieldToSmi(Register reg) {
-    andp(reg, Immediate(Field::kMask));
-    shlp(reg, Immediate(kSmiShift - Field::kShift));
+    if (SmiValuesAre32Bits()) {
+      andp(reg, Immediate(Field::kMask));
+      shlp(reg, Immediate(kSmiShift - Field::kShift));
+    } else {
+      static const int shift = Field::kShift;
+ static const int mask = (Field::kMask >> Field::kShift) << kSmiTagSize;
+      ASSERT(SmiValuesAre31Bits());
+      ASSERT(kSmiShift == kSmiTagSize);
+      ASSERT((mask & 0x80000000u) == 0);
+      if (shift < kSmiShift) {
+        shlp(reg, Immediate(kSmiShift - shift));
+      } else if (shift > kSmiShift) {
+        sarp(reg, Immediate(shift - kSmiShift));
+      }
+      andp(reg, Immediate(mask));
+    }
   }

   // Abort execution if argument is not a number, enabled via --debug-code.

--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
--- You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to