OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 2064 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2075 // root array to force relocation to be able to later patch with | 2075 // root array to force relocation to be able to later patch with |
2076 // the cached map. | 2076 // the cached map. |
2077 Handle<JSGlobalPropertyCell> cell = | 2077 Handle<JSGlobalPropertyCell> cell = |
2078 factory()->NewJSGlobalPropertyCell(factory()->the_hole_value()); | 2078 factory()->NewJSGlobalPropertyCell(factory()->the_hole_value()); |
2079 __ li(at, Operand(Handle<Object>(cell))); | 2079 __ li(at, Operand(Handle<Object>(cell))); |
2080 __ lw(at, FieldMemOperand(at, JSGlobalPropertyCell::kValueOffset)); | 2080 __ lw(at, FieldMemOperand(at, JSGlobalPropertyCell::kValueOffset)); |
2081 __ Branch(&cache_miss, ne, map, Operand(at)); | 2081 __ Branch(&cache_miss, ne, map, Operand(at)); |
2082 // We use Factory::the_hole_value() on purpose instead of loading from the | 2082 // We use Factory::the_hole_value() on purpose instead of loading from the |
2083 // root array to force relocation to be able to later patch | 2083 // root array to force relocation to be able to later patch |
2084 // with true or false. | 2084 // with true or false. |
2085 __ li(result, Operand(factory()->the_hole_value()), true); | 2085 __ li(result, Operand(factory()->the_hole_value()), CONSTANT_SIZE); |
2086 __ Branch(&done); | 2086 __ Branch(&done); |
2087 | 2087 |
2088 // The inlined call site cache did not match. Check null and string before | 2088 // The inlined call site cache did not match. Check null and string before |
2089 // calling the deferred code. | 2089 // calling the deferred code. |
2090 __ bind(&cache_miss); | 2090 __ bind(&cache_miss); |
2091 // Null is not instance of anything. | 2091 // Null is not instance of anything. |
2092 __ LoadRoot(temp, Heap::kNullValueRootIndex); | 2092 __ LoadRoot(temp, Heap::kNullValueRootIndex); |
2093 __ Branch(&false_result, eq, object, Operand(temp)); | 2093 __ Branch(&false_result, eq, object, Operand(temp)); |
2094 | 2094 |
2095 // String values is not instance of anything. | 2095 // String values is not instance of anything. |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2130 // offset to the location of the map check. | 2130 // offset to the location of the map check. |
2131 Register temp = ToRegister(instr->TempAt(0)); | 2131 Register temp = ToRegister(instr->TempAt(0)); |
2132 ASSERT(temp.is(t0)); | 2132 ASSERT(temp.is(t0)); |
2133 __ LoadHeapObject(InstanceofStub::right(), instr->function()); | 2133 __ LoadHeapObject(InstanceofStub::right(), instr->function()); |
2134 static const int kAdditionalDelta = 7; | 2134 static const int kAdditionalDelta = 7; |
2135 int delta = masm_->InstructionsGeneratedSince(map_check) + kAdditionalDelta; | 2135 int delta = masm_->InstructionsGeneratedSince(map_check) + kAdditionalDelta; |
2136 Label before_push_delta; | 2136 Label before_push_delta; |
2137 __ bind(&before_push_delta); | 2137 __ bind(&before_push_delta); |
2138 { | 2138 { |
2139 Assembler::BlockTrampolinePoolScope block_trampoline_pool(masm_); | 2139 Assembler::BlockTrampolinePoolScope block_trampoline_pool(masm_); |
2140 __ li(temp, Operand(delta * kPointerSize), true); | 2140 __ li(temp, Operand(delta * kPointerSize), CONSTANT_SIZE); |
2141 __ StoreToSafepointRegisterSlot(temp, temp); | 2141 __ StoreToSafepointRegisterSlot(temp, temp); |
2142 } | 2142 } |
2143 CallCodeGeneric(stub.GetCode(), | 2143 CallCodeGeneric(stub.GetCode(), |
2144 RelocInfo::CODE_TARGET, | 2144 RelocInfo::CODE_TARGET, |
2145 instr, | 2145 instr, |
2146 RECORD_SAFEPOINT_WITH_REGISTERS_AND_NO_ARGUMENTS); | 2146 RECORD_SAFEPOINT_WITH_REGISTERS_AND_NO_ARGUMENTS); |
2147 ASSERT(instr->HasDeoptimizationEnvironment()); | 2147 ASSERT(instr->HasDeoptimizationEnvironment()); |
2148 LEnvironment* env = instr->deoptimization_environment(); | 2148 LEnvironment* env = instr->deoptimization_environment(); |
2149 safepoints_.RecordLazyDeoptimizationIndex(env->deoptimization_index()); | 2149 safepoints_.RecordLazyDeoptimizationIndex(env->deoptimization_index()); |
2150 // Put the result value into the result register slot and | 2150 // Put the result value into the result register slot and |
(...skipping 2895 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5046 __ Subu(scratch, result, scratch); | 5046 __ Subu(scratch, result, scratch); |
5047 __ lw(result, FieldMemOperand(scratch, | 5047 __ lw(result, FieldMemOperand(scratch, |
5048 FixedArray::kHeaderSize - kPointerSize)); | 5048 FixedArray::kHeaderSize - kPointerSize)); |
5049 __ bind(&done); | 5049 __ bind(&done); |
5050 } | 5050 } |
5051 | 5051 |
5052 | 5052 |
5053 #undef __ | 5053 #undef __ |
5054 | 5054 |
5055 } } // namespace v8::internal | 5055 } } // namespace v8::internal |
OLD | NEW |