* [Qemu-devel] [6808] tcg-arm: fix qemu_ld64
@ 2009-03-10 21:43 Aurelien Jarno
0 siblings, 0 replies; only message in thread
From: Aurelien Jarno @ 2009-03-10 21:43 UTC (permalink / raw)
To: qemu-devel
Revision: 6808
http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=6808
Author: aurel32
Date: 2009-03-10 21:43:25 +0000 (Tue, 10 Mar 2009)
Log Message:
-----------
tcg-arm: fix qemu_ld64
Emulating fldl on arm doesn't seem to work too well. It's the way
qemu_ld64 is translated to arm instructions.
tcg_out_ld32_12(s, COND_AL, data_reg, addr_reg, 0);
tcg_out_ld32_12(s, COND_AL, data_reg2, addr_reg, 4);
Consider case where data_reg==0, data_reg2==1, and addr_reg==0. First load
overwrited addr_reg. So let's put an if (data_ref==addr_reg).
(Pablo Virolainen)
Modified Paths:
--------------
trunk/tcg/arm/tcg-target.c
Modified: trunk/tcg/arm/tcg-target.c
===================================================================
--- trunk/tcg/arm/tcg-target.c 2009-03-10 19:37:56 UTC (rev 6807)
+++ trunk/tcg/arm/tcg-target.c 2009-03-10 21:43:25 UTC (rev 6808)
@@ -1011,8 +1011,13 @@
case 3:
/* TODO: use block load -
* check that data_reg2 > data_reg or the other way */
- tcg_out_ld32_12(s, COND_AL, data_reg, addr_reg, 0);
- tcg_out_ld32_12(s, COND_AL, data_reg2, addr_reg, 4);
+ if (data_reg == addr_reg) {
+ tcg_out_ld32_12(s, COND_AL, data_reg2, addr_reg, 4);
+ tcg_out_ld32_12(s, COND_AL, data_reg, addr_reg, 0);
+ } else {
+ tcg_out_ld32_12(s, COND_AL, data_reg, addr_reg, 0);
+ tcg_out_ld32_12(s, COND_AL, data_reg2, addr_reg, 4);
+ }
break;
}
#endif
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2009-03-10 21:43 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-03-10 21:43 [Qemu-devel] [6808] tcg-arm: fix qemu_ld64 Aurelien Jarno
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).