Reviewers: antonm, Mads Ager,

Message:
I managed to commit the 32-bit smis before antonm's changes, so I didn't  
get to
fix the asserts first. It breaks in 64-bit mode. Oh, yes, and I did a  
fubared
merge just before committing too, so 32-bit smis fail in debug mode anyway.

TBR: antonm, ager (virtual-frame-x64.cc)



Description:
X64: Fix incompatability with previous revision.
And fix bug in debug-mode of 32-bit smi.

Please review this at http://codereview.chromium.org/261024

Affected files:
   M src/x64/macro-assembler-x64.cc
   M src/x64/virtual-frame-x64.cc
   M test/cctest/test-api.cc
   M test/cctest/test-macro-assembler-x64.cc


Index: src/x64/macro-assembler-x64.cc
diff --git a/src/x64/macro-assembler-x64.cc b/src/x64/macro-assembler-x64.cc
index  
9c314aa59bdb06420acbcb0250d0a09cf8c267c8..3768244e4d570f9c9fe69cb7c472d3f26c366581
  
100644
--- a/src/x64/macro-assembler-x64.cc
+++ b/src/x64/macro-assembler-x64.cc
@@ -701,7 +701,7 @@ void MacroAssembler::SmiTryAddConstant(Register dst,
                                         Smi* constant,
                                         Label* on_not_smi_result) {
    // Does not assume that src is a smi.
-  ASSERT_EQ(1, kSmiTagMask);
+  ASSERT_EQ(static_cast<intptr_t>(1), kSmiTagMask);
    ASSERT_EQ(0, kSmiTag);
    ASSERT(!dst.is(kScratchRegister));
    ASSERT(!src.is(kScratchRegister));
Index: src/x64/virtual-frame-x64.cc
diff --git a/src/x64/virtual-frame-x64.cc b/src/x64/virtual-frame-x64.cc
index  
7698dc1c4794efd62472df897678431dd3bbfd24..781efd14b9c98847ca32afd93c6c9806195113a0
  
100644
--- a/src/x64/virtual-frame-x64.cc
+++ b/src/x64/virtual-frame-x64.cc
@@ -66,7 +66,7 @@ void VirtualFrame::Enter() {
    if (FLAG_debug_code) {
      // Verify that rdi contains a JS function.  The following code
      // relies on rax being available for use.
-    Condition not_smi = masm()->CheckNotSmi(rdi);
+    Condition not_smi = NegateCondition(masm()->CheckSmi(rdi));
      __ Check(not_smi,
               "VirtualFrame::Enter - rdi is not a function (smi check).");
      __ CmpObjectType(rdi, JS_FUNCTION_TYPE, rax);
Index: test/cctest/test-api.cc
diff --git a/test/cctest/test-api.cc b/test/cctest/test-api.cc
index  
f1e94d6ed4a702f8a51f44298931352d69574a38..2a35014aa8d2ec39362796e6ddde99748c189a89
  
100644
--- a/test/cctest/test-api.cc
+++ b/test/cctest/test-api.cc
@@ -713,21 +713,27 @@ THREADED_TEST(BigSmiInteger) {
    v8::HandleScope scope;
    LocalContext env;
    int32_t value = i::Smi::kMaxValue;
-  CHECK(i::Smi::IsValid(value));
-  CHECK(!i::Smi::IsValid(value + 1));
-  Local<v8::Integer> value_obj = v8::Integer::New(value);
-  CHECK_EQ(static_cast<int64_t>(value), value_obj->Value());
+  // We cannot add one to a Smi::kMaxValue without wrapping.
+  if (i::kSmiValueSize < 32) {
+    CHECK(i::Smi::IsValid(value));
+    CHECK(!i::Smi::IsValid(value + 1));
+    Local<v8::Integer> value_obj = v8::Integer::New(value);
+    CHECK_EQ(static_cast<int64_t>(value), value_obj->Value());
+  }
  }


  THREADED_TEST(BigInteger) {
    v8::HandleScope scope;
    LocalContext env;
-  int32_t value = i::Smi::kMaxValue + 1;
-  CHECK(value > i::Smi::kMaxValue);
-  CHECK(!i::Smi::IsValid(value));
-  Local<v8::Integer> value_obj = v8::Integer::New(value);
-  CHECK_EQ(static_cast<int64_t>(value), value_obj->Value());
+  // We cannot add one to a Smi::kMaxValue without wrapping.
+  if (i::kSmiValueSize < 32) {
+    int32_t value = i::Smi::kMaxValue + 1;
+    CHECK(value > i::Smi::kMaxValue);
+    CHECK(!i::Smi::IsValid(value));
+    Local<v8::Integer> value_obj = v8::Integer::New(value);
+    CHECK_EQ(static_cast<int64_t>(value), value_obj->Value());
+  }
  }


Index: test/cctest/test-macro-assembler-x64.cc
diff --git a/test/cctest/test-macro-assembler-x64.cc  
b/test/cctest/test-macro-assembler-x64.cc
index  
071e67a5a10098c12cfdfeda0c9a1a291a0c05b8..27a394642ae49ae21712acccecf0b2ca0f4915ee
  
100755
--- a/test/cctest/test-macro-assembler-x64.cc
+++ b/test/cctest/test-macro-assembler-x64.cc
@@ -109,7 +109,7 @@ TEST(Smi) {
          CHECK_EQ(smi_from_int, smi_from_intptr);
        }
        int smi_value = smi_from_intptr->value();
-      CHECK_EQ(number, smi_value);
+      CHECK_EQ(number, static_cast<intptr_t>(smi_value));
      }
    }
  }



--~--~---------~--~----~------------~-------~--~----~
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
-~----------~----~----~----~------~----~------~--~---

Reply via email to