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

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

Issue 44313002: Try to use STMDB/LDMIA instead of LDR/STR sequences whenever possible. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | src/arm/code-stubs-arm.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 276 matching lines...) Expand 10 before | Expand all | Expand 10 after
287 } 287 }
288 __ Ret(); 288 __ Ret();
289 } 289 }
290 290
291 291
292 static void CallRuntimePassFunction(MacroAssembler* masm, 292 static void CallRuntimePassFunction(MacroAssembler* masm,
293 Runtime::FunctionId function_id) { 293 Runtime::FunctionId function_id) {
294 FrameScope scope(masm, StackFrame::INTERNAL); 294 FrameScope scope(masm, StackFrame::INTERNAL);
295 // Push a copy of the function onto the stack. 295 // Push a copy of the function onto the stack.
296 __ push(r1); 296 __ push(r1);
297 // Push call kind information. 297 // Push call kind information and function as parameter to the runtime call.
298 __ push(r5); 298 __ Push(r5, r1);
299 // Function is also the parameter to the runtime call.
300 __ push(r1);
301 299
302 __ CallRuntime(function_id, 1); 300 __ CallRuntime(function_id, 1);
303 // Restore call kind information. 301 // Restore call kind information.
304 __ pop(r5); 302 __ pop(r5);
305 // Restore receiver. 303 // Restore receiver.
306 __ pop(r1); 304 __ pop(r1);
307 } 305 }
308 306
309 307
310 static void GenerateTailCallToSharedCode(MacroAssembler* masm) { 308 static void GenerateTailCallToSharedCode(MacroAssembler* masm) {
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
399 Label allocate; 397 Label allocate;
400 // Decrease generous allocation count. 398 // Decrease generous allocation count.
401 __ ldr(r3, FieldMemOperand(r1, JSFunction::kSharedFunctionInfoOffset)); 399 __ ldr(r3, FieldMemOperand(r1, JSFunction::kSharedFunctionInfoOffset));
402 MemOperand constructor_count = 400 MemOperand constructor_count =
403 FieldMemOperand(r3, SharedFunctionInfo::kConstructionCountOffset); 401 FieldMemOperand(r3, SharedFunctionInfo::kConstructionCountOffset);
404 __ ldrb(r4, constructor_count); 402 __ ldrb(r4, constructor_count);
405 __ sub(r4, r4, Operand(1), SetCC); 403 __ sub(r4, r4, Operand(1), SetCC);
406 __ strb(r4, constructor_count); 404 __ strb(r4, constructor_count);
407 __ b(ne, &allocate); 405 __ b(ne, &allocate);
408 406
409 __ Push(r1, r2); 407 __ push(r1);
410 408
411 __ push(r1); // constructor 409 __ Push(r2, r1); // r1 = constructor
412 // The call will replace the stub, so the countdown is only done once. 410 // The call will replace the stub, so the countdown is only done once.
413 __ CallRuntime(Runtime::kFinalizeInstanceSize, 1); 411 __ CallRuntime(Runtime::kFinalizeInstanceSize, 1);
414 412
415 __ pop(r2); 413 __ pop(r2);
416 __ pop(r1); 414 __ pop(r1);
417 415
418 __ bind(&allocate); 416 __ bind(&allocate);
419 } 417 }
420 418
421 // Now allocate the JSObject on the heap. 419 // Now allocate the JSObject on the heap.
(...skipping 779 matching lines...) Expand 10 before | Expand all | Expand 10 after
1201 __ LoadRoot(r2, Heap::kRealStackLimitRootIndex); 1199 __ LoadRoot(r2, Heap::kRealStackLimitRootIndex);
1202 // Make r2 the space we have left. The stack might already be overflowed 1200 // Make r2 the space we have left. The stack might already be overflowed
1203 // here which will cause r2 to become negative. 1201 // here which will cause r2 to become negative.
1204 __ sub(r2, sp, r2); 1202 __ sub(r2, sp, r2);
1205 // Check if the arguments will overflow the stack. 1203 // Check if the arguments will overflow the stack.
1206 __ cmp(r2, Operand::PointerOffsetFromSmiKey(r0)); 1204 __ cmp(r2, Operand::PointerOffsetFromSmiKey(r0));
1207 __ b(gt, &okay); // Signed comparison. 1205 __ b(gt, &okay); // Signed comparison.
1208 1206
1209 // Out of stack space. 1207 // Out of stack space.
1210 __ ldr(r1, MemOperand(fp, kFunctionOffset)); 1208 __ ldr(r1, MemOperand(fp, kFunctionOffset));
1211 __ push(r1); 1209 __ Push(r1, r0);
1212 __ push(r0);
1213 __ InvokeBuiltin(Builtins::APPLY_OVERFLOW, CALL_FUNCTION); 1210 __ InvokeBuiltin(Builtins::APPLY_OVERFLOW, CALL_FUNCTION);
1214 // End of stack check. 1211 // End of stack check.
1215 1212
1216 // Push current limit and index. 1213 // Push current limit and index.
1217 __ bind(&okay); 1214 __ bind(&okay);
1218 __ push(r0); // limit 1215 __ push(r0); // limit
1219 __ mov(r1, Operand::Zero()); // initial index 1216 __ mov(r1, Operand::Zero()); // initial index
1220 __ push(r1); 1217 __ push(r1);
1221 1218
1222 // Get the receiver. 1219 // Get the receiver.
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
1284 // Copy all arguments from the array to the stack. 1281 // Copy all arguments from the array to the stack.
1285 Label entry, loop; 1282 Label entry, loop;
1286 __ ldr(r0, MemOperand(fp, kIndexOffset)); 1283 __ ldr(r0, MemOperand(fp, kIndexOffset));
1287 __ b(&entry); 1284 __ b(&entry);
1288 1285
1289 // Load the current argument from the arguments array and push it to the 1286 // Load the current argument from the arguments array and push it to the
1290 // stack. 1287 // stack.
1291 // r0: current argument index 1288 // r0: current argument index
1292 __ bind(&loop); 1289 __ bind(&loop);
1293 __ ldr(r1, MemOperand(fp, kArgsOffset)); 1290 __ ldr(r1, MemOperand(fp, kArgsOffset));
1294 __ push(r1); 1291 __ Push(r1, r0);
1295 __ push(r0);
1296 1292
1297 // Call the runtime to access the property in the arguments array. 1293 // Call the runtime to access the property in the arguments array.
1298 __ CallRuntime(Runtime::kGetProperty, 2); 1294 __ CallRuntime(Runtime::kGetProperty, 2);
1299 __ push(r0); 1295 __ push(r0);
1300 1296
1301 // Use inline caching to access the arguments. 1297 // Use inline caching to access the arguments.
1302 __ ldr(r0, MemOperand(fp, kIndexOffset)); 1298 __ ldr(r0, MemOperand(fp, kIndexOffset));
1303 __ add(r0, r0, Operand(1 << kSmiTagSize)); 1299 __ add(r0, r0, Operand(1 << kSmiTagSize));
1304 __ str(r0, MemOperand(fp, kIndexOffset)); 1300 __ str(r0, MemOperand(fp, kIndexOffset));
1305 1301
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
1469 __ bind(&dont_adapt_arguments); 1465 __ bind(&dont_adapt_arguments);
1470 __ Jump(r3); 1466 __ Jump(r3);
1471 } 1467 }
1472 1468
1473 1469
1474 #undef __ 1470 #undef __
1475 1471
1476 } } // namespace v8::internal 1472 } } // namespace v8::internal
1477 1473
1478 #endif // V8_TARGET_ARCH_ARM 1474 #endif // V8_TARGET_ARCH_ARM
OLDNEW
« no previous file with comments | « no previous file | src/arm/code-stubs-arm.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698