Revision: 2702 Author: [email protected] Date: Mon Aug 17 17:12:26 2009 Log: Revert commit 2701 per Erik Corry's request.
Original CL: http://codereview.chromium.org/171041 Review URL: http://codereview.chromium.org/171089 http://code.google.com/p/v8/source/detail?r=2702 Modified: /branches/bleeding_edge/src/arm/builtins-arm.cc /branches/bleeding_edge/src/arm/cfg-arm.cc /branches/bleeding_edge/src/arm/codegen-arm.cc /branches/bleeding_edge/src/arm/disasm-arm.cc /branches/bleeding_edge/src/arm/ic-arm.cc /branches/bleeding_edge/src/arm/macro-assembler-arm.cc /branches/bleeding_edge/src/arm/macro-assembler-arm.h /branches/bleeding_edge/src/arm/stub-cache-arm.cc /branches/bleeding_edge/src/arm/virtual-frame-arm.cc /branches/bleeding_edge/src/assembler.cc /branches/bleeding_edge/src/assembler.h /branches/bleeding_edge/src/heap.h /branches/bleeding_edge/src/serialize.cc /branches/bleeding_edge/test/cctest/test-disasm-arm.cc /branches/bleeding_edge/test/cctest/test-serialize.cc ======================================= --- /branches/bleeding_edge/src/arm/builtins-arm.cc Mon Aug 17 07:31:49 2009 +++ /branches/bleeding_edge/src/arm/builtins-arm.cc Mon Aug 17 17:12:26 2009 @@ -214,13 +214,9 @@ // Enter an internal frame. __ EnterInternalFrame(); - // Set up the context from the function argument. + // Setup the context from the function argument. __ ldr(cp, FieldMemOperand(r1, JSFunction::kContextOffset)); - // Set up the roots register. - ExternalReference roots_address = ExternalReference::roots_address(); - __ mov(r10, Operand(roots_address)); - // Push the function and the receiver onto the stack. __ push(r1); __ push(r2); @@ -243,7 +239,7 @@ // Initialize all JavaScript callee-saved registers, since they will be seen // by the garbage collector as part of handlers. - __ LoadRoot(r4, Heap::kUndefinedValueRootIndex); + __ mov(r4, Operand(Factory::undefined_value())); __ mov(r5, Operand(r4)); __ mov(r6, Operand(r4)); __ mov(r7, Operand(r4)); @@ -286,7 +282,7 @@ { Label done; __ tst(r0, Operand(r0)); __ b(ne, &done); - __ LoadRoot(r2, Heap::kUndefinedValueRootIndex); + __ mov(r2, Operand(Factory::undefined_value())); __ push(r2); __ add(r0, r0, Operand(1)); __ bind(&done); @@ -327,10 +323,10 @@ __ tst(r2, Operand(kSmiTagMask)); __ b(eq, &call_to_object); - __ LoadRoot(r3, Heap::kNullValueRootIndex); + __ mov(r3, Operand(Factory::null_value())); __ cmp(r2, r3); __ b(eq, &use_global_receiver); - __ LoadRoot(r3, Heap::kUndefinedValueRootIndex); + __ mov(r3, Operand(Factory::undefined_value())); __ cmp(r2, r3); __ b(eq, &use_global_receiver); @@ -496,10 +492,10 @@ __ ldr(r0, MemOperand(fp, kRecvOffset)); __ tst(r0, Operand(kSmiTagMask)); __ b(eq, &call_to_object); - __ LoadRoot(r1, Heap::kNullValueRootIndex); + __ mov(r1, Operand(Factory::null_value())); __ cmp(r0, r1); __ b(eq, &use_global_receiver); - __ LoadRoot(r1, Heap::kUndefinedValueRootIndex); + __ mov(r1, Operand(Factory::undefined_value())); __ cmp(r0, r1); __ b(eq, &use_global_receiver); @@ -669,7 +665,7 @@ // r1: function // r2: expected number of arguments // r3: code entry to call - __ LoadRoot(ip, Heap::kUndefinedValueRootIndex); + __ mov(ip, Operand(Factory::undefined_value())); __ sub(r2, fp, Operand(r2, LSL, kPointerSizeLog2)); __ sub(r2, r2, Operand(4 * kPointerSize)); // Adjust for frame. ======================================= --- /branches/bleeding_edge/src/arm/cfg-arm.cc Mon Aug 17 07:31:49 2009 +++ /branches/bleeding_edge/src/arm/cfg-arm.cc Mon Aug 17 17:12:26 2009 @@ -67,7 +67,7 @@ __ add(fp, sp, Operand(2 * kPointerSize)); int count = CfgGlobals::current()->fun()->scope()->num_stack_slots(); if (count > 0) { - __ LoadRoot(ip, Heap::kUndefinedValueRootIndex); + __ mov(ip, Operand(Factory::undefined_value())); for (int i = 0; i < count; i++) { __ push(ip); } ======================================= --- /branches/bleeding_edge/src/arm/codegen-arm.cc Mon Aug 17 07:31:49 2009 +++ /branches/bleeding_edge/src/arm/codegen-arm.cc Mon Aug 17 17:12:26 2009 @@ -305,7 +305,7 @@ // sp: stack pointer // fp: frame pointer // cp: callee's context - __ LoadRoot(r0, Heap::kUndefinedValueRootIndex); + __ mov(r0, Operand(Factory::undefined_value())); function_return_.Bind(); if (FLAG_trace) { @@ -478,11 +478,11 @@ JumpTarget loaded; JumpTarget materialize_true; materialize_true.Branch(cc_reg_); - __ LoadRoot(r0, Heap::kFalseValueRootIndex); + __ mov(r0, Operand(Factory::false_value())); frame_->EmitPush(r0); loaded.Jump(); materialize_true.Bind(); - __ LoadRoot(r0, Heap::kTrueValueRootIndex); + __ mov(r0, Operand(Factory::true_value())); frame_->EmitPush(r0); loaded.Bind(); cc_reg_ = al; @@ -499,7 +499,7 @@ // Load "true" if necessary. if (true_target.is_linked()) { true_target.Bind(); - __ LoadRoot(r0, Heap::kTrueValueRootIndex); + __ mov(r0, Operand(Factory::true_value())); frame_->EmitPush(r0); } // If both "true" and "false" need to be loaded jump across the code for @@ -510,7 +510,7 @@ // Load "false" if necessary. if (false_target.is_linked()) { false_target.Bind(); - __ LoadRoot(r0, Heap::kFalseValueRootIndex); + __ mov(r0, Operand(Factory::false_value())); frame_->EmitPush(r0); } // A value is loaded on all paths reaching this point. @@ -640,18 +640,15 @@ // Fast case checks // Check if the value is 'false'. - __ LoadRoot(ip, Heap::kFalseValueRootIndex); - __ cmp(r0, ip); + __ cmp(r0, Operand(Factory::false_value())); false_target->Branch(eq); // Check if the value is 'true'. - __ LoadRoot(ip, Heap::kTrueValueRootIndex); - __ cmp(r0, ip); + __ cmp(r0, Operand(Factory::true_value())); true_target->Branch(eq); // Check if the value is 'undefined'. - __ LoadRoot(ip, Heap::kUndefinedValueRootIndex); - __ cmp(r0, ip); + __ cmp(r0, Operand(Factory::undefined_value())); false_target->Branch(eq); // Check if the value is a smi. @@ -664,8 +661,7 @@ frame_->EmitPush(r0); frame_->CallRuntime(Runtime::kToBool, 1); // Convert the result (r0) to a condition code. - __ LoadRoot(ip, Heap::kFalseValueRootIndex); - __ cmp(r0, ip); + __ cmp(r0, Operand(Factory::false_value())); cc_reg_ = ne; } @@ -1189,7 +1185,7 @@ // 'undefined') because we may have a (legal) redeclaration and we // must not destroy the current value. if (node->mode() == Variable::CONST) { - __ LoadRoot(r0, Heap::kTheHoleValueRootIndex); + __ mov(r0, Operand(Factory::the_hole_value())); frame_->EmitPush(r0); } else if (node->fun() != NULL) { LoadAndSpill(node->fun()); @@ -1729,11 +1725,9 @@ // Both SpiderMonkey and kjs ignore null and undefined in contrast // to the specification. 12.6.4 mandates a call to ToObject. frame_->EmitPop(r0); - __ LoadRoot(ip, Heap::kUndefinedValueRootIndex); - __ cmp(r0, ip); + __ cmp(r0, Operand(Factory::undefined_value())); exit.Branch(eq); - __ LoadRoot(ip, Heap::kNullValueRootIndex); - __ cmp(r0, ip); + __ cmp(r0, Operand(Factory::null_value())); exit.Branch(eq); // Stack layout in body: @@ -1765,8 +1759,7 @@ // Otherwise, we got a FixedArray, and we have to do a slow check. __ mov(r2, Operand(r0)); __ ldr(r1, FieldMemOperand(r2, HeapObject::kMapOffset)); - __ LoadRoot(ip, Heap::kMetaMapRootIndex); - __ cmp(r1, ip); + __ cmp(r1, Operand(Factory::meta_map())); fixed_array.Branch(ne); // Get enum cache @@ -1840,8 +1833,7 @@ __ mov(r3, Operand(r0)); // If the property has been removed while iterating, we just skip it. - __ LoadRoot(ip, Heap::kNullValueRootIndex); - __ cmp(r3, ip); + __ cmp(r3, Operand(Factory::null_value())); node->continue_target()->Branch(eq); end_del_check.Bind(); @@ -2101,7 +2093,7 @@ // Fake a top of stack value (unneeded when FALLING) and set the // state in r2, then jump around the unlink blocks if any. - __ LoadRoot(r0, Heap::kUndefinedValueRootIndex); + __ mov(r0, Operand(Factory::undefined_value())); frame_->EmitPush(r0); __ mov(r2, Operand(Smi::FromInt(FALLING))); if (nof_unlinks > 0) { @@ -2143,7 +2135,7 @@ frame_->EmitPush(r0); } else { // Fake TOS for targets that shadowed breaks and continues. - __ LoadRoot(r0, Heap::kUndefinedValueRootIndex); + __ mov(r0, Operand(Factory::undefined_value())); frame_->EmitPush(r0); } __ mov(r2, Operand(Smi::FromInt(JUMPING + i))); @@ -2330,9 +2322,8 @@ r2, &slow)); if (potential_slot->var()->mode() == Variable::CONST) { - __ LoadRoot(ip, Heap::kTheHoleValueRootIndex); - __ cmp(r0, ip); - __ LoadRoot(r0, Heap::kUndefinedValueRootIndex, eq); + __ cmp(r0, Operand(Factory::the_hole_value())); + __ mov(r0, Operand(Factory::undefined_value()), LeaveCC, eq); } // There is always control flow to slow from // ContextSlotOperandCheckExtensions so we have to jump around @@ -2369,9 +2360,8 @@ // value. Comment cmnt(masm_, "[ Unhole const"); frame_->EmitPop(r0); - __ LoadRoot(ip, Heap::kTheHoleValueRootIndex); - __ cmp(r0, ip); - __ LoadRoot(r0, Heap::kUndefinedValueRootIndex, eq); + __ cmp(r0, Operand(Factory::the_hole_value())); + __ mov(r0, Operand(Factory::undefined_value()), LeaveCC, eq); frame_->EmitPush(r0); } } @@ -2414,8 +2404,7 @@ __ bind(&next); // Terminate at global context. __ ldr(tmp2, FieldMemOperand(tmp, HeapObject::kMapOffset)); - __ LoadRoot(ip, Heap::kGlobalContextMapRootIndex); - __ cmp(tmp2, ip); + __ cmp(tmp2, Operand(Factory::global_context_map())); __ b(eq, &fast); // Check that extension is NULL. __ ldr(tmp2, ContextOperand(tmp, Context::EXTENSION_INDEX)); @@ -2512,8 +2501,7 @@ __ ldr(r2, FieldMemOperand(r1, literal_offset)); JumpTarget done; - __ LoadRoot(ip, Heap::kUndefinedValueRootIndex); - __ cmp(r2, ip); + __ cmp(r2, Operand(Factory::undefined_value())); done.Branch(ne); // If the entry is undefined we call the runtime system to computed @@ -2595,8 +2583,7 @@ // Check whether we need to materialize the object literal boilerplate. // If so, jump to the deferred code. - __ LoadRoot(ip, Heap::kUndefinedValueRootIndex); - __ cmp(r2, Operand(ip)); + __ cmp(r2, Operand(Factory::undefined_value())); deferred->Branch(eq); deferred->BindExit(); @@ -2718,8 +2705,7 @@ // Check whether we need to materialize the object literal boilerplate. // If so, jump to the deferred code. - __ LoadRoot(ip, Heap::kUndefinedValueRootIndex); - __ cmp(r2, Operand(ip)); + __ cmp(r2, Operand(Factory::undefined_value())); deferred->Branch(eq); deferred->BindExit(); @@ -3050,7 +3036,7 @@ // Prepare stack for call to resolved function. LoadAndSpill(function); - __ LoadRoot(r2, Heap::kUndefinedValueRootIndex); + __ mov(r2, Operand(Factory::undefined_value())); frame_->EmitPush(r2); // Slot for receiver int arg_count = args->length(); for (int i = 0; i < arg_count; i++) { @@ -3194,7 +3180,7 @@ // Non-JS objects have class null. null.Bind(); - __ LoadRoot(r0, Heap::kNullValueRootIndex); + __ mov(r0, Operand(Factory::null_value())); frame_->EmitPush(r0); // All done. @@ -3267,7 +3253,7 @@ __ CallRuntime(Runtime::kLog, 2); } #endif - __ LoadRoot(r0, Heap::kUndefinedValueRootIndex); + __ mov(r0, Operand(Factory::undefined_value())); frame_->EmitPush(r0); } @@ -3288,7 +3274,7 @@ void CodeGenerator::GenerateFastCharCodeAt(ZoneList<Expression*>* args) { VirtualFrame::SpilledScope spilled_scope; ASSERT(args->length() == 2); - __ LoadRoot(r0, Heap::kUndefinedValueRootIndex); + __ mov(r0, Operand(Factory::undefined_value())); frame_->EmitPush(r0); } @@ -3508,14 +3494,14 @@ } else { // Default: Result of deleting non-global, not dynamically // introduced variables is false. - __ LoadRoot(r0, Heap::kFalseValueRootIndex); + __ mov(r0, Operand(Factory::false_value())); } } else { // Default: Result of deleting expressions is true. LoadAndSpill(node->expression()); // may have side-effects frame_->Drop(); - __ LoadRoot(r0, Heap::kTrueValueRootIndex); + __ mov(r0, Operand(Factory::true_value())); } frame_->EmitPush(r0); @@ -3568,7 +3554,7 @@ case Token::VOID: // since the stack top is cached in r0, popping and then // pushing a value can be done by just writing to r0. - __ LoadRoot(r0, Heap::kUndefinedValueRootIndex); + __ mov(r0, Operand(Factory::undefined_value())); break; case Token::ADD: { @@ -3894,16 +3880,14 @@ if (left_is_null || right_is_null) { LoadAndSpill(left_is_null ? right : left); frame_->EmitPop(r0); - __ LoadRoot(ip, Heap::kNullValueRootIndex); - __ cmp(r0, ip); + __ cmp(r0, Operand(Factory::null_value())); // The 'null' value is only equal to 'undefined' if using non-strict // comparisons. if (op != Token::EQ_STRICT) { true_target()->Branch(eq); - __ LoadRoot(ip, Heap::kUndefinedValueRootIndex); - __ cmp(r0, Operand(ip)); + __ cmp(r0, Operand(Factory::undefined_value())); true_target()->Branch(eq); __ tst(r0, Operand(kSmiTagMask)); @@ -3940,8 +3924,7 @@ __ tst(r1, Operand(kSmiTagMask)); true_target()->Branch(eq); __ ldr(r1, FieldMemOperand(r1, HeapObject::kMapOffset)); - __ LoadRoot(ip, Heap::kHeapNumberMapRootIndex); - __ cmp(r1, ip); + __ cmp(r1, Operand(Factory::heap_number_map())); cc_reg_ = eq; } else if (check->Equals(Heap::string_symbol())) { @@ -3961,16 +3944,13 @@ cc_reg_ = lt; } else if (check->Equals(Heap::boolean_symbol())) { - __ LoadRoot(ip, Heap::kTrueValueRootIndex); - __ cmp(r1, ip); + __ cmp(r1, Operand(Factory::true_value())); true_target()->Branch(eq); - __ LoadRoot(ip, Heap::kFalseValueRootIndex); - __ cmp(r1, ip); + __ cmp(r1, Operand(Factory::false_value())); cc_reg_ = eq; } else if (check->Equals(Heap::undefined_symbol())) { - __ LoadRoot(ip, Heap::kUndefinedValueRootIndex); - __ cmp(r1, ip); + __ cmp(r1, Operand(Factory::undefined_value())); true_target()->Branch(eq); __ tst(r1, Operand(kSmiTagMask)); @@ -3995,8 +3975,7 @@ false_target()->Branch(eq); __ ldr(r2, FieldMemOperand(r1, HeapObject::kMapOffset)); - __ LoadRoot(ip, Heap::kNullValueRootIndex); - __ cmp(r1, ip); + __ cmp(r1, Operand(Factory::null_value())); true_target()->Branch(eq); // It can be an undetectable object. @@ -4227,8 +4206,7 @@ // executed, the code is identical to a normal store (see below). Comment cmnt(masm, "[ Init const"); __ ldr(r2, cgen_->SlotOperand(slot, r2)); - __ LoadRoot(ip, Heap::kTheHoleValueRootIndex); - __ cmp(r2, ip); + __ cmp(r2, Operand(Factory::the_hole_value())); exit.Branch(ne); } @@ -4961,7 +4939,7 @@ // Tag and adjust back to start of new object. __ sub(result_reg, result_reg, Operand(HeapNumber::kSize - kHeapObjectTag)); // Get heap number map into scratch2. - __ LoadRoot(scratch2, Heap::kHeapNumberMapRootIndex); + __ mov(scratch2, Operand(Factory::heap_number_map())); // Store heap number map in new object. __ str(scratch2, FieldMemOperand(result_reg, HeapObject::kMapOffset)); } @@ -6107,8 +6085,7 @@ __ bind(&loop); __ cmp(r2, Operand(r4)); __ b(eq, &is_instance); - __ LoadRoot(ip, Heap::kNullValueRootIndex); - __ cmp(r2, ip); + __ cmp(r2, Operand(Factory::null_value())); __ b(eq, &is_not_instance); __ ldr(r2, FieldMemOperand(r2, HeapObject::kMapOffset)); __ ldr(r2, FieldMemOperand(r2, Map::kPrototypeOffset)); ======================================= --- /branches/bleeding_edge/src/arm/disasm-arm.cc Mon Aug 17 07:31:49 2009 +++ /branches/bleeding_edge/src/arm/disasm-arm.cc Mon Aug 17 17:12:26 2009 @@ -842,7 +842,7 @@ // formatting. See for example the command "objdump -d <binary file>". static const char* reg_names[kMaxRegisters] = { "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", - "r8", "r9", "r10", "fp", "ip", "sp", "lr", "pc", + "r8", "r9", "sl", "fp", "ip", "sp", "lr", "pc", }; ======================================= --- /branches/bleeding_edge/src/arm/ic-arm.cc Mon Aug 17 07:31:49 2009 +++ /branches/bleeding_edge/src/arm/ic-arm.cc Mon Aug 17 17:12:26 2009 @@ -87,8 +87,7 @@ // Check that the properties array is a dictionary. __ ldr(t0, FieldMemOperand(t1, JSObject::kPropertiesOffset)); __ ldr(r3, FieldMemOperand(t0, HeapObject::kMapOffset)); - __ LoadRoot(ip, Heap::kHashTableMapRootIndex); - __ cmp(r3, ip); + __ cmp(r3, Operand(Factory::hash_table_map())); __ b(ne, miss); // Compute the capacity mask. @@ -255,11 +254,9 @@ // Check for boolean. __ bind(&non_string); - __ LoadRoot(ip, Heap::kTrueValueRootIndex); - __ cmp(r1, ip); + __ cmp(r1, Operand(Factory::true_value())); __ b(eq, &boolean); - __ LoadRoot(ip, Heap::kFalseValueRootIndex); - __ cmp(r1, ip); + __ cmp(r1, Operand(Factory::false_value())); __ b(ne, &miss); __ bind(&boolean); StubCompiler::GenerateLoadGlobalFunctionPrototype( @@ -585,8 +582,7 @@ __ ldr(r1, FieldMemOperand(r1, JSObject::kElementsOffset)); // Check that the object is in fast mode (not dictionary). __ ldr(r3, FieldMemOperand(r1, HeapObject::kMapOffset)); - __ LoadRoot(ip, Heap::kFixedArrayMapRootIndex); - __ cmp(r3, ip); + __ cmp(r3, Operand(Factory::fixed_array_map())); __ b(ne, &slow); // Check that the key (index) is within bounds. __ ldr(r3, FieldMemOperand(r1, Array::kLengthOffset)); @@ -605,8 +601,7 @@ __ bind(&fast); __ add(r3, r1, Operand(FixedArray::kHeaderSize - kHeapObjectTag)); __ ldr(r0, MemOperand(r3, r0, LSL, kPointerSizeLog2)); - __ LoadRoot(ip, Heap::kTheHoleValueRootIndex); - __ cmp(r0, ip); + __ cmp(r0, Operand(Factory::the_hole_value())); // In case the loaded value is the_hole we have to consult GetProperty // to ensure the prototype chain is searched. __ b(eq, &slow); @@ -666,8 +661,7 @@ __ ldr(r3, FieldMemOperand(r3, JSObject::kElementsOffset)); // Check that the object is in fast mode (not dictionary). __ ldr(r2, FieldMemOperand(r3, HeapObject::kMapOffset)); - __ LoadRoot(ip, Heap::kFixedArrayMapRootIndex); - __ cmp(r2, ip); + __ cmp(r2, Operand(Factory::fixed_array_map())); __ b(ne, &slow); // Untag the key (for checking against untagged length in the fixed array). __ mov(r1, Operand(r1, ASR, kSmiTagSize)); @@ -716,8 +710,7 @@ __ bind(&array); __ ldr(r2, FieldMemOperand(r3, JSObject::kElementsOffset)); __ ldr(r1, FieldMemOperand(r2, HeapObject::kMapOffset)); - __ LoadRoot(ip, Heap::kFixedArrayMapRootIndex); - __ cmp(r1, ip); + __ cmp(r1, Operand(Factory::fixed_array_map())); __ b(ne, &slow); // Check the key against the length in the array, compute the ======================================= --- /branches/bleeding_edge/src/arm/macro-assembler-arm.cc Mon Aug 17 07:31:49 2009 +++ /branches/bleeding_edge/src/arm/macro-assembler-arm.cc Mon Aug 17 17:12:26 2009 @@ -172,13 +172,6 @@ b(targets[i]); } } - - -void MacroAssembler::LoadRoot(Register destination, - Heap::RootListIndex index, - Condition cond) { - ldr(destination, MemOperand(r10, index << kPointerSizeLog2), cond); -} // Will clobber 4 registers: object, offset, scratch, ip. The @@ -721,8 +714,7 @@ push(holder_reg); // Temporarily save holder on the stack. // Read the first word and compare to the global_context_map. ldr(holder_reg, FieldMemOperand(scratch, HeapObject::kMapOffset)); - LoadRoot(ip, Heap::kGlobalContextMapRootIndex); - cmp(holder_reg, ip); + cmp(holder_reg, Operand(Factory::global_context_map())); Check(eq, "JSGlobalObject::global_context should be a global context."); pop(holder_reg); // Restore holder. } @@ -739,13 +731,11 @@ // that ip is clobbered as part of cmp with an object Operand. push(holder_reg); // Temporarily save holder on the stack. mov(holder_reg, ip); // Move ip to its holding place. - LoadRoot(ip, Heap::kNullValueRootIndex); - cmp(holder_reg, ip); + cmp(holder_reg, Operand(Factory::null_value())); Check(ne, "JSGlobalProxy::context() should not be null."); ldr(holder_reg, FieldMemOperand(holder_reg, HeapObject::kMapOffset)); - LoadRoot(ip, Heap::kGlobalContextMapRootIndex); - cmp(holder_reg, ip); + cmp(holder_reg, Operand(Factory::global_context_map())); Check(eq, "JSGlobalObject::global_context should be a global context."); // Restore ip is not needed. ip is reloaded below. pop(holder_reg); // Restore holder. @@ -802,8 +792,7 @@ // If the prototype or initial map is the hole, don't return it and // simply miss the cache instead. This will allow us to allocate a // prototype object on-demand in the runtime system. - LoadRoot(ip, Heap::kTheHoleValueRootIndex); - cmp(result, ip); + cmp(result, Operand(Factory::the_hole_value())); b(eq, miss); // If the function does not have an initial map, we're done. @@ -843,7 +832,7 @@ if (num_arguments > 0) { add(sp, sp, Operand(num_arguments * kPointerSize)); } - LoadRoot(r0, Heap::kUndefinedValueRootIndex); + mov(r0, Operand(Factory::undefined_value())); } ======================================= --- /branches/bleeding_edge/src/arm/macro-assembler-arm.h Mon Aug 17 07:31:49 2009 +++ /branches/bleeding_edge/src/arm/macro-assembler-arm.h Mon Aug 17 17:12:26 2009 @@ -89,10 +89,6 @@ void Ret(Condition cond = al); // Jumps to the label at the index given by the Smi in "index". void SmiJumpTable(Register index, Vector<Label*> targets); - // Load an object from the root table. - void LoadRoot(Register destination, - Heap::RootListIndex index, - Condition cond = al); // Sets the remembered set bit for [address+offset], where address is the // address of the heap object 'object'. The address must be in the first 8K ======================================= --- /branches/bleeding_edge/src/arm/stub-cache-arm.cc Mon Aug 17 07:31:49 2009 +++ /branches/bleeding_edge/src/arm/stub-cache-arm.cc Mon Aug 17 17:12:26 2009 @@ -395,8 +395,7 @@ __ mov(scratch, Operand(Handle<Object>(cell))); __ ldr(scratch, FieldMemOperand(scratch, JSGlobalPropertyCell::kValueOffset)); - __ LoadRoot(ip, Heap::kTheHoleValueRootIndex); - __ cmp(scratch, ip); + __ cmp(scratch, Operand(Factory::the_hole_value())); __ b(ne, miss); } object = JSObject::cast(object->GetPrototype()); @@ -668,11 +667,9 @@ case BOOLEAN_CHECK: { Label fast; // Check that the object is a boolean. - __ LoadRoot(ip, Heap::kTrueValueRootIndex); - __ cmp(r1, ip); + __ cmp(r1, Operand(Factory::true_value())); __ b(eq, &fast); - __ LoadRoot(ip, Heap::kFalseValueRootIndex); - __ cmp(r1, ip); + __ cmp(r1, Operand(Factory::false_value())); __ b(ne, &miss); __ bind(&fast); // Check that the maps starting from the prototype haven't changed. @@ -691,8 +688,7 @@ __ ldr(r3, FieldMemOperand(r1, JSObject::kElementsOffset)); // Check that the object is in fast mode (not dictionary). __ ldr(r2, FieldMemOperand(r3, HeapObject::kMapOffset)); - __ LoadRoot(ip, Heap::kFixedArrayMapRootIndex); - __ cmp(r2, ip); + __ cmp(r2, Operand(Factory::fixed_array_map())); __ b(ne, &miss); break; @@ -1112,8 +1108,7 @@ // Check for deleted property if property can actually be deleted. if (!is_dont_delete) { - __ LoadRoot(ip, Heap::kTheHoleValueRootIndex); - __ cmp(r0, ip); + __ cmp(r0, Operand(Factory::the_hole_value())); __ b(eq, &miss); } ======================================= --- /branches/bleeding_edge/src/arm/virtual-frame-arm.cc Mon Aug 17 07:31:49 2009 +++ /branches/bleeding_edge/src/arm/virtual-frame-arm.cc Mon Aug 17 17:12:26 2009 @@ -139,7 +139,7 @@ Comment cmnt(masm(), "[ Allocate space for locals"); Adjust(count); // Initialize stack slots with 'undefined' value. - __ LoadRoot(ip, Heap::kUndefinedValueRootIndex); + __ mov(ip, Operand(Factory::undefined_value())); for (int i = 0; i < count; i++) { __ push(ip); } ======================================= --- /branches/bleeding_edge/src/assembler.cc Mon Aug 17 07:31:49 2009 +++ /branches/bleeding_edge/src/assembler.cc Mon Aug 17 17:12:26 2009 @@ -561,11 +561,6 @@ ExternalReference ExternalReference::the_hole_value_location() { return ExternalReference(Factory::the_hole_value().location()); } - - -ExternalReference ExternalReference::roots_address() { - return ExternalReference(Heap::roots_address()); -} ExternalReference ExternalReference::address_of_stack_guard_limit() { ======================================= --- /branches/bleeding_edge/src/assembler.h Mon Aug 17 07:31:49 2009 +++ /branches/bleeding_edge/src/assembler.h Mon Aug 17 17:12:26 2009 @@ -398,9 +398,6 @@ // Static variable Factory::the_hole_value.location() static ExternalReference the_hole_value_location(); - // Static variable Heap::roots_address() - static ExternalReference roots_address(); - // Static variable StackGuard::address_of_jslimit() static ExternalReference address_of_stack_guard_limit(); ======================================= --- /branches/bleeding_edge/src/heap.h Mon Aug 17 07:31:49 2009 +++ /branches/bleeding_edge/src/heap.h Mon Aug 17 17:12:26 2009 @@ -730,9 +730,6 @@ // Update the next script id. static inline void SetLastScriptId(Object* last_script_id); - - // Generated code can embed this address to get access to the roots. - static Object** roots_address() { return roots_; } #ifdef DEBUG static void Print(); @@ -839,26 +836,6 @@ return (PromotedSpaceSize() + PromotedExternalMemorySize()) > old_gen_allocation_limit_; } - - // Declare all the root indices. - enum RootListIndex { -#define ROOT_INDEX_DECLARATION(type, name, camel_name) k##camel_name##RootIndex, - STRONG_ROOT_LIST(ROOT_INDEX_DECLARATION) -#undef ROOT_INDEX_DECLARATION - -// Utility type maps -#define DECLARE_STRUCT_MAP(NAME, Name, name) k##Name##MapRootIndex, - STRUCT_LIST(DECLARE_STRUCT_MAP) -#undef DECLARE_STRUCT_MAP - -#define SYMBOL_INDEX_DECLARATION(name, str) k##name##RootIndex, - SYMBOL_LIST(SYMBOL_INDEX_DECLARATION) -#undef SYMBOL_DECLARATION - - kSymbolTableRootIndex, - kStrongRootListLength = kSymbolTableRootIndex, - kRootListLength - }; private: static int semispace_size_; @@ -940,6 +917,26 @@ // last GC. static int old_gen_exhausted_; + // Declare all the root indices. + enum RootListIndex { +#define ROOT_INDEX_DECLARATION(type, name, camel_name) k##camel_name##RootIndex, + STRONG_ROOT_LIST(ROOT_INDEX_DECLARATION) +#undef ROOT_INDEX_DECLARATION + +// Utility type maps +#define DECLARE_STRUCT_MAP(NAME, Name, name) k##Name##MapRootIndex, + STRUCT_LIST(DECLARE_STRUCT_MAP) +#undef DECLARE_STRUCT_MAP + +#define SYMBOL_INDEX_DECLARATION(name, str) k##name##RootIndex, + SYMBOL_LIST(SYMBOL_INDEX_DECLARATION) +#undef SYMBOL_DECLARATION + + kSymbolTableRootIndex, + kStrongRootListLength = kSymbolTableRootIndex, + kRootListLength + }; + static Object* roots_[kRootListLength]; struct StringTypeTable { ======================================= --- /branches/bleeding_edge/src/serialize.cc Mon Aug 17 07:31:49 2009 +++ /branches/bleeding_edge/src/serialize.cc Mon Aug 17 17:12:26 2009 @@ -672,17 +672,13 @@ UNCLASSIFIED, 2, "Factory::the_hole_value().location()"); - Add(ExternalReference::roots_address().address(), - UNCLASSIFIED, - 3, - "Heap::roots_address()"); Add(ExternalReference::address_of_stack_guard_limit().address(), UNCLASSIFIED, - 4, + 3, "StackGuard::address_of_jslimit()"); Add(ExternalReference::address_of_regexp_stack_limit().address(), UNCLASSIFIED, - 5, + 4, "RegExpStack::limit_address()"); Add(ExternalReference::new_space_start().address(), UNCLASSIFIED, @@ -703,36 +699,36 @@ #ifdef ENABLE_DEBUGGER_SUPPORT Add(ExternalReference::debug_break().address(), UNCLASSIFIED, - 10, + 5, "Debug::Break()"); Add(ExternalReference::debug_step_in_fp_address().address(), UNCLASSIFIED, - 11, + 10, "Debug::step_in_fp_addr()"); #endif Add(ExternalReference::double_fp_operation(Token::ADD).address(), UNCLASSIFIED, - 12, + 11, "add_two_doubles"); Add(ExternalReference::double_fp_operation(Token::SUB).address(), UNCLASSIFIED, - 13, + 12, "sub_two_doubles"); Add(ExternalReference::double_fp_operation(Token::MUL).address(), UNCLASSIFIED, - 14, + 13, "mul_two_doubles"); Add(ExternalReference::double_fp_operation(Token::DIV).address(), UNCLASSIFIED, - 15, + 14, "div_two_doubles"); Add(ExternalReference::double_fp_operation(Token::MOD).address(), UNCLASSIFIED, - 16, + 15, "mod_two_doubles"); Add(ExternalReference::compare_doubles().address(), UNCLASSIFIED, - 17, + 16, "compare_doubles"); } ======================================= --- /branches/bleeding_edge/test/cctest/test-disasm-arm.cc Mon Aug 17 07:31:49 2009 +++ /branches/bleeding_edge/test/cctest/test-disasm-arm.cc Mon Aug 17 17:12:26 2009 @@ -123,13 +123,13 @@ "20354189 eorcss r4, r5, r9, lsl #3"); COMPARE(sub(r5, r6, Operand(r10, LSL, 31), LeaveCC, hs), - "20465f8a subcs r5, r6, r10, lsl #31"); + "20465f8a subcs r5, r6, sl, lsl #31"); COMPARE(sub(r5, r6, Operand(r10, LSL, 30), SetCC, cc), - "30565f0a subccs r5, r6, r10, lsl #30"); + "30565f0a subccs r5, r6, sl, lsl #30"); COMPARE(sub(r5, r6, Operand(r10, LSL, 24), LeaveCC, lo), - "30465c0a subcc r5, r6, r10, lsl #24"); + "30465c0a subcc r5, r6, sl, lsl #24"); COMPARE(sub(r5, r6, Operand(r10, LSL, 16), SetCC, mi), - "4056580a submis r5, r6, r10, lsl #16"); + "4056580a submis r5, r6, sl, lsl #16"); COMPARE(rsb(r6, r7, Operand(fp)), "e067600b rsb r6, r7, fp"); @@ -163,7 +163,7 @@ COMPARE(sbc(r7, r9, Operand(ip, ROR, 4)), "e0c9726c sbc r7, r9, ip, ror #4"); COMPARE(sbc(r7, r10, Operand(ip), SetCC), - "e0da700c sbcs r7, r10, ip"); + "e0da700c sbcs r7, sl, ip"); COMPARE(sbc(r7, ip, Operand(ip, ROR, 31), SetCC, hi), "80dc7fec sbchis r7, ip, ip, ror #31"); @@ -240,7 +240,7 @@ "51d10004 bicpls r0, r1, r4"); COMPARE(mvn(r10, Operand(r1)), - "e1e0a001 mvn r10, r1"); + "e1e0a001 mvn sl, r1"); COMPARE(mvn(r9, Operand(r2)), "e1e09002 mvn r9, r2"); COMPARE(mvn(r0, Operand(r3), SetCC), ======================================= --- /branches/bleeding_edge/test/cctest/test-serialize.cc Mon Aug 17 07:31:49 2009 +++ /branches/bleeding_edge/test/cctest/test-serialize.cc Mon Aug 17 17:12:26 2009 @@ -125,9 +125,9 @@ encoder.Encode(the_hole_value_location.address())); ExternalReference stack_guard_limit_address = ExternalReference::address_of_stack_guard_limit(); - CHECK_EQ(make_code(UNCLASSIFIED, 4), + CHECK_EQ(make_code(UNCLASSIFIED, 3), encoder.Encode(stack_guard_limit_address.address())); - CHECK_EQ(make_code(UNCLASSIFIED, 10), + CHECK_EQ(make_code(UNCLASSIFIED, 5), encoder.Encode(ExternalReference::debug_break().address())); CHECK_EQ(make_code(UNCLASSIFIED, 6), encoder.Encode(ExternalReference::new_space_start().address())); @@ -157,9 +157,9 @@ CHECK_EQ(ExternalReference::the_hole_value_location().address(), decoder.Decode(make_code(UNCLASSIFIED, 2))); CHECK_EQ(ExternalReference::address_of_stack_guard_limit().address(), - decoder.Decode(make_code(UNCLASSIFIED, 4))); + decoder.Decode(make_code(UNCLASSIFIED, 3))); CHECK_EQ(ExternalReference::debug_break().address(), - decoder.Decode(make_code(UNCLASSIFIED, 10))); + decoder.Decode(make_code(UNCLASSIFIED, 5))); CHECK_EQ(ExternalReference::new_space_start().address(), decoder.Decode(make_code(UNCLASSIFIED, 6))); } --~--~---------~--~----~------------~-------~--~----~ v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev -~----------~----~----~----~------~----~------~--~---
