Reviewers: danno,
Description:
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=
Please review this at http://codereview.chromium.org/11091068/
SVN Base: git://github.com/v8/v8.git@master
Affected files:
M src/arm/macro-assembler-arm.cc
Index: src/arm/macro-assembler-arm.cc
diff --git a/src/arm/macro-assembler-arm.cc b/src/arm/macro-assembler-arm.cc
index
b74d09deaa6aef8e9c06fc7290f2be6636f1d405..9e819955bcac011ed754e2c3ea92e174fe78342d
100644
--- a/src/arm/macro-assembler-arm.cc
+++ b/src/arm/macro-assembler-arm.cc
@@ -1570,7 +1570,11 @@ void MacroAssembler::AllocateInNewSpace(int
object_size,
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 @@ void MacroAssembler::AllocateInNewSpace(int
object_size,
// 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