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

Side by Side Diff: src/ppc/builtins-ppc.cc

Issue 1448063002: PPC: [builtins] One runtime fallback is enough for the String constructor. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 1 month 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 #if V8_TARGET_ARCH_PPC 5 #if V8_TARGET_ARCH_PPC
6 6
7 #include "src/codegen.h" 7 #include "src/codegen.h"
8 #include "src/debug/debug.h" 8 #include "src/debug/debug.h"
9 #include "src/deoptimizer.h" 9 #include "src/deoptimizer.h"
10 #include "src/full-codegen/full-codegen.h" 10 #include "src/full-codegen/full-codegen.h"
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after
257 ToStringStub stub(masm->isolate()); 257 ToStringStub stub(masm->isolate());
258 __ Push(r4, r6); 258 __ Push(r4, r6);
259 __ mr(r3, r5); 259 __ mr(r3, r5);
260 __ CallStub(&stub); 260 __ CallStub(&stub);
261 __ mr(r5, r3); 261 __ mr(r5, r3);
262 __ Pop(r4, r6); 262 __ Pop(r4, r6);
263 } 263 }
264 __ bind(&done_convert); 264 __ bind(&done_convert);
265 } 265 }
266 266
267 // 3. Allocate a JSValue wrapper for the string. 267 // 3. Check if original constructor and constructor differ.
268 Label new_object;
269 __ cmp(r4, r6);
270 __ bne(&new_object);
271
272 // 4. Allocate a JSValue wrapper for the string.
268 { 273 {
269 // ----------- S t a t e ------------- 274 // ----------- S t a t e -------------
270 // -- r5 : the first argument 275 // -- r5 : the first argument
271 // -- r4 : constructor function 276 // -- r4 : constructor function
272 // -- r6 : original constructor 277 // -- r6 : original constructor
273 // -- lr : return address 278 // -- lr : return address
274 // ----------------------------------- 279 // -----------------------------------
275 280 __ Allocate(JSValue::kSize, r3, r7, r8, &new_object, TAG_OBJECT);
276 Label allocate, done_allocate, rt_call;
277
278 // Fall back to runtime if the original constructor and function differ.
279 __ cmp(r4, r6);
280 __ bne(&rt_call);
281
282 __ Allocate(JSValue::kSize, r3, r6, r7, &allocate, TAG_OBJECT);
283 __ bind(&done_allocate);
284 281
285 // Initialize the JSValue in r3. 282 // Initialize the JSValue in r3.
286 __ LoadGlobalFunctionInitialMap(r4, r6, r7); 283 __ LoadGlobalFunctionInitialMap(r4, r6, r7);
287 __ StoreP(r6, FieldMemOperand(r3, HeapObject::kMapOffset), r0); 284 __ StoreP(r6, FieldMemOperand(r3, HeapObject::kMapOffset), r0);
288 __ LoadRoot(r6, Heap::kEmptyFixedArrayRootIndex); 285 __ LoadRoot(r6, Heap::kEmptyFixedArrayRootIndex);
289 __ StoreP(r6, FieldMemOperand(r3, JSObject::kPropertiesOffset), r0); 286 __ StoreP(r6, FieldMemOperand(r3, JSObject::kPropertiesOffset), r0);
290 __ StoreP(r6, FieldMemOperand(r3, JSObject::kElementsOffset), r0); 287 __ StoreP(r6, FieldMemOperand(r3, JSObject::kElementsOffset), r0);
291 __ StoreP(r5, FieldMemOperand(r3, JSValue::kValueOffset), r0); 288 __ StoreP(r5, FieldMemOperand(r3, JSValue::kValueOffset), r0);
292 STATIC_ASSERT(JSValue::kSize == 4 * kPointerSize); 289 STATIC_ASSERT(JSValue::kSize == 4 * kPointerSize);
293 __ Ret(); 290 __ Ret();
291 }
294 292
295 // Fallback to the runtime to allocate in new space. 293 // 5. Fallback to the runtime to create new object.
296 __ bind(&allocate); 294 __ bind(&new_object);
297 { 295 {
298 FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL); 296 FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL);
299 __ LoadSmiLiteral(r6, Smi::FromInt(JSValue::kSize)); 297 __ Push(r5, r4, r6); // first argument, constructor, original constructor
300 __ Push(r4, r5, r6); 298 __ CallRuntime(Runtime::kNewObject, 2);
301 __ CallRuntime(Runtime::kAllocateInNewSpace, 1); 299 __ Pop(r5);
302 __ Pop(r4, r5);
303 }
304 __ b(&done_allocate);
305
306 // Fallback to the runtime to create new object.
307 __ bind(&rt_call);
308 {
309 FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL);
310 __ Push(r4, r5, r4, r6); // constructor function, original constructor
311 __ CallRuntime(Runtime::kNewObject, 2);
312 __ Pop(r4, r5);
313 }
314 __ StoreP(r5, FieldMemOperand(r3, JSValue::kValueOffset), r0);
315 __ Ret();
316 } 300 }
301 __ StoreP(r5, FieldMemOperand(r3, JSValue::kValueOffset), r0);
302 __ Ret();
317 } 303 }
318 304
319 305
320 static void CallRuntimePassFunction(MacroAssembler* masm, 306 static void CallRuntimePassFunction(MacroAssembler* masm,
321 Runtime::FunctionId function_id) { 307 Runtime::FunctionId function_id) {
322 FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL); 308 FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL);
323 // Push a copy of the function onto the stack. 309 // Push a copy of the function onto the stack.
324 // Push function as parameter to the runtime call. 310 // Push function as parameter to the runtime call.
325 __ Push(r4, r4); 311 __ Push(r4, r4);
326 312
(...skipping 1650 matching lines...) Expand 10 before | Expand all | Expand 10 after
1977 __ bkpt(0); 1963 __ bkpt(0);
1978 } 1964 }
1979 } 1965 }
1980 1966
1981 1967
1982 #undef __ 1968 #undef __
1983 } // namespace internal 1969 } // namespace internal
1984 } // namespace v8 1970 } // namespace v8
1985 1971
1986 #endif // V8_TARGET_ARCH_PPC 1972 #endif // V8_TARGET_ARCH_PPC
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698