mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 16:23:55 -06:00
SH4: Convert remaining non-fp ops to TCG
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net> git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5120 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
parent
c047da1af4
commit
69d6275b00
5 changed files with 130 additions and 153 deletions
|
@ -163,27 +163,27 @@ uint32_t helper_addv(uint32_t arg0, uint32_t arg1)
|
|||
#define SETM env->sr |= SR_M
|
||||
#define CLRM env->sr &= ~SR_M
|
||||
|
||||
void helper_div1_T0_T1(void)
|
||||
uint32_t helper_div1(uint32_t arg0, uint32_t arg1)
|
||||
{
|
||||
uint32_t tmp0, tmp2;
|
||||
uint8_t old_q, tmp1 = 0xff;
|
||||
|
||||
//printf("div1 T0=0x%08x T1=0x%08x M=%d Q=%d T=%d\n", T0, T1, M, Q, T);
|
||||
//printf("div1 arg0=0x%08x arg1=0x%08x M=%d Q=%d T=%d\n", arg0, arg1, M, Q, T);
|
||||
old_q = Q;
|
||||
if ((0x80000000 & T1) != 0)
|
||||
if ((0x80000000 & arg1) != 0)
|
||||
SETQ;
|
||||
else
|
||||
CLRQ;
|
||||
tmp2 = T0;
|
||||
T1 <<= 1;
|
||||
T1 |= T;
|
||||
tmp2 = arg0;
|
||||
arg1 <<= 1;
|
||||
arg1 |= T;
|
||||
switch (old_q) {
|
||||
case 0:
|
||||
switch (M) {
|
||||
case 0:
|
||||
tmp0 = T1;
|
||||
T1 -= tmp2;
|
||||
tmp1 = T1 > tmp0;
|
||||
tmp0 = arg1;
|
||||
arg1 -= tmp2;
|
||||
tmp1 = arg1 > tmp0;
|
||||
switch (Q) {
|
||||
case 0:
|
||||
if (tmp1)
|
||||
|
@ -200,9 +200,9 @@ void helper_div1_T0_T1(void)
|
|||
}
|
||||
break;
|
||||
case 1:
|
||||
tmp0 = T1;
|
||||
T1 += tmp2;
|
||||
tmp1 = T1 < tmp0;
|
||||
tmp0 = arg1;
|
||||
arg1 += tmp2;
|
||||
tmp1 = arg1 < tmp0;
|
||||
switch (Q) {
|
||||
case 0:
|
||||
if (tmp1 == 0)
|
||||
|
@ -223,9 +223,9 @@ void helper_div1_T0_T1(void)
|
|||
case 1:
|
||||
switch (M) {
|
||||
case 0:
|
||||
tmp0 = T1;
|
||||
T1 += tmp2;
|
||||
tmp1 = T1 < tmp0;
|
||||
tmp0 = arg1;
|
||||
arg1 += tmp2;
|
||||
tmp1 = arg1 < tmp0;
|
||||
switch (Q) {
|
||||
case 0:
|
||||
if (tmp1)
|
||||
|
@ -242,9 +242,9 @@ void helper_div1_T0_T1(void)
|
|||
}
|
||||
break;
|
||||
case 1:
|
||||
tmp0 = T1;
|
||||
T1 -= tmp2;
|
||||
tmp1 = T1 > tmp0;
|
||||
tmp0 = arg1;
|
||||
arg1 -= tmp2;
|
||||
tmp1 = arg1 > tmp0;
|
||||
switch (Q) {
|
||||
case 0:
|
||||
if (tmp1 == 0)
|
||||
|
@ -267,7 +267,8 @@ void helper_div1_T0_T1(void)
|
|||
SETT;
|
||||
else
|
||||
CLRT;
|
||||
//printf("Output: T1=0x%08x M=%d Q=%d T=%d\n", T1, M, Q, T);
|
||||
//printf("Output: arg1=0x%08x M=%d Q=%d T=%d\n", arg1, M, Q, T);
|
||||
return arg1;
|
||||
}
|
||||
|
||||
void helper_macl(uint32_t arg0, uint32_t arg1)
|
||||
|
@ -365,30 +366,6 @@ uint32_t helper_subv(uint32_t arg0, uint32_t arg1)
|
|||
return arg1;
|
||||
}
|
||||
|
||||
void helper_rotcl(uint32_t * addr)
|
||||
{
|
||||
uint32_t new;
|
||||
|
||||
new = (*addr << 1) | (env->sr & SR_T);
|
||||
if (*addr & 0x80000000)
|
||||
env->sr |= SR_T;
|
||||
else
|
||||
env->sr &= ~SR_T;
|
||||
*addr = new;
|
||||
}
|
||||
|
||||
void helper_rotcr(uint32_t * addr)
|
||||
{
|
||||
uint32_t new;
|
||||
|
||||
new = (*addr >> 1) | ((env->sr & SR_T) ? 0x80000000 : 0);
|
||||
if (*addr & 1)
|
||||
env->sr |= SR_T;
|
||||
else
|
||||
env->sr &= ~SR_T;
|
||||
*addr = new;
|
||||
}
|
||||
|
||||
void helper_ld_fpscr(uint32_t val)
|
||||
{
|
||||
env->fpscr = val & 0x003fffff;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue