Index: src/code-stubs.cc |
diff --git a/src/code-stubs.cc b/src/code-stubs.cc |
index 2bc3de9e8c6a5876ddfed46002824b16091c2ca3..ac2f40be8ed9cbe62a59c24ff37f4452abc15a64 100644 |
--- a/src/code-stubs.cc |
+++ b/src/code-stubs.cc |
@@ -3741,130 +3741,6 @@ void ToLengthStub::GenerateAssembly(CodeStubAssembler* assembler) const { |
} |
} |
-// static |
-compiler::Node* ToBooleanStub::Generate(CodeStubAssembler* assembler, |
- compiler::Node* value, |
- compiler::Node* context) { |
- typedef compiler::Node Node; |
- typedef CodeStubAssembler::Label Label; |
- typedef CodeStubAssembler::Variable Variable; |
- |
- Variable result(assembler, MachineRepresentation::kTagged); |
- Label if_valueissmi(assembler), if_valueisnotsmi(assembler), |
- return_true(assembler), return_false(assembler), end(assembler); |
- |
- // Check if {value} is a Smi or a HeapObject. |
- assembler->Branch(assembler->WordIsSmi(value), &if_valueissmi, |
- &if_valueisnotsmi); |
- |
- assembler->Bind(&if_valueissmi); |
- { |
- // The {value} is a Smi, only need to check against zero. |
- assembler->Branch(assembler->SmiEqual(value, assembler->SmiConstant(0)), |
- &return_false, &return_true); |
- } |
- |
- assembler->Bind(&if_valueisnotsmi); |
- { |
- Label if_valueisstring(assembler), if_valueisnotstring(assembler), |
- if_valueisheapnumber(assembler), if_valueisoddball(assembler), |
- if_valueisother(assembler); |
- |
- // The {value} is a HeapObject, load its map. |
- Node* value_map = assembler->LoadMap(value); |
- |
- // Load the {value}s instance type. |
- Node* value_instance_type = assembler->Load( |
- MachineType::Uint8(), value_map, |
- assembler->IntPtrConstant(Map::kInstanceTypeOffset - kHeapObjectTag)); |
- |
- // Dispatch based on the instance type; we distinguish all String instance |
- // types, the HeapNumber type and the Oddball type. |
- assembler->Branch(assembler->Int32LessThan( |
- value_instance_type, |
- assembler->Int32Constant(FIRST_NONSTRING_TYPE)), |
- &if_valueisstring, &if_valueisnotstring); |
- assembler->Bind(&if_valueisnotstring); |
- size_t const kNumCases = 2; |
- Label* case_labels[kNumCases]; |
- int32_t case_values[kNumCases]; |
- case_labels[0] = &if_valueisheapnumber; |
- case_values[0] = HEAP_NUMBER_TYPE; |
- case_labels[1] = &if_valueisoddball; |
- case_values[1] = ODDBALL_TYPE; |
- assembler->Switch(value_instance_type, &if_valueisother, case_values, |
- case_labels, arraysize(case_values)); |
- |
- assembler->Bind(&if_valueisstring); |
- { |
- // Load the string length field of the {value}. |
- Node* value_length = |
- assembler->LoadObjectField(value, String::kLengthOffset); |
- |
- // Check if the {value} is the empty string. |
- assembler->Branch( |
- assembler->SmiEqual(value_length, assembler->SmiConstant(0)), |
- &return_false, &return_true); |
- } |
- |
- assembler->Bind(&if_valueisheapnumber); |
- { |
- Node* value_value = assembler->Load( |
- MachineType::Float64(), value, |
- assembler->IntPtrConstant(HeapNumber::kValueOffset - kHeapObjectTag)); |
- |
- Label if_valueisnotpositive(assembler); |
- assembler->Branch(assembler->Float64LessThan( |
- assembler->Float64Constant(0.0), value_value), |
- &return_true, &if_valueisnotpositive); |
- |
- assembler->Bind(&if_valueisnotpositive); |
- assembler->Branch(assembler->Float64LessThan( |
- value_value, assembler->Float64Constant(0.0)), |
- &return_true, &return_false); |
- } |
- |
- assembler->Bind(&if_valueisoddball); |
- { |
- // The {value} is an Oddball, and every Oddball knows its boolean value. |
- Node* value_toboolean = |
- assembler->LoadObjectField(value, Oddball::kToBooleanOffset); |
- result.Bind(value_toboolean); |
- assembler->Goto(&end); |
- } |
- |
- assembler->Bind(&if_valueisother); |
- { |
- Node* value_map_bitfield = assembler->Load( |
- MachineType::Uint8(), value_map, |
- assembler->IntPtrConstant(Map::kBitFieldOffset - kHeapObjectTag)); |
- Node* value_map_undetectable = assembler->Word32And( |
- value_map_bitfield, |
- assembler->Int32Constant(1 << Map::kIsUndetectable)); |
- |
- // Check if the {value} is undetectable. |
- assembler->Branch(assembler->Word32Equal(value_map_undetectable, |
- assembler->Int32Constant(0)), |
- &return_true, &return_false); |
- } |
- } |
- |
- assembler->Bind(&return_false); |
- { |
- result.Bind(assembler->BooleanConstant(false)); |
- assembler->Goto(&end); |
- } |
- |
- assembler->Bind(&return_true); |
- { |
- result.Bind(assembler->BooleanConstant(true)); |
- assembler->Goto(&end); |
- } |
- |
- assembler->Bind(&end); |
- return result.value(); |
-} |
- |
void ToIntegerStub::GenerateAssembly(CodeStubAssembler* assembler) const { |
typedef CodeStubAssembler::Label Label; |
typedef compiler::Node Node; |