Reviewers: Michael Starzinger,

Description:
Add MacroAssembler::Move(reg, immediate) on IA32.

BUG=

Please review this at https://codereview.chromium.org/188463003/

SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge

Affected files (+23, -0 lines):
  M src/ia32/macro-assembler-ia32.h
  M src/ia32/macro-assembler-ia32.cc
  M test/cctest/test-macro-assembler-ia32.cc


Index: src/ia32/macro-assembler-ia32.cc
diff --git a/src/ia32/macro-assembler-ia32.cc b/src/ia32/macro-assembler-ia32.cc index cc0f392f185212826144898536c1945fef233d7f..4c9764beb7497cf90bb58d4f39c4abba148c6f1b 100644
--- a/src/ia32/macro-assembler-ia32.cc
+++ b/src/ia32/macro-assembler-ia32.cc
@@ -2833,6 +2833,15 @@ void MacroAssembler::Move(Register dst, Register 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) {
   if (FLAG_native_code_counters && counter->Enabled()) {
mov(Operand::StaticVariable(ExternalReference(counter)), Immediate(value));
Index: src/ia32/macro-assembler-ia32.h
diff --git a/src/ia32/macro-assembler-ia32.h b/src/ia32/macro-assembler-ia32.h index 6b0573ca6eb443cbe4b47d35a71efffa90954793..91de20adaad1528a88d8aa50756c95b744df0c15 100644
--- a/src/ia32/macro-assembler-ia32.h
+++ b/src/ia32/macro-assembler-ia32.h
@@ -843,6 +843,9 @@ class MacroAssembler: public Assembler {
   // 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())); }
Index: test/cctest/test-macro-assembler-ia32.cc
diff --git a/test/cctest/test-macro-assembler-ia32.cc b/test/cctest/test-macro-assembler-ia32.cc index 38c738f1d0f61885b923e93d9a574358d762f10b..6a4cfec492a98b031960b67809b2d0b4e81b331c 100644
--- a/test/cctest/test-macro-assembler-ia32.cc
+++ b/test/cctest/test-macro-assembler-ia32.cc
@@ -122,6 +122,17 @@ TEST(LoadAndStoreWithRepresentation) {
   __ 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/groups/opt_out.

Reply via email to