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

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

Issue 15967006: MIPS: Fill more branch delay slots. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 years, 6 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | src/mips/code-stubs-mips.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 317 matching lines...) Expand 10 before | Expand all | Expand 10 after
328 __ bind(&empty_array); 328 __ bind(&empty_array);
329 AllocateEmptyJSArray(masm, 329 AllocateEmptyJSArray(masm,
330 a1, 330 a1,
331 a2, 331 a2,
332 a3, 332 a3,
333 t0, 333 t0,
334 t1, 334 t1,
335 call_generic_code); 335 call_generic_code);
336 __ IncrementCounter(counters->array_function_native(), 1, a3, t0); 336 __ IncrementCounter(counters->array_function_native(), 1, a3, t0);
337 // Set up return value, remove receiver from stack and return. 337 // Set up return value, remove receiver from stack and return.
338 __ Addu(sp, sp, Operand(kPointerSize));
339 __ Ret(USE_DELAY_SLOT);
338 __ mov(v0, a2); 340 __ mov(v0, a2);
339 __ Addu(sp, sp, Operand(kPointerSize));
340 __ Ret();
341 341
342 // Check for one argument. Bail out if argument is not smi or if it is 342 // Check for one argument. Bail out if argument is not smi or if it is
343 // negative. 343 // negative.
344 __ bind(&argc_one_or_more); 344 __ bind(&argc_one_or_more);
345 __ Branch(&argc_two_or_more, ne, a0, Operand(1)); 345 __ Branch(&argc_two_or_more, ne, a0, Operand(1));
346 346
347 STATIC_ASSERT(kSmiTag == 0); 347 STATIC_ASSERT(kSmiTag == 0);
348 __ lw(a2, MemOperand(sp)); // Get the argument from the stack. 348 __ lw(a2, MemOperand(sp)); // Get the argument from the stack.
349 __ Branch(&not_empty_array, ne, a2, Operand(zero_reg)); 349 __ Branch(&not_empty_array, ne, a2, Operand(zero_reg));
350 __ Drop(1); // Adjust stack. 350 __ Drop(1); // Adjust stack.
(...skipping 20 matching lines...) Expand all
371 a3, 371 a3,
372 t0, 372 t0,
373 t1, 373 t1,
374 t2, 374 t2,
375 t3, 375 t3,
376 true, 376 true,
377 call_generic_code); 377 call_generic_code);
378 __ IncrementCounter(counters->array_function_native(), 1, a2, t0); 378 __ IncrementCounter(counters->array_function_native(), 1, a2, t0);
379 379
380 // Set up return value, remove receiver and argument from stack and return. 380 // Set up return value, remove receiver and argument from stack and return.
381 __ Addu(sp, sp, Operand(2 * kPointerSize));
382 __ Ret(USE_DELAY_SLOT);
381 __ mov(v0, a3); 383 __ mov(v0, a3);
382 __ Addu(sp, sp, Operand(2 * kPointerSize));
383 __ Ret();
384 384
385 // Handle construction of an array from a list of arguments. 385 // Handle construction of an array from a list of arguments.
386 __ bind(&argc_two_or_more); 386 __ bind(&argc_two_or_more);
387 __ sll(a2, a0, kSmiTagSize); // Convert argc to a smi. 387 __ sll(a2, a0, kSmiTagSize); // Convert argc to a smi.
388 388
389 // a0: argc 389 // a0: argc
390 // a1: constructor 390 // a1: constructor
391 // a2: array_size (smi) 391 // a2: array_size (smi)
392 // sp[0]: last argument 392 // sp[0]: last argument
393 AllocateJSArray(masm, 393 AllocateJSArray(masm,
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
427 427
428 __ bind(&finish); 428 __ bind(&finish);
429 __ mov(sp, t3); 429 __ mov(sp, t3);
430 430
431 // Remove caller arguments and receiver from the stack, setup return value and 431 // Remove caller arguments and receiver from the stack, setup return value and
432 // return. 432 // return.
433 // a0: argc 433 // a0: argc
434 // a3: JSArray 434 // a3: JSArray
435 // sp[0]: receiver 435 // sp[0]: receiver
436 __ Addu(sp, sp, Operand(kPointerSize)); 436 __ Addu(sp, sp, Operand(kPointerSize));
437 __ Ret(USE_DELAY_SLOT);
437 __ mov(v0, a3); 438 __ mov(v0, a3);
438 __ Ret();
439 439
440 __ bind(&has_non_smi_element); 440 __ bind(&has_non_smi_element);
441 // Double values are handled by the runtime. 441 // Double values are handled by the runtime.
442 __ CheckMap( 442 __ CheckMap(
443 a2, t5, Heap::kHeapNumberMapRootIndex, &not_double, DONT_DO_SMI_CHECK); 443 a2, t5, Heap::kHeapNumberMapRootIndex, &not_double, DONT_DO_SMI_CHECK);
444 __ bind(&cant_transition_map); 444 __ bind(&cant_transition_map);
445 __ UndoAllocationInNewSpace(a3, t0); 445 __ UndoAllocationInNewSpace(a3, t0);
446 __ Branch(call_generic_code); 446 __ Branch(call_generic_code);
447 447
448 __ bind(&not_double); 448 __ bind(&not_double);
(...skipping 916 matching lines...) Expand 10 before | Expand all | Expand 10 after
1365 __ CallRuntime(Runtime::kNotifyDeoptimized, 1); 1365 __ CallRuntime(Runtime::kNotifyDeoptimized, 1);
1366 } 1366 }
1367 1367
1368 // Get the full codegen state from the stack and untag it -> t2. 1368 // Get the full codegen state from the stack and untag it -> t2.
1369 __ lw(t2, MemOperand(sp, 0 * kPointerSize)); 1369 __ lw(t2, MemOperand(sp, 0 * kPointerSize));
1370 __ SmiUntag(t2); 1370 __ SmiUntag(t2);
1371 // Switch on the state. 1371 // Switch on the state.
1372 Label with_tos_register, unknown_state; 1372 Label with_tos_register, unknown_state;
1373 __ Branch(&with_tos_register, 1373 __ Branch(&with_tos_register,
1374 ne, t2, Operand(FullCodeGenerator::NO_REGISTERS)); 1374 ne, t2, Operand(FullCodeGenerator::NO_REGISTERS));
1375 __ Ret(USE_DELAY_SLOT);
1376 // Safe to fill delay slot Addu will emit one instruction.
1375 __ Addu(sp, sp, Operand(1 * kPointerSize)); // Remove state. 1377 __ Addu(sp, sp, Operand(1 * kPointerSize)); // Remove state.
1376 __ Ret();
1377 1378
1378 __ bind(&with_tos_register); 1379 __ bind(&with_tos_register);
1379 __ lw(v0, MemOperand(sp, 1 * kPointerSize)); 1380 __ lw(v0, MemOperand(sp, 1 * kPointerSize));
1380 __ Branch(&unknown_state, ne, t2, Operand(FullCodeGenerator::TOS_REG)); 1381 __ Branch(&unknown_state, ne, t2, Operand(FullCodeGenerator::TOS_REG));
1381 1382
1383 __ Ret(USE_DELAY_SLOT);
1384 // Safe to fill delay slot Addu will emit one instruction.
1382 __ Addu(sp, sp, Operand(2 * kPointerSize)); // Remove state. 1385 __ Addu(sp, sp, Operand(2 * kPointerSize)); // Remove state.
1383 __ Ret();
1384 1386
1385 __ bind(&unknown_state); 1387 __ bind(&unknown_state);
1386 __ stop("no cases left"); 1388 __ stop("no cases left");
1387 } 1389 }
1388 1390
1389 1391
1390 void Builtins::Generate_NotifyDeoptimized(MacroAssembler* masm) { 1392 void Builtins::Generate_NotifyDeoptimized(MacroAssembler* masm) {
1391 Generate_NotifyDeoptimizedHelper(masm, Deoptimizer::EAGER); 1393 Generate_NotifyDeoptimizedHelper(masm, Deoptimizer::EAGER);
1392 } 1394 }
1393 1395
(...skipping 541 matching lines...) Expand 10 before | Expand all | Expand 10 after
1935 __ bind(&dont_adapt_arguments); 1937 __ bind(&dont_adapt_arguments);
1936 __ Jump(a3); 1938 __ Jump(a3);
1937 } 1939 }
1938 1940
1939 1941
1940 #undef __ 1942 #undef __
1941 1943
1942 } } // namespace v8::internal 1944 } } // namespace v8::internal
1943 1945
1944 #endif // V8_TARGET_ARCH_MIPS 1946 #endif // V8_TARGET_ARCH_MIPS
OLDNEW
« no previous file with comments | « no previous file | src/mips/code-stubs-mips.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698