mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-09 10:34:58 -06:00
tcg/ppc32: proper setcond implementation
Signed-off-by: malc <av1474@comtv.ru>
This commit is contained in:
parent
b0809bf7ca
commit
27a7797b09
1 changed files with 32 additions and 32 deletions
|
@ -1147,7 +1147,7 @@ static void tcg_out_setcond (TCGContext *s, int cond, TCGArg arg0,
|
||||||
| ME (31)
|
| ME (31)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
return;
|
break;
|
||||||
|
|
||||||
case TCG_COND_NE:
|
case TCG_COND_NE:
|
||||||
if (const_arg2) {
|
if (const_arg2) {
|
||||||
|
@ -1178,47 +1178,47 @@ static void tcg_out_setcond (TCGContext *s, int cond, TCGArg arg0,
|
||||||
tcg_out32 (s, ADDIC | RT (arg0) | RA (arg) | 0xffff);
|
tcg_out32 (s, ADDIC | RT (arg0) | RA (arg) | 0xffff);
|
||||||
tcg_out32 (s, SUBFE | TAB (arg0, arg0, arg));
|
tcg_out32 (s, SUBFE | TAB (arg0, arg0, arg));
|
||||||
}
|
}
|
||||||
return;
|
|
||||||
|
|
||||||
case TCG_COND_LTU:
|
|
||||||
case TCG_COND_LT:
|
|
||||||
sh = 29;
|
|
||||||
crop = 0;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TCG_COND_GEU:
|
|
||||||
case TCG_COND_GE:
|
|
||||||
sh = 31;
|
|
||||||
crop = CRNOR | BT (7, CR_EQ) | BA (7, CR_LT) | BB (7, CR_LT);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case TCG_COND_LEU:
|
|
||||||
case TCG_COND_LE:
|
|
||||||
sh = 31;
|
|
||||||
crop = CRNOR | BT (7, CR_EQ) | BA (7, CR_GT) | BB (7, CR_GT);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case TCG_COND_GTU:
|
|
||||||
case TCG_COND_GT:
|
case TCG_COND_GT:
|
||||||
|
case TCG_COND_GTU:
|
||||||
sh = 30;
|
sh = 30;
|
||||||
crop = 0;
|
crop = 0;
|
||||||
|
goto crtest;
|
||||||
|
|
||||||
|
case TCG_COND_LT:
|
||||||
|
case TCG_COND_LTU:
|
||||||
|
sh = 29;
|
||||||
|
crop = 0;
|
||||||
|
goto crtest;
|
||||||
|
|
||||||
|
case TCG_COND_GE:
|
||||||
|
case TCG_COND_GEU:
|
||||||
|
sh = 31;
|
||||||
|
crop = CRNOR | BT (7, CR_EQ) | BA (7, CR_LT) | BB (7, CR_LT);
|
||||||
|
goto crtest;
|
||||||
|
|
||||||
|
case TCG_COND_LE:
|
||||||
|
case TCG_COND_LEU:
|
||||||
|
sh = 31;
|
||||||
|
crop = CRNOR | BT (7, CR_EQ) | BA (7, CR_GT) | BB (7, CR_GT);
|
||||||
|
crtest:
|
||||||
|
tcg_out_cmp (s, cond, arg1, arg2, const_arg2, 7);
|
||||||
|
if (crop) tcg_out32 (s, crop);
|
||||||
|
tcg_out32 (s, MFCR | RT (0));
|
||||||
|
tcg_out32 (s, (RLWINM
|
||||||
|
| RA (arg0)
|
||||||
|
| RS (0)
|
||||||
|
| SH (sh)
|
||||||
|
| MB (31)
|
||||||
|
| ME (31)
|
||||||
|
)
|
||||||
|
);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
tcg_abort ();
|
tcg_abort ();
|
||||||
}
|
}
|
||||||
|
|
||||||
tcg_out_cmp (s, cond, arg1, arg2, const_arg2, 7);
|
|
||||||
if (crop) tcg_out32 (s, crop);
|
|
||||||
tcg_out32 (s, MFCR | RT (0));
|
|
||||||
tcg_out32 (s, (RLWINM
|
|
||||||
| RA (arg0)
|
|
||||||
| RS (0)
|
|
||||||
| SH (sh)
|
|
||||||
| MB (31)
|
|
||||||
| ME (31)
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void tcg_out_setcond2 (TCGContext *s, const TCGArg *args,
|
static void tcg_out_setcond2 (TCGContext *s, const TCGArg *args,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue