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.