Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(50)

Side by Side Diff: src/ppc/code-stubs-ppc.cc

Issue 1030353003: Enable constant pool support. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/v8.h" 5 #include "src/v8.h"
6 6
7 #if V8_TARGET_ARCH_PPC 7 #if V8_TARGET_ARCH_PPC
8 8
9 #include "src/base/bits.h" 9 #include "src/base/bits.h"
10 #include "src/bootstrapper.h" 10 #include "src/bootstrapper.h"
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
104 104
105 void HydrogenCodeStub::GenerateLightweightMiss(MacroAssembler* masm, 105 void HydrogenCodeStub::GenerateLightweightMiss(MacroAssembler* masm,
106 ExternalReference miss) { 106 ExternalReference miss) {
107 // Update the static counter each time a new code stub is generated. 107 // Update the static counter each time a new code stub is generated.
108 isolate()->counters()->code_stubs()->Increment(); 108 isolate()->counters()->code_stubs()->Increment();
109 109
110 CallInterfaceDescriptor descriptor = GetCallInterfaceDescriptor(); 110 CallInterfaceDescriptor descriptor = GetCallInterfaceDescriptor();
111 int param_count = descriptor.GetEnvironmentParameterCount(); 111 int param_count = descriptor.GetEnvironmentParameterCount();
112 { 112 {
113 // Call the runtime system in a fresh internal frame. 113 // Call the runtime system in a fresh internal frame.
114 FrameScope scope(masm, StackFrame::INTERNAL); 114 FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL);
115 DCHECK(param_count == 0 || 115 DCHECK(param_count == 0 ||
116 r3.is(descriptor.GetEnvironmentParameterRegister(param_count - 1))); 116 r3.is(descriptor.GetEnvironmentParameterRegister(param_count - 1)));
117 // Push arguments 117 // Push arguments
118 for (int i = 0; i < param_count; ++i) { 118 for (int i = 0; i < param_count; ++i) {
119 __ push(descriptor.GetEnvironmentParameterRegister(i)); 119 __ push(descriptor.GetEnvironmentParameterRegister(i));
120 } 120 }
121 __ CallExternalReference(miss, param_count); 121 __ CallExternalReference(miss, param_count);
122 } 122 }
123 123
124 __ Ret(); 124 __ Ret();
(...skipping 1026 matching lines...) Expand 10 before | Expand all | Expand 10 after
1151 } 1151 }
1152 1152
1153 // Retrieve the handler context, SP and FP. 1153 // Retrieve the handler context, SP and FP.
1154 __ mov(cp, Operand(pending_handler_context_address)); 1154 __ mov(cp, Operand(pending_handler_context_address));
1155 __ LoadP(cp, MemOperand(cp)); 1155 __ LoadP(cp, MemOperand(cp));
1156 __ mov(sp, Operand(pending_handler_sp_address)); 1156 __ mov(sp, Operand(pending_handler_sp_address));
1157 __ LoadP(sp, MemOperand(sp)); 1157 __ LoadP(sp, MemOperand(sp));
1158 __ mov(fp, Operand(pending_handler_fp_address)); 1158 __ mov(fp, Operand(pending_handler_fp_address));
1159 __ LoadP(fp, MemOperand(fp)); 1159 __ LoadP(fp, MemOperand(fp));
1160 1160
1161 // If the handler is a JS frame, restore the context to the frame. 1161 // If the handler is a JS frame, restore the context to the frame. Note that
1162 // (kind == ENTRY) == (fp == 0) == (cp == 0), so we could test either fp 1162 // the context will be set to (cp == 0) for non-JS frames.
1163 // or cp.
1164 Label skip; 1163 Label skip;
1165 __ cmpi(cp, Operand::Zero()); 1164 __ cmpi(cp, Operand::Zero());
1166 __ beq(&skip); 1165 __ beq(&skip);
1167 __ StoreP(cp, MemOperand(fp, StandardFrameConstants::kContextOffset)); 1166 __ StoreP(cp, MemOperand(fp, StandardFrameConstants::kContextOffset));
1168 __ bind(&skip); 1167 __ bind(&skip);
1169 1168
1170 // Compute the handler entry address and jump to it. 1169 // Compute the handler entry address and jump to it.
1170 ConstantPoolUnavailableScope constant_pool_unavailable(masm);
1171 __ mov(r4, Operand(pending_handler_code_address)); 1171 __ mov(r4, Operand(pending_handler_code_address));
1172 __ LoadP(r4, MemOperand(r4)); 1172 __ LoadP(r4, MemOperand(r4));
1173 __ mov(r5, Operand(pending_handler_offset_address)); 1173 __ mov(r5, Operand(pending_handler_offset_address));
1174 __ LoadP(r5, MemOperand(r5)); 1174 __ LoadP(r5, MemOperand(r5));
1175 __ addi(r4, r4, Operand(Code::kHeaderSize - kHeapObjectTag)); // Code start 1175 __ addi(r4, r4, Operand(Code::kHeaderSize - kHeapObjectTag)); // Code start
1176 if (FLAG_enable_embedded_constant_pool) {
1177 __ LoadTargetConstantPoolPointerRegister(r4);
1178 }
1176 __ add(ip, r4, r5); 1179 __ add(ip, r4, r5);
1177 __ Jump(ip); 1180 __ Jump(ip);
1178 } 1181 }
1179 1182
1180 1183
1181 void JSEntryStub::Generate(MacroAssembler* masm) { 1184 void JSEntryStub::Generate(MacroAssembler* masm) {
1182 // r3: code entry 1185 // r3: code entry
1183 // r4: function 1186 // r4: function
1184 // r5: receiver 1187 // r5: receiver
1185 // r6: argc 1188 // r6: argc
(...skipping 21 matching lines...) Expand all
1207 // __ lwz(r7, MemOperand(sp, offset_to_argv)); 1210 // __ lwz(r7, MemOperand(sp, offset_to_argv));
1208 1211
1209 // Push a frame with special values setup to mark it as an entry frame. 1212 // Push a frame with special values setup to mark it as an entry frame.
1210 // r3: code entry 1213 // r3: code entry
1211 // r4: function 1214 // r4: function
1212 // r5: receiver 1215 // r5: receiver
1213 // r6: argc 1216 // r6: argc
1214 // r7: argv 1217 // r7: argv
1215 __ li(r0, Operand(-1)); // Push a bad frame pointer to fail if it is used. 1218 __ li(r0, Operand(-1)); // Push a bad frame pointer to fail if it is used.
1216 __ push(r0); 1219 __ push(r0);
1220 if (FLAG_enable_embedded_constant_pool) {
1221 __ li(kConstantPoolRegister, Operand::Zero());
1222 __ push(kConstantPoolRegister);
1223 }
1217 int marker = type(); 1224 int marker = type();
1218 __ LoadSmiLiteral(r0, Smi::FromInt(marker)); 1225 __ LoadSmiLiteral(r0, Smi::FromInt(marker));
1219 __ push(r0); 1226 __ push(r0);
1220 __ push(r0); 1227 __ push(r0);
1221 // Save copies of the top frame descriptor on the stack. 1228 // Save copies of the top frame descriptor on the stack.
1222 __ mov(r8, Operand(ExternalReference(Isolate::kCEntryFPAddress, isolate()))); 1229 __ mov(r8, Operand(ExternalReference(Isolate::kCEntryFPAddress, isolate())));
1223 __ LoadP(r0, MemOperand(r8)); 1230 __ LoadP(r0, MemOperand(r8));
1224 __ push(r0); 1231 __ push(r0);
1225 1232
1226 // Set up frame pointer for the frame to be pushed. 1233 // Set up frame pointer for the frame to be pushed.
(...skipping 16 matching lines...) Expand all
1243 __ push(ip); // frame-type 1250 __ push(ip); // frame-type
1244 1251
1245 // Jump to a faked try block that does the invoke, with a faked catch 1252 // Jump to a faked try block that does the invoke, with a faked catch
1246 // block that sets the pending exception. 1253 // block that sets the pending exception.
1247 __ b(&invoke); 1254 __ b(&invoke);
1248 1255
1249 __ bind(&handler_entry); 1256 __ bind(&handler_entry);
1250 handler_offset_ = handler_entry.pos(); 1257 handler_offset_ = handler_entry.pos();
1251 // Caught exception: Store result (exception) in the pending exception 1258 // Caught exception: Store result (exception) in the pending exception
1252 // field in the JSEnv and return a failure sentinel. Coming in here the 1259 // field in the JSEnv and return a failure sentinel. Coming in here the
1253 // fp will be invalid because the PushTryHandler below sets it to 0 to 1260 // fp will be invalid because the PushStackHandler below sets it to 0 to
1254 // signal the existence of the JSEntry frame. 1261 // signal the existence of the JSEntry frame.
1255 __ mov(ip, Operand(ExternalReference(Isolate::kPendingExceptionAddress, 1262 __ mov(ip, Operand(ExternalReference(Isolate::kPendingExceptionAddress,
1256 isolate()))); 1263 isolate())));
1257 1264
1258 __ StoreP(r3, MemOperand(ip)); 1265 __ StoreP(r3, MemOperand(ip));
1259 __ LoadRoot(r3, Heap::kExceptionRootIndex); 1266 __ LoadRoot(r3, Heap::kExceptionRootIndex);
1260 __ b(&exit); 1267 __ b(&exit);
1261 1268
1262 // Invoke: Link this frame into the handler chain. There's only one 1269 // Invoke: Link this frame into the handler chain.
1263 // handler block in this code object, so its index is 0.
1264 __ bind(&invoke); 1270 __ bind(&invoke);
1265 // Must preserve r0-r4, r5-r7 are available. (needs update for PPC) 1271 // Must preserve r3-r7.
1266 __ PushTryHandler(StackHandler::JS_ENTRY, 0); 1272 __ PushStackHandler();
1267 // If an exception not caught by another handler occurs, this handler 1273 // If an exception not caught by another handler occurs, this handler
1268 // returns control to the code after the b(&invoke) above, which 1274 // returns control to the code after the b(&invoke) above, which
1269 // restores all kCalleeSaved registers (including cp and fp) to their 1275 // restores all kCalleeSaved registers (including cp and fp) to their
1270 // saved values before returning a failure to C. 1276 // saved values before returning a failure to C.
1271 1277
1272 // Clear any pending exceptions. 1278 // Clear any pending exceptions.
1273 __ mov(r8, Operand(isolate()->factory()->the_hole_value())); 1279 __ mov(r8, Operand(isolate()->factory()->the_hole_value()));
1274 __ mov(ip, Operand(ExternalReference(Isolate::kPendingExceptionAddress, 1280 __ mov(ip, Operand(ExternalReference(Isolate::kPendingExceptionAddress,
1275 isolate()))); 1281 isolate())));
1276 __ StoreP(r8, MemOperand(ip)); 1282 __ StoreP(r8, MemOperand(ip));
(...skipping 18 matching lines...) Expand all
1295 } 1301 }
1296 __ LoadP(ip, MemOperand(ip)); // deref address 1302 __ LoadP(ip, MemOperand(ip)); // deref address
1297 1303
1298 // Branch and link to JSEntryTrampoline. 1304 // Branch and link to JSEntryTrampoline.
1299 // the address points to the start of the code object, skip the header 1305 // the address points to the start of the code object, skip the header
1300 __ addi(ip, ip, Operand(Code::kHeaderSize - kHeapObjectTag)); 1306 __ addi(ip, ip, Operand(Code::kHeaderSize - kHeapObjectTag));
1301 __ mtctr(ip); 1307 __ mtctr(ip);
1302 __ bctrl(); // make the call 1308 __ bctrl(); // make the call
1303 1309
1304 // Unlink this frame from the handler chain. 1310 // Unlink this frame from the handler chain.
1305 __ PopTryHandler(); 1311 __ PopStackHandler();
1306 1312
1307 __ bind(&exit); // r3 holds result 1313 __ bind(&exit); // r3 holds result
1308 // Check if the current stack frame is marked as the outermost JS frame. 1314 // Check if the current stack frame is marked as the outermost JS frame.
1309 Label non_outermost_js_2; 1315 Label non_outermost_js_2;
1310 __ pop(r8); 1316 __ pop(r8);
1311 __ CmpSmiLiteral(r8, Smi::FromInt(StackFrame::OUTERMOST_JSENTRY_FRAME), r0); 1317 __ CmpSmiLiteral(r8, Smi::FromInt(StackFrame::OUTERMOST_JSENTRY_FRAME), r0);
1312 __ bne(&non_outermost_js_2); 1318 __ bne(&non_outermost_js_2);
1313 __ mov(r9, Operand::Zero()); 1319 __ mov(r9, Operand::Zero());
1314 __ mov(r8, Operand(ExternalReference(js_entry_sp))); 1320 __ mov(r8, Operand(ExternalReference(js_entry_sp)));
1315 __ StoreP(r9, MemOperand(r8)); 1321 __ StoreP(r9, MemOperand(r8));
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after
1517 1523
1518 // Slow-case. Tail call builtin. 1524 // Slow-case. Tail call builtin.
1519 __ bind(&slow); 1525 __ bind(&slow);
1520 if (!ReturnTrueFalseObject()) { 1526 if (!ReturnTrueFalseObject()) {
1521 if (HasArgsInRegisters()) { 1527 if (HasArgsInRegisters()) {
1522 __ Push(r3, r4); 1528 __ Push(r3, r4);
1523 } 1529 }
1524 __ InvokeBuiltin(Builtins::INSTANCE_OF, JUMP_FUNCTION); 1530 __ InvokeBuiltin(Builtins::INSTANCE_OF, JUMP_FUNCTION);
1525 } else { 1531 } else {
1526 { 1532 {
1527 FrameScope scope(masm, StackFrame::INTERNAL); 1533 FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL);
1528 __ Push(r3, r4); 1534 __ Push(r3, r4);
1529 __ InvokeBuiltin(Builtins::INSTANCE_OF, CALL_FUNCTION); 1535 __ InvokeBuiltin(Builtins::INSTANCE_OF, CALL_FUNCTION);
1530 } 1536 }
1531 if (CpuFeatures::IsSupported(ISELECT)) { 1537 if (CpuFeatures::IsSupported(ISELECT)) {
1532 __ cmpi(r3, Operand::Zero()); 1538 __ cmpi(r3, Operand::Zero());
1533 __ LoadRoot(r3, Heap::kTrueValueRootIndex); 1539 __ LoadRoot(r3, Heap::kTrueValueRootIndex);
1534 __ LoadRoot(r4, Heap::kFalseValueRootIndex); 1540 __ LoadRoot(r4, Heap::kFalseValueRootIndex);
1535 __ isel(eq, r3, r3, r4); 1541 __ isel(eq, r3, r3, r4);
1536 } else { 1542 } else {
1537 Label true_value, done; 1543 Label true_value, done;
(...skipping 1051 matching lines...) Expand 10 before | Expand all | Expand 10 after
2589 if (!FLAG_pretenuring_call_new) { 2595 if (!FLAG_pretenuring_call_new) {
2590 // Make sure the function is the Array() function. 2596 // Make sure the function is the Array() function.
2591 __ LoadGlobalFunction(Context::ARRAY_FUNCTION_INDEX, r7); 2597 __ LoadGlobalFunction(Context::ARRAY_FUNCTION_INDEX, r7);
2592 __ cmp(r4, r7); 2598 __ cmp(r4, r7);
2593 __ bne(&not_array_function); 2599 __ bne(&not_array_function);
2594 2600
2595 // The target function is the Array constructor, 2601 // The target function is the Array constructor,
2596 // Create an AllocationSite if we don't already have it, store it in the 2602 // Create an AllocationSite if we don't already have it, store it in the
2597 // slot. 2603 // slot.
2598 { 2604 {
2599 FrameScope scope(masm, StackFrame::INTERNAL); 2605 FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL);
2600 2606
2601 // Arguments register must be smi-tagged to call out. 2607 // Arguments register must be smi-tagged to call out.
2602 __ SmiTag(r3); 2608 __ SmiTag(r3);
2603 __ Push(r6, r5, r4, r3); 2609 __ Push(r6, r5, r4, r3);
2604 2610
2605 CreateAllocationSiteStub create_stub(masm->isolate()); 2611 CreateAllocationSiteStub create_stub(masm->isolate());
2606 __ CallStub(&create_stub); 2612 __ CallStub(&create_stub);
2607 2613
2608 __ Pop(r6, r5, r4, r3); 2614 __ Pop(r6, r5, r4, r3);
2609 __ SmiUntag(r3); 2615 __ SmiUntag(r3);
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
2675 __ li(r5, Operand::Zero()); 2681 __ li(r5, Operand::Zero());
2676 __ GetBuiltinFunction(r4, Builtins::CALL_NON_FUNCTION); 2682 __ GetBuiltinFunction(r4, Builtins::CALL_NON_FUNCTION);
2677 __ Jump(masm->isolate()->builtins()->ArgumentsAdaptorTrampoline(), 2683 __ Jump(masm->isolate()->builtins()->ArgumentsAdaptorTrampoline(),
2678 RelocInfo::CODE_TARGET); 2684 RelocInfo::CODE_TARGET);
2679 } 2685 }
2680 2686
2681 2687
2682 static void EmitWrapCase(MacroAssembler* masm, int argc, Label* cont) { 2688 static void EmitWrapCase(MacroAssembler* masm, int argc, Label* cont) {
2683 // Wrap the receiver and patch it back onto the stack. 2689 // Wrap the receiver and patch it back onto the stack.
2684 { 2690 {
2685 FrameScope frame_scope(masm, StackFrame::INTERNAL); 2691 FrameAndConstantPoolScope frame_scope(masm, StackFrame::INTERNAL);
2686 __ Push(r4, r6); 2692 __ Push(r4, r6);
2687 __ InvokeBuiltin(Builtins::TO_OBJECT, CALL_FUNCTION); 2693 __ InvokeBuiltin(Builtins::TO_OBJECT, CALL_FUNCTION);
2688 __ pop(r4); 2694 __ pop(r4);
2689 } 2695 }
2690 __ StoreP(r3, MemOperand(sp, argc * kPointerSize), r0); 2696 __ StoreP(r3, MemOperand(sp, argc * kPointerSize), r0);
2691 __ b(cont); 2697 __ b(cont);
2692 } 2698 }
2693 2699
2694 2700
2695 static void CallFunctionNoFeedback(MacroAssembler* masm, int argc, 2701 static void CallFunctionNoFeedback(MacroAssembler* masm, int argc,
(...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after
2993 // Update stats. 2999 // Update stats.
2994 __ LoadP(r7, FieldMemOperand(r5, with_types_offset)); 3000 __ LoadP(r7, FieldMemOperand(r5, with_types_offset));
2995 __ AddSmiLiteral(r7, r7, Smi::FromInt(1), r0); 3001 __ AddSmiLiteral(r7, r7, Smi::FromInt(1), r0);
2996 __ StoreP(r7, FieldMemOperand(r5, with_types_offset), r0); 3002 __ StoreP(r7, FieldMemOperand(r5, with_types_offset), r0);
2997 3003
2998 // Store the function. Use a stub since we need a frame for allocation. 3004 // Store the function. Use a stub since we need a frame for allocation.
2999 // r5 - vector 3005 // r5 - vector
3000 // r6 - slot 3006 // r6 - slot
3001 // r4 - function 3007 // r4 - function
3002 { 3008 {
3003 FrameScope scope(masm, StackFrame::INTERNAL); 3009 FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL);
3004 CreateWeakCellStub create_stub(masm->isolate()); 3010 CreateWeakCellStub create_stub(masm->isolate());
3005 __ Push(r4); 3011 __ Push(r4);
3006 __ CallStub(&create_stub); 3012 __ CallStub(&create_stub);
3007 __ Pop(r4); 3013 __ Pop(r4);
3008 } 3014 }
3009 3015
3010 __ b(&have_js_function); 3016 __ b(&have_js_function);
3011 3017
3012 // We are here because tracing is on or we encountered a MISS case we can't 3018 // We are here because tracing is on or we encountered a MISS case we can't
3013 // handle here. 3019 // handle here.
3014 __ bind(&miss); 3020 __ bind(&miss);
3015 GenerateMiss(masm); 3021 GenerateMiss(masm);
3016 3022
3017 // the slow case 3023 // the slow case
3018 __ bind(&slow_start); 3024 __ bind(&slow_start);
3019 // Check that the function is really a JavaScript function. 3025 // Check that the function is really a JavaScript function.
3020 // r4: pushed function (to be verified) 3026 // r4: pushed function (to be verified)
3021 __ JumpIfSmi(r4, &non_function); 3027 __ JumpIfSmi(r4, &non_function);
3022 3028
3023 // Goto slow case if we do not have a function. 3029 // Goto slow case if we do not have a function.
3024 __ CompareObjectType(r4, r7, r7, JS_FUNCTION_TYPE); 3030 __ CompareObjectType(r4, r7, r7, JS_FUNCTION_TYPE);
3025 __ bne(&slow); 3031 __ bne(&slow);
3026 __ b(&have_js_function); 3032 __ b(&have_js_function);
3027 } 3033 }
3028 3034
3029 3035
3030 void CallICStub::GenerateMiss(MacroAssembler* masm) { 3036 void CallICStub::GenerateMiss(MacroAssembler* masm) {
3031 FrameScope scope(masm, StackFrame::INTERNAL); 3037 FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL);
3032 3038
3033 // Push the function and feedback info. 3039 // Push the function and feedback info.
3034 __ Push(r4, r5, r6); 3040 __ Push(r4, r5, r6);
3035 3041
3036 // Call the entry. 3042 // Call the entry.
3037 IC::UtilityId id = GetICState() == DEFAULT ? IC::kCallIC_Miss 3043 IC::UtilityId id = GetICState() == DEFAULT ? IC::kCallIC_Miss
3038 : IC::kCallIC_Customization_Miss; 3044 : IC::kCallIC_Customization_Miss;
3039 3045
3040 ExternalReference miss = ExternalReference(IC_Utility(id), masm->isolate()); 3046 ExternalReference miss = ExternalReference(IC_Utility(id), masm->isolate());
3041 __ CallExternalReference(miss, 3); 3047 __ CallExternalReference(miss, 3);
(...skipping 948 matching lines...) Expand 10 before | Expand all | Expand 10 after
3990 GenerateMiss(masm); 3996 GenerateMiss(masm);
3991 } 3997 }
3992 3998
3993 3999
3994 void CompareICStub::GenerateMiss(MacroAssembler* masm) { 4000 void CompareICStub::GenerateMiss(MacroAssembler* masm) {
3995 { 4001 {
3996 // Call the runtime system in a fresh internal frame. 4002 // Call the runtime system in a fresh internal frame.
3997 ExternalReference miss = 4003 ExternalReference miss =
3998 ExternalReference(IC_Utility(IC::kCompareIC_Miss), isolate()); 4004 ExternalReference(IC_Utility(IC::kCompareIC_Miss), isolate());
3999 4005
4000 FrameScope scope(masm, StackFrame::INTERNAL); 4006 FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL);
4001 __ Push(r4, r3); 4007 __ Push(r4, r3);
4002 __ Push(r4, r3); 4008 __ Push(r4, r3);
4003 __ LoadSmiLiteral(r0, Smi::FromInt(op())); 4009 __ LoadSmiLiteral(r0, Smi::FromInt(op()));
4004 __ push(r0); 4010 __ push(r0);
4005 __ CallExternalReference(miss, 3); 4011 __ CallExternalReference(miss, 3);
4006 // Compute the entry point of the rewritten stub. 4012 // Compute the entry point of the rewritten stub.
4007 __ addi(r5, r3, Operand(Code::kHeaderSize - kHeapObjectTag)); 4013 __ addi(r5, r3, Operand(Code::kHeaderSize - kHeapObjectTag));
4008 // Restore registers. 4014 // Restore registers.
4009 __ Pop(r4, r3); 4015 __ Pop(r4, r3);
4010 } 4016 }
(...skipping 1577 matching lines...) Expand 10 before | Expand all | Expand 10 after
5588 kStackUnwindSpace, NULL, 5594 kStackUnwindSpace, NULL,
5589 MemOperand(fp, 6 * kPointerSize), NULL); 5595 MemOperand(fp, 6 * kPointerSize), NULL);
5590 } 5596 }
5591 5597
5592 5598
5593 #undef __ 5599 #undef __
5594 } 5600 }
5595 } // namespace v8::internal 5601 } // namespace v8::internal
5596 5602
5597 #endif // V8_TARGET_ARCH_PPC 5603 #endif // V8_TARGET_ARCH_PPC
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698