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 -~----------~----~----~----~------~----~------~--~---
