case DIVScc:
{
int sign;
- uint32_t result, remainder;
+ uint32_t uresult, remainder;
int c0, y31;
if (!sparclite) {
Otherwise, calculate remainder + divisor. */
if (sign == 0)
operand2 = ~operand2 + 1;
- result = remainder + operand2;
+ uresult = remainder + operand2;
/* The SPARClite User's Manual is not clear on how
the "carry out" of the above ALU operation is to
even in cases where the divisor is subtracted
from the remainder. FIXME: get the true story
from Fujitsu. */
- c0 = result < (uint32_t) remainder
- || result < (uint32_t) operand2;
+ c0 = uresult < remainder || uresult < (uint32_t) operand2;
- if (result & 0x80000000)
+ if (uresult & 0x80000000)
sregs->psr |= PSR_N;
else
sregs->psr &= ~PSR_N;
y31 = (sregs->y & 0x80000000) == 0x80000000;
- if (result == 0 && sign == y31)
+ if (uresult == 0 && sign == y31)
sregs->psr |= PSR_Z;
else
sregs->psr &= ~PSR_Z;
sign = (sign && !y31) || (!c0 && (sign || !y31));
- if (sign ^ (result >> 31))
+ if (sign ^ (uresult >> 31))
sregs->psr |= PSR_V;
else
sregs->psr &= ~PSR_V;
else
sregs->psr &= ~PSR_C;
- sregs->y = result;
+ sregs->y = uresult;
if (rd != 0)
*rdd = (rs1 << 1) | !sign;
break;
case SMULCC:
{
- uint32_t result;
+ uint32_t uresult;
- mul64 (rs1, operand2, &sregs->y, &result, 1);
+ mul64 (rs1, operand2, &sregs->y, &uresult, 1);
- if (result & 0x80000000)
+ if (uresult & 0x80000000)
sregs->psr |= PSR_N;
else
sregs->psr &= ~PSR_N;
- if (result == 0)
+ if (uresult == 0)
sregs->psr |= PSR_Z;
else
sregs->psr &= ~PSR_Z;
- *rdd = result;
+ *rdd = uresult;
}
break;
case UMUL:
break;
case UMULCC:
{
- uint32_t result;
+ uint32_t uresult;
- mul64 (rs1, operand2, &sregs->y, &result, 0);
+ mul64 (rs1, operand2, &sregs->y, &uresult, 0);
- if (result & 0x80000000)
+ if (uresult & 0x80000000)
sregs->psr |= PSR_N;
else
sregs->psr &= ~PSR_N;
- if (result == 0)
+ if (uresult == 0)
sregs->psr |= PSR_Z;
else
sregs->psr &= ~PSR_Z;
- *rdd = result;
+ *rdd = uresult;
}
break;
case SDIV:
break;
case SDIVCC:
{
- uint32_t result;
+ uint32_t uresult;
if (sparclite) {
sregs->trap = TRAP_UNIMP;
break;
}
- div64 (sregs->y, rs1, operand2, &result, 1);
+ div64 (sregs->y, rs1, operand2, &uresult, 1);
- if (result & 0x80000000)
+ if (uresult & 0x80000000)
sregs->psr |= PSR_N;
else
sregs->psr &= ~PSR_N;
- if (result == 0)
+ if (uresult == 0)
sregs->psr |= PSR_Z;
else
sregs->psr &= ~PSR_Z;
/* FIXME: should set overflow flag correctly. */
sregs->psr &= ~(PSR_C | PSR_V);
- *rdd = result;
+ *rdd = uresult;
}
break;
case UDIV:
break;
case UDIVCC:
{
- uint32_t result;
+ uint32_t uresult;
if (sparclite) {
sregs->trap = TRAP_UNIMP;
break;
}
- div64 (sregs->y, rs1, operand2, &result, 0);
+ div64 (sregs->y, rs1, operand2, &uresult, 0);
- if (result & 0x80000000)
+ if (uresult & 0x80000000)
sregs->psr |= PSR_N;
else
sregs->psr &= ~PSR_N;
- if (result == 0)
+ if (uresult == 0)
sregs->psr |= PSR_Z;
else
sregs->psr &= ~PSR_Z;
/* FIXME: should set overflow flag correctly. */
sregs->psr &= ~(PSR_C | PSR_V);
- *rdd = result;
+ *rdd = uresult;
}
break;
case IXNOR:
case SCAN:
{
- uint32_t result, mask;
+ uint32_t uresult, mask;
int i;
if (!sparclite) {
break;
}
mask = (operand2 & 0x80000000) | (operand2 >> 1);
- result = rs1 ^ mask;
+ uresult = rs1 ^ mask;
for (i = 0; i < 32; i++) {
- if (result & 0x80000000)
+ if (uresult & 0x80000000)
break;
- result <<= 1;
+ uresult <<= 1;
}
*rdd = i == 32 ? 63 : i;