[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 08/21] tcg-i386: Eliminate extra move from qemu_ld64
From: |
Richard Henderson |
Subject: |
[Qemu-devel] [PATCH 08/21] tcg-i386: Eliminate extra move from qemu_ld64. |
Date: |
Wed, 14 Apr 2010 08:06:00 -0700 |
If the address register overlaps one of the output registers
simply issue the clobbering load last, rather than emitting
an extra move of the address register.
Signed-off-by: Richard Henderson <address@hidden>
---
tcg/i386/tcg-target.c | 20 +++++++++-----------
1 files changed, 9 insertions(+), 11 deletions(-)
diff --git a/tcg/i386/tcg-target.c b/tcg/i386/tcg-target.c
index 4f7df70..5829c5b 100644
--- a/tcg/i386/tcg-target.c
+++ b/tcg/i386/tcg-target.c
@@ -787,22 +787,20 @@ static void tcg_out_qemu_ld(TCGContext *s, const TCGArg
*args,
}
break;
case 3:
- /* XXX: could be nicer */
- if (r0 == data_reg) {
- r1 = TCG_REG_EDX;
- if (r1 == data_reg)
- r1 = TCG_REG_EAX;
- tcg_out_mov(s, r1, r0);
- r0 = r1;
+ if (bswap) {
+ int t = data_reg;
+ data_reg = data_reg2;
+ data_reg2 = t;
}
- if (!bswap) {
+ if (r0 != data_reg) {
tcg_out_ld(s, TCG_TYPE_I32, data_reg, r0, GUEST_BASE);
tcg_out_ld(s, TCG_TYPE_I32, data_reg2, r0, GUEST_BASE + 4);
} else {
- tcg_out_ld(s, TCG_TYPE_I32, data_reg, r0, GUEST_BASE + 4);
+ tcg_out_ld(s, TCG_TYPE_I32, data_reg2, r0, GUEST_BASE + 4);
+ tcg_out_ld(s, TCG_TYPE_I32, data_reg, r0, GUEST_BASE);
+ }
+ if (bswap) {
tcg_out_bswap32(s, data_reg);
-
- tcg_out_ld(s, TCG_TYPE_I32, data_reg2, r0, GUEST_BASE);
tcg_out_bswap32(s, data_reg2);
}
break;
--
1.6.2.5
- [Qemu-devel] [PATCH 04/21] tcg-i386: Tidy ext8s and ext16s operations., (continued)
[Qemu-devel] [PATCH 10/21] tcg-i386: Tidy immediate arithmetic operations., Richard Henderson, 2010/04/14
[Qemu-devel] [PATCH 06/21] tcg-i386: Tidy shift operations., Richard Henderson, 2010/04/14
[Qemu-devel] [PATCH 11/21] tcg-i386: Tidy non-immediate arithmetic operations., Richard Henderson, 2010/04/14
[Qemu-devel] [PATCH 09/21] tcg-i386: Tidy jumps., Richard Henderson, 2010/04/14
[Qemu-devel] [PATCH 08/21] tcg-i386: Eliminate extra move from qemu_ld64.,
Richard Henderson <=
[Qemu-devel] [PATCH 07/21] tcg-i386: Tidy move operations., Richard Henderson, 2010/04/14
[Qemu-devel] [PATCH 13/21] tcg-i386: Tidy push/pop., Richard Henderson, 2010/04/14
[Qemu-devel] [PATCH 12/21] tcg-i386: Tidy movi., Richard Henderson, 2010/04/14
[Qemu-devel] [PATCH 19/21] tcg-i386: Tidy xchg., Richard Henderson, 2010/04/14
[Qemu-devel] [PATCH 16/21] tcg-i386: Tidy setcc., Richard Henderson, 2010/04/14
[Qemu-devel] [PATCH 15/21] tcg-i386: Tidy ret., Richard Henderson, 2010/04/14
[Qemu-devel] [PATCH 17/21] tcg-i386: Tidy unary arithmetic., Richard Henderson, 2010/04/14
[Qemu-devel] [PATCH 18/21] tcg-i386: Tidy multiply., Richard Henderson, 2010/04/14
[Qemu-devel] [PATCH 14/21] tcg-i386: Tidy calls., Richard Henderson, 2010/04/14
[Qemu-devel] [PATCH 21/21] tcg-i386: Use lea for three-operand add., Richard Henderson, 2010/04/14