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

Reply via email to