697 |
PPC_OP(divw) |
PPC_OP(divw) |
698 |
{ |
{ |
699 |
if ((Ts0 == INT32_MIN && Ts1 == -1) || Ts1 == 0) { |
if ((Ts0 == INT32_MIN && Ts1 == -1) || Ts1 == 0) { |
700 |
Ts0 = (-1) * (T0 >> 31); |
T0 = (int32_t)((-1) * (T0 >> 31)); |
701 |
} else { |
} else { |
702 |
Ts0 /= Ts1; |
T0 = (Ts0 / Ts1); |
703 |
} |
} |
704 |
RETURN(); |
RETURN(); |
705 |
} |
} |
712 |
T0 = (-1) * (T0 >> 31); |
T0 = (-1) * (T0 >> 31); |
713 |
} else { |
} else { |
714 |
xer_ov = 0; |
xer_ov = 0; |
715 |
Ts0 /= Ts1; |
T0 = (Ts0 / Ts1); |
716 |
} |
} |
717 |
RETURN(); |
RETURN(); |
718 |
} |
} |
744 |
/* multiply high word */ |
/* multiply high word */ |
745 |
PPC_OP(mulhw) |
PPC_OP(mulhw) |
746 |
{ |
{ |
747 |
Ts0 = ((int64_t)Ts0 * (int64_t)Ts1) >> 32; |
T0 = ((int64_t)Ts0 * (int64_t)Ts1) >> 32; |
748 |
RETURN(); |
RETURN(); |
749 |
} |
} |
750 |
|
|
758 |
/* multiply low immediate */ |
/* multiply low immediate */ |
759 |
PPC_OP(mulli) |
PPC_OP(mulli) |
760 |
{ |
{ |
761 |
Ts0 *= SPARAM(1); |
T0 = (Ts0 * SPARAM(1)); |
762 |
RETURN(); |
RETURN(); |
763 |
} |
} |
764 |
|
|
779 |
} else { |
} else { |
780 |
xer_ov = 0; |
xer_ov = 0; |
781 |
} |
} |
782 |
Ts0 = res; |
T0 = (int32_t)res; |
783 |
RETURN(); |
RETURN(); |
784 |
} |
} |
785 |
|
|
787 |
PPC_OP(neg) |
PPC_OP(neg) |
788 |
{ |
{ |
789 |
if (T0 != 0x80000000) { |
if (T0 != 0x80000000) { |
790 |
Ts0 = -Ts0; |
T0 = -Ts0; |
791 |
} |
} |
792 |
RETURN(); |
RETURN(); |
793 |
} |
} |
799 |
xer_so = 1; |
xer_so = 1; |
800 |
} else { |
} else { |
801 |
xer_ov = 0; |
xer_ov = 0; |
802 |
Ts0 = -Ts0; |
T0 = -Ts0; |
803 |
} |
} |
804 |
RETURN(); |
RETURN(); |
805 |
} |
} |
1047 |
/* extend sign byte */ |
/* extend sign byte */ |
1048 |
PPC_OP(extsb) |
PPC_OP(extsb) |
1049 |
{ |
{ |
1050 |
Ts0 = (int8_t)(Ts0); |
T0 = (int32_t)((int8_t)(Ts0)); |
1051 |
RETURN(); |
RETURN(); |
1052 |
} |
} |
1053 |
|
|
1054 |
/* extend sign half word */ |
/* extend sign half word */ |
1055 |
PPC_OP(extsh) |
PPC_OP(extsh) |
1056 |
{ |
{ |
1057 |
Ts0 = (int16_t)(Ts0); |
T0 = (int32_t)((int16_t)(Ts0)); |
1058 |
RETURN(); |
RETURN(); |
1059 |
} |
} |
1060 |
|
|
1175 |
/* shift right algebraic word immediate */ |
/* shift right algebraic word immediate */ |
1176 |
PPC_OP(srawi) |
PPC_OP(srawi) |
1177 |
{ |
{ |
1178 |
Ts1 = Ts0; |
T1 = T0; |
1179 |
Ts0 = Ts0 >> PARAM(1); |
T0 = (Ts0 >> PARAM(1)); |
1180 |
if (Ts1 < 0 && (Ts1 & PARAM(2)) != 0) { |
if (Ts1 < 0 && (Ts1 & PARAM(2)) != 0) { |
1181 |
xer_ca = 1; |
xer_ca = 1; |
1182 |
} else { |
} else { |
1207 |
/* fadds - fadds. */ |
/* fadds - fadds. */ |
1208 |
PPC_OP(fadds) |
PPC_OP(fadds) |
1209 |
{ |
{ |
1210 |
FTS0 += FTS1; |
FT0 = FTS0 + FTS1; |
1211 |
RETURN(); |
RETURN(); |
1212 |
} |
} |
1213 |
|
|
1221 |
/* fsubs - fsubs. */ |
/* fsubs - fsubs. */ |
1222 |
PPC_OP(fsubs) |
PPC_OP(fsubs) |
1223 |
{ |
{ |
1224 |
FTS0 -= FTS1; |
FT0 = FTS0 - FTS1; |
1225 |
RETURN(); |
RETURN(); |
1226 |
} |
} |
1227 |
|
|
1235 |
/* fmuls - fmuls. */ |
/* fmuls - fmuls. */ |
1236 |
PPC_OP(fmuls) |
PPC_OP(fmuls) |
1237 |
{ |
{ |
1238 |
FTS0 *= FTS1; |
FT0 = FTS0 * FTS1; |
1239 |
RETURN(); |
RETURN(); |
1240 |
} |
} |
1241 |
|
|
1249 |
/* fdivs - fdivs. */ |
/* fdivs - fdivs. */ |
1250 |
PPC_OP(fdivs) |
PPC_OP(fdivs) |
1251 |
{ |
{ |
1252 |
FTS0 /= FTS1; |
FT0 = FTS0 / FTS1; |
1253 |
RETURN(); |
RETURN(); |
1254 |
} |
} |
1255 |
|
|
1299 |
/* fmadds - fmadds. */ |
/* fmadds - fmadds. */ |
1300 |
PPC_OP(fmadds) |
PPC_OP(fmadds) |
1301 |
{ |
{ |
1302 |
FTS0 = (FTS0 * FTS1) + FTS2; |
FT0 = (FTS0 * FTS1) + FTS2; |
1303 |
RETURN(); |
RETURN(); |
1304 |
} |
} |
1305 |
|
|
1313 |
/* fmsubs - fmsubs. */ |
/* fmsubs - fmsubs. */ |
1314 |
PPC_OP(fmsubs) |
PPC_OP(fmsubs) |
1315 |
{ |
{ |
1316 |
FTS0 = (FTS0 * FTS1) - FTS2; |
FT0 = (FTS0 * FTS1) - FTS2; |
1317 |
RETURN(); |
RETURN(); |
1318 |
} |
} |
1319 |
|
|
1349 |
/* frsp - frsp. */ |
/* frsp - frsp. */ |
1350 |
PPC_OP(frsp) |
PPC_OP(frsp) |
1351 |
{ |
{ |
1352 |
FTS0 = FT0; |
FT0 = (float)FT0; |
1353 |
RETURN(); |
RETURN(); |
1354 |
} |
} |
1355 |
|
|