From a8e12c5a020d4f9ac45f07ad9906c89b9c73945f Mon Sep 17 00:00:00 2001 From: "svenpanne@chromium.org" Date: Wed, 7 Aug 2013 13:33:41 +0000 Subject: [PATCH] Handle Symbols in the LBranch instruction on x64. This was an omission in https://code.google.com/p/v8/source/detail?r=14051. R=rossberg@chromium.org Review URL: https://codereview.chromium.org/22578002 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@16101 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/code-stubs.cc | 3 +++ src/x64/lithium-codegen-x64.cc | 6 ++++++ 2 files changed, 9 insertions(+) diff --git a/src/code-stubs.cc b/src/code-stubs.cc index d472fa2..f656bf7 100644 --- a/src/code-stubs.cc +++ b/src/code-stubs.cc @@ -469,6 +469,9 @@ void CompareNilICStub::UpdateStatus(Handle object) { template void HydrogenCodeStub::TraceTransition(StateType from, StateType to) { + // Note: Although a no-op transition is semantically OK, it is hinting at a + // bug somewhere in our state transition machinery. + ASSERT(from != to); #ifdef DEBUG if (!FLAG_trace_ic) return; char buffer[100]; diff --git a/src/x64/lithium-codegen-x64.cc b/src/x64/lithium-codegen-x64.cc index d62041e..cc63510 100644 --- a/src/x64/lithium-codegen-x64.cc +++ b/src/x64/lithium-codegen-x64.cc @@ -2016,6 +2016,12 @@ void LCodeGen::DoBranch(LBranch* instr) { __ bind(¬_string); } + if (expected.Contains(ToBooleanStub::SYMBOL)) { + // Symbol value -> true. + __ CmpInstanceType(map, SYMBOL_TYPE); + __ j(equal, instr->TrueLabel(chunk_)); + } + if (expected.Contains(ToBooleanStub::HEAP_NUMBER)) { // heap number -> false iff +0, -0, or NaN. Label not_heap_number; -- 2.7.4