Revision: 19780
Author:   [email protected]
Date:     Tue Mar 11 08:52:48 2014 UTC
Log:      Add MacroAssembler::Move(reg, immediate) on IA32.

BUG=
[email protected]

Review URL: https://codereview.chromium.org/188463003
http://code.google.com/p/v8/source/detail?r=19780

Modified:
 /branches/bleeding_edge/src/ia32/macro-assembler-ia32.cc
 /branches/bleeding_edge/src/ia32/macro-assembler-ia32.h
 /branches/bleeding_edge/test/cctest/test-macro-assembler-ia32.cc

=======================================
--- /branches/bleeding_edge/src/ia32/macro-assembler-ia32.cc Mon Mar 10 10:39:17 2014 UTC +++ /branches/bleeding_edge/src/ia32/macro-assembler-ia32.cc Tue Mar 11 08:52:48 2014 UTC
@@ -2831,6 +2831,15 @@
     mov(dst, src);
   }
 }
+
+
+void MacroAssembler::Move(Register dst, Immediate imm) {
+  if (imm.is_zero()) {
+    xor_(dst, dst);
+  } else {
+    mov(dst, imm);
+  }
+}


 void MacroAssembler::SetCounter(StatsCounter* counter, int value) {
=======================================
--- /branches/bleeding_edge/src/ia32/macro-assembler-ia32.h Mon Mar 10 10:39:17 2014 UTC +++ /branches/bleeding_edge/src/ia32/macro-assembler-ia32.h Tue Mar 11 08:52:48 2014 UTC
@@ -843,6 +843,9 @@
   // Move if the registers are not identical.
   void Move(Register target, Register source);

+  // Move a constant into a register using the most efficient encoding.
+  void Move(Register dst, Immediate imm);
+
   // Push a handle value.
   void Push(Handle<Object> handle) { push(Immediate(handle)); }
   void Push(Smi* smi) { Push(Handle<Smi>(smi, isolate())); }
=======================================
--- /branches/bleeding_edge/test/cctest/test-macro-assembler-ia32.cc Fri Nov 29 20:49:15 2013 UTC +++ /branches/bleeding_edge/test/cctest/test-macro-assembler-ia32.cc Tue Mar 11 08:52:48 2014 UTC
@@ -122,6 +122,17 @@
   __ cmp(ebx, edx);
   __ j(not_equal, &exit);

+  // Test 5.
+  __ Move(edx, Immediate(0));  // Test Move()
+  __ cmp(edx, Immediate(0));
+  __ j(not_equal, &exit);
+  __ Move(ecx, Immediate(-1));
+  __ cmp(ecx, Immediate(-1));
+  __ j(not_equal, &exit);
+  __ Move(ebx, Immediate(0x77));
+  __ cmp(ebx, Immediate(0x77));
+  __ j(not_equal, &exit);
+
   __ xor_(eax, eax);  // Success.
   __ bind(&exit);
   __ add(esp, Immediate(1 * kPointerSize));

--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
--- You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to