Author: [EMAIL PROTECTED]
Date: Mon Nov  3 07:21:46 2008
New Revision: 680

Modified:
    branches/bleeding_edge/src/codegen-arm.cc

Log:
Smi ranges are not symmetrical.  -kMinSmiValue is not a Smi.
Review URL: http://codereview.chromium.org/9041

Modified: branches/bleeding_edge/src/codegen-arm.cc
==============================================================================
--- branches/bleeding_edge/src/codegen-arm.cc   (original)
+++ branches/bleeding_edge/src/codegen-arm.cc   Mon Nov  3 07:21:46 2008
@@ -1261,9 +1261,15 @@
    __ bind(&is_smi);

    if (min_index != 0) {
-    // small positive numbers can be immediate operands.
+    // Small positive numbers can be immediate operands.
      if (min_index < 0) {
-      __ add(r0, r0, Operand(Smi::FromInt(-min_index)));
+      // If min_index is Smi::kMinValue, -min_index is not a Smi.
+      if (Smi::IsValid(-min_index)) {
+        __ add(r0, r0, Operand(Smi::FromInt(-min_index)));
+      } else {
+        __ add(r0, r0, Operand(Smi::FromInt(-min_index - 1)));
+        __ add(r0, r0, Operand(Smi::FromInt(1)));
+      }
      } else {
        __ sub(r0, r0, Operand(Smi::FromInt(min_index)));
      }
@@ -1277,7 +1283,7 @@
    // the pc-register at the above add.
    __ stop("Unreachable: Switch table alignment");

-  // table containing branch operations.
+  // Table containing branch operations.
    for (int i = 0; i < range; i++) {
      __ b(case_targets[i]);
    }

--~--~---------~--~----~------------~-------~--~----~
v8-dev mailing list
v8-dev@googlegroups.com
http://groups.google.com/group/v8-dev
-~----------~----~----~----~------~----~------~--~---

Reply via email to