Revision: 12718
Author: [email protected]
Date: Fri Oct 12 07:06:03 2012
Log: Use immediate add when possible in space allocator
Save one instruction in allocating new space by using an immediate add if
possible to calculate the new top of heap.
BUG=
Review URL: https://chromiumcodereview.appspot.com/11091068
Patch from Anthony Berent <[email protected]>.
http://code.google.com/p/v8/source/detail?r=12718
Modified:
/branches/bleeding_edge/src/arm/macro-assembler-arm.cc
=======================================
--- /branches/bleeding_edge/src/arm/macro-assembler-arm.cc Fri Oct 12
04:09:14 2012
+++ /branches/bleeding_edge/src/arm/macro-assembler-arm.cc Fri Oct 12
07:06:03 2012
@@ -1570,7 +1570,11 @@
Register topaddr = scratch1;
Register obj_size_reg = scratch2;
mov(topaddr, Operand(new_space_allocation_top));
- mov(obj_size_reg, Operand(object_size));
+ Operand obj_size_operand = Operand(object_size);
+ if (!obj_size_operand.is_single_instruction(this)) {
+ // We are about to steal IP, so we need to load this value first
+ mov(obj_size_reg, obj_size_operand);
+ }
// This code stores a temporary value in ip. This is OK, as the code
below
// does not need ip for implicit literal generation.
@@ -1592,7 +1596,13 @@
// Calculate new top and bail out if new space is exhausted. Use result
// to calculate the new top.
- add(scratch2, result, Operand(obj_size_reg), SetCC);
+ if (obj_size_operand.is_single_instruction(this)) {
+ // We can add the size as an immediate
+ add(scratch2, result, obj_size_operand, SetCC);
+ } else {
+ // Doesn't fit in an immediate, we have to use the register
+ add(scratch2, result, obj_size_reg, SetCC);
+ }
b(cs, gc_required);
cmp(scratch2, Operand(ip));
b(hi, gc_required);
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev