* [Qemu-devel] [PATCH, MIPS64] Fixed signed integer comparisons
@ 2007-05-19 10:15 Aurelien Jarno
0 siblings, 0 replies; only message in thread
From: Aurelien Jarno @ 2007-05-19 10:15 UTC (permalink / raw)
To: qemu-devel
Hi all,
One more patch for MIPS64 support. It fixes signed integer comparison.
The compared value should be casted to target_long (ie int32_t on MIPS32
and int64_t on MIPS64) in order for the comparisons to work in all
cases.
With this patch I am able to get my o32 system working with a 64-bit
kernel. I have seen no problem so far.
n32 binaries also works correctly, though I haven't done extensive
tests. I have only built small C/C++ softwares and tested them.
64-bit binaries are not working correctly. I get a "Bus error" within
ld-2.5.so, so I guess there is still some parts to fix in the MMU
emulation.
Cheers,
Aurelien
Index: target-mips/op.c
===================================================================
RCS file: /sources/qemu/qemu/target-mips/op.c,v
retrieving revision 1.57
diff -u -d -p -r1.57 op.c
--- target-mips/op.c 18 May 2007 11:55:54 -0000 1.57
+++ target-mips/op.c 19 May 2007 09:16:14 -0000
@@ -928,14 +928,14 @@ void glue(op_, name) (void) \
OP_COND(eq, T0 == T1);
OP_COND(ne, T0 != T1);
-OP_COND(ge, (int32_t)T0 >= (int32_t)T1);
+OP_COND(ge, (target_long)T0 >= (target_long)T1);
OP_COND(geu, T0 >= T1);
-OP_COND(lt, (int32_t)T0 < (int32_t)T1);
+OP_COND(lt, (target_long)T0 < (target_long)T1);
OP_COND(ltu, T0 < T1);
-OP_COND(gez, (int32_t)T0 >= 0);
-OP_COND(gtz, (int32_t)T0 > 0);
-OP_COND(lez, (int32_t)T0 <= 0);
-OP_COND(ltz, (int32_t)T0 < 0);
+OP_COND(gez, (target_long)T0 >= 0);
+OP_COND(gtz, (target_long)T0 > 0);
+OP_COND(lez, (target_long)T0 <= 0);
+OP_COND(ltz, (target_long)T0 < 0);
/* Branches */
void OPPROTO op_goto_tb0(void)
Index: target-mips/translate.c
===================================================================
RCS file: /sources/qemu/qemu/target-mips/translate.c,v
retrieving revision 1.80
diff -u -d -p -r1.80 translate.c
--- target-mips/translate.c 18 May 2007 11:55:54 -0000 1.80
+++ target-mips/translate.c 19 May 2007 09:16:15 -0000
@@ -919,7 +921,7 @@ static void gen_flt_ldst (DisasContext *
static void gen_arith_imm (DisasContext *ctx, uint32_t opc, int rt,
int rs, int16_t imm)
{
- uint32_t uimm;
+ target_ulong uimm;
const char *opn = "imm arith";
if (rt == 0 && opc != OPC_ADDI && opc != OPC_DADDI) {
@@ -939,7 +941,7 @@ static void gen_arith_imm (DisasContext
#endif
case OPC_SLTI:
case OPC_SLTIU:
- uimm = (int32_t)imm; /* Sign extend to 32 bits */
+ uimm = (target_long)imm; /* Sign extend to 32/64 bits */
/* Fall through. */
case OPC_ANDI:
case OPC_ORI:
--
.''`. Aurelien Jarno | GPG: 1024D/F1BCDB73
: :' : Debian developer | Electrical Engineer
`. `' aurel32@debian.org | aurelien@aurel32.net
`- people.debian.org/~aurel32 | www.aurel32.net
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2007-05-19 10:15 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-05-19 10:15 [Qemu-devel] [PATCH, MIPS64] Fixed signed integer comparisons 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).