@@ -754,12 +754,10 @@ void CPU::PGXP::CPU_ANDI(u32 instr, u32 rsVal)
754
754
755
755
// Rt = Rs & Imm
756
756
const u32 rtVal = rsVal & imm (instr);
757
- psx_value vRt;
758
- PGXP_value ret;
759
-
760
757
Validate (&g_state.pgxp_gpr [rs (instr)], rsVal);
761
- ret = g_state.pgxp_gpr [rs (instr)];
758
+ PGXP_value ret = g_state.pgxp_gpr [rs (instr)];
762
759
760
+ psx_value vRt;
763
761
vRt.d = rtVal;
764
762
765
763
ret.y = 0 .f ; // remove upper 16-bits
@@ -791,12 +789,11 @@ void CPU::PGXP::CPU_ORI(u32 instr, u32 rsVal)
791
789
792
790
// Rt = Rs | Imm
793
791
const u32 rtVal = rsVal | imm (instr);
794
- psx_value vRt;
795
- PGXP_value ret;
796
792
797
793
Validate (&g_state.pgxp_gpr [rs (instr)], rsVal);
798
- ret = g_state.pgxp_gpr [rs (instr)];
794
+ PGXP_value ret = g_state.pgxp_gpr [rs (instr)];
799
795
796
+ psx_value vRt;
800
797
vRt.d = rtVal;
801
798
802
799
switch (imm (instr))
@@ -820,12 +817,11 @@ void CPU::PGXP::CPU_XORI(u32 instr, u32 rsVal)
820
817
821
818
// Rt = Rs ^ Imm
822
819
const u32 rtVal = rsVal ^ imm (instr);
823
- psx_value vRt;
824
- PGXP_value ret;
825
820
826
821
Validate (&g_state.pgxp_gpr [rs (instr)], rsVal);
827
- ret = g_state.pgxp_gpr [rs (instr)];
822
+ PGXP_value ret = g_state.pgxp_gpr [rs (instr)];
828
823
824
+ psx_value vRt;
829
825
vRt.d = rtVal;
830
826
831
827
switch (imm (instr))
@@ -848,12 +844,10 @@ void CPU::PGXP::CPU_SLTI(u32 instr, u32 rsVal)
848
844
LOG_VALUES_C1 (rs (instr), rsVal);
849
845
850
846
// Rt = Rs < Imm (signed)
851
- psx_value tempImm;
852
- PGXP_value ret;
853
-
854
847
Validate (&g_state.pgxp_gpr [rs (instr)], rsVal);
855
- ret = g_state.pgxp_gpr [rs (instr)];
848
+ PGXP_value ret = g_state.pgxp_gpr [rs (instr)];
856
849
850
+ psx_value tempImm;
857
851
tempImm.w .h = imm (instr);
858
852
ret.y = 0 .f ;
859
853
ret.x = (g_state.pgxp_gpr [rs (instr)].x < tempImm.sw .h ) ? 1 .f : 0 .f ;
@@ -868,12 +862,10 @@ void CPU::PGXP::CPU_SLTIU(u32 instr, u32 rsVal)
868
862
LOG_VALUES_C1 (rs (instr), rsVal);
869
863
870
864
// Rt = Rs < Imm (Unsigned)
871
- psx_value tempImm;
872
- PGXP_value ret;
873
-
874
865
Validate (&g_state.pgxp_gpr [rs (instr)], rsVal);
875
- ret = g_state.pgxp_gpr [rs (instr)];
866
+ PGXP_value ret = g_state.pgxp_gpr [rs (instr)];
876
867
868
+ psx_value tempImm;
877
869
tempImm.w .h = imm (instr);
878
870
ret.y = 0 .f ;
879
871
ret.x = (f16Unsign (g_state.pgxp_gpr [rs (instr)].x ) < tempImm.w .h ) ? 1 .f : 0 .f ;
@@ -906,10 +898,10 @@ void CPU::PGXP::CPU_ADD(u32 instr, u32 rsVal, u32 rtVal)
906
898
LOG_VALUES_C2 (rs (instr), rsVal, rt (instr), rtVal);
907
899
908
900
// Rd = Rs + Rt (signed)
909
- PGXP_value ret;
910
901
Validate (&g_state.pgxp_gpr [rs (instr)], rsVal);
911
902
Validate (&g_state.pgxp_gpr [rt (instr)], rtVal);
912
903
904
+ PGXP_value ret;
913
905
if (rtVal == 0 )
914
906
{
915
907
ret = g_state.pgxp_gpr [rs (instr)];
@@ -963,7 +955,6 @@ void CPU::PGXP::CPU_SUB(u32 instr, u32 rsVal, u32 rtVal)
963
955
LOG_VALUES_C2 (rs (instr), rsVal, rt (instr), rtVal);
964
956
965
957
// Rd = Rs - Rt (signed)
966
- PGXP_value ret;
967
958
Validate (&g_state.pgxp_gpr [rs (instr)], rsVal);
968
959
Validate (&g_state.pgxp_gpr [rt (instr)], rtVal);
969
960
@@ -975,7 +966,7 @@ void CPU::PGXP::CPU_SUB(u32 instr, u32 rsVal, u32 rtVal)
975
966
MakeValid (&g_state.pgxp_gpr [rt (instr)], rtVal);
976
967
}
977
968
978
- ret = g_state.pgxp_gpr [rs (instr)];
969
+ PGXP_value ret = g_state.pgxp_gpr [rs (instr)];
979
970
980
971
ret.x = (float )f16Unsign (ret.x );
981
972
ret.x -= (float )f16Unsign (g_state.pgxp_gpr [rt (instr)].x );
@@ -1007,8 +998,6 @@ ALWAYS_INLINE_RELEASE void CPU::PGXP::CPU_BITWISE(u32 instr, u32 rdVal, u32 rsVa
1007
998
LOG_VALUES_C2 (rs (instr), rsVal, rt (instr), rtVal);
1008
999
1009
1000
// Rd = Rs & Rt
1010
- psx_value vald, vals, valt;
1011
- PGXP_value ret;
1012
1001
1013
1002
Validate (&g_state.pgxp_gpr [rs (instr)], rsVal);
1014
1003
Validate (&g_state.pgxp_gpr [rt (instr)], rtVal);
@@ -1021,11 +1010,12 @@ ALWAYS_INLINE_RELEASE void CPU::PGXP::CPU_BITWISE(u32 instr, u32 rdVal, u32 rsVa
1021
1010
MakeValid (&g_state.pgxp_gpr [rt (instr)], rtVal);
1022
1011
}
1023
1012
1013
+ psx_value vald, vals, valt;
1024
1014
vald.d = rdVal;
1025
1015
vals.d = rsVal;
1026
1016
valt.d = rtVal;
1027
1017
1028
- // CPU_reg[rd(instr)].valid = CPU_reg[rs(instr)].valid && CPU_reg[rt(instr)].valid ;
1018
+ PGXP_value ret ;
1029
1019
ret.flags = VALID_01;
1030
1020
1031
1021
if (vald.w .l == 0 )
@@ -1135,7 +1125,6 @@ void CPU::PGXP::CPU_SLT(u32 instr, u32 rsVal, u32 rtVal)
1135
1125
LOG_VALUES_C2 (rs (instr), rsVal, rt (instr), rtVal);
1136
1126
1137
1127
// Rd = Rs < Rt (signed)
1138
- PGXP_value ret;
1139
1128
Validate (&g_state.pgxp_gpr [rs (instr)], rsVal);
1140
1129
Validate (&g_state.pgxp_gpr [rt (instr)], rtVal);
1141
1130
@@ -1147,7 +1136,7 @@ void CPU::PGXP::CPU_SLT(u32 instr, u32 rsVal, u32 rtVal)
1147
1136
MakeValid (&g_state.pgxp_gpr [rt (instr)], rtVal);
1148
1137
}
1149
1138
1150
- ret = g_state.pgxp_gpr [rs (instr)];
1139
+ PGXP_value ret = g_state.pgxp_gpr [rs (instr)];
1151
1140
ret.y = 0 .f ;
1152
1141
ret.SetValidComp (1 , true );
1153
1142
@@ -1164,7 +1153,6 @@ void CPU::PGXP::CPU_SLTU(u32 instr, u32 rsVal, u32 rtVal)
1164
1153
LOG_VALUES_C2 (rs (instr), rsVal, rt (instr), rtVal);
1165
1154
1166
1155
// Rd = Rs < Rt (unsigned)
1167
- PGXP_value ret;
1168
1156
Validate (&g_state.pgxp_gpr [rs (instr)], rsVal);
1169
1157
Validate (&g_state.pgxp_gpr [rt (instr)], rtVal);
1170
1158
@@ -1176,7 +1164,7 @@ void CPU::PGXP::CPU_SLTU(u32 instr, u32 rsVal, u32 rtVal)
1176
1164
MakeValid (&g_state.pgxp_gpr [rt (instr)], rtVal);
1177
1165
}
1178
1166
1179
- ret = g_state.pgxp_gpr [rs (instr)];
1167
+ PGXP_value ret = g_state.pgxp_gpr [rs (instr)];
1180
1168
ret.y = 0 .f ;
1181
1169
ret.SetValidComp (1 , true );
1182
1170
@@ -1411,11 +1399,10 @@ void CPU::PGXP::CPU_SLL(u32 instr, u32 rtVal)
1411
1399
1412
1400
// Rd = Rt << Sa
1413
1401
const u32 rdVal = rtVal << sa (instr);
1414
- PGXP_value ret;
1415
- u32 sh = sa (instr);
1402
+ const u32 sh = sa (instr);
1416
1403
Validate (&g_state.pgxp_gpr [rt (instr)], rtVal);
1417
1404
1418
- ret = g_state.pgxp_gpr [rt (instr)];
1405
+ PGXP_value ret = g_state.pgxp_gpr [rt (instr)];
1419
1406
1420
1407
// TODO: Shift flags
1421
1408
double x = f16Unsign (g_state.pgxp_gpr [rt (instr)].x );
@@ -1458,12 +1445,9 @@ void CPU::PGXP::CPU_SRL(u32 instr, u32 rtVal)
1458
1445
1459
1446
// Rd = Rt >> Sa
1460
1447
const u32 rdVal = rtVal >> sa (instr);
1461
- PGXP_value ret;
1462
- u32 sh = sa (instr);
1448
+ const u32 sh = sa (instr);
1463
1449
Validate (&g_state.pgxp_gpr [rt (instr)], rtVal);
1464
1450
1465
- ret = g_state.pgxp_gpr [rt (instr)];
1466
-
1467
1451
double x = g_state.pgxp_gpr [rt (instr)].x , y = f16Unsign (g_state.pgxp_gpr [rt (instr)].y );
1468
1452
1469
1453
psx_value iX;
@@ -1511,9 +1495,9 @@ void CPU::PGXP::CPU_SRL(u32 instr, u32 rtVal)
1511
1495
x = f16Sign (x);
1512
1496
y = f16Sign (y);
1513
1497
1498
+ PGXP_value ret = g_state.pgxp_gpr [rt (instr)];
1514
1499
ret.x = (float )x;
1515
1500
ret.y = (float )y;
1516
-
1517
1501
ret.value = rdVal;
1518
1502
g_state.pgxp_gpr [rd (instr)] = ret;
1519
1503
}
@@ -1524,10 +1508,9 @@ void CPU::PGXP::CPU_SRA(u32 instr, u32 rtVal)
1524
1508
1525
1509
// Rd = Rt >> Sa
1526
1510
const u32 rdVal = static_cast <u32 >(static_cast <s32>(rtVal) >> sa (instr));
1527
- PGXP_value ret;
1528
- u32 sh = sa (instr);
1511
+ const u32 sh = sa (instr);
1529
1512
Validate (&g_state.pgxp_gpr [rt (instr)], rtVal);
1530
- ret = g_state.pgxp_gpr [rt (instr)];
1513
+ PGXP_value ret = g_state.pgxp_gpr [rt (instr)];
1531
1514
1532
1515
double x = g_state.pgxp_gpr [rt (instr)].x , y = g_state.pgxp_gpr [rt (instr)].y ;
1533
1516
@@ -1602,13 +1585,10 @@ void CPU::PGXP::CPU_SLLV(u32 instr, u32 rtVal, u32 rsVal)
1602
1585
1603
1586
// Rd = Rt << Rs
1604
1587
const u32 rdVal = rtVal << rsVal;
1605
- PGXP_value ret;
1606
- u32 sh = rsVal & 0x1F ;
1588
+ const u32 sh = rsVal & 0x1F ;
1607
1589
Validate (&g_state.pgxp_gpr [rt (instr)], rtVal);
1608
1590
Validate (&g_state.pgxp_gpr [rs (instr)], rsVal);
1609
1591
1610
- ret = g_state.pgxp_gpr [rt (instr)];
1611
-
1612
1592
double x = f16Unsign (g_state.pgxp_gpr [rt (instr)].x );
1613
1593
double y = f16Unsign (g_state.pgxp_gpr [rt (instr)].y );
1614
1594
if (sh >= 32 )
@@ -1636,9 +1616,9 @@ void CPU::PGXP::CPU_SLLV(u32 instr, u32 rtVal, u32 rsVal)
1636
1616
y = f16Sign (y);
1637
1617
}
1638
1618
1619
+ PGXP_value ret = g_state.pgxp_gpr [rt (instr)];
1639
1620
ret.x = (float )x;
1640
1621
ret.y = (float )y;
1641
-
1642
1622
ret.value = rdVal;
1643
1623
g_state.pgxp_gpr [rd (instr)] = ret;
1644
1624
}
@@ -1649,13 +1629,10 @@ void CPU::PGXP::CPU_SRLV(u32 instr, u32 rtVal, u32 rsVal)
1649
1629
1650
1630
// Rd = Rt >> Sa
1651
1631
const u32 rdVal = rtVal >> rsVal;
1652
- PGXP_value ret;
1653
- u32 sh = rsVal & 0x1F ;
1632
+ const u32 sh = rsVal & 0x1F ;
1654
1633
Validate (&g_state.pgxp_gpr [rt (instr)], rtVal);
1655
1634
Validate (&g_state.pgxp_gpr [rs (instr)], rsVal);
1656
1635
1657
- ret = g_state.pgxp_gpr [rt (instr)];
1658
-
1659
1636
double x = g_state.pgxp_gpr [rt (instr)].x , y = f16Unsign (g_state.pgxp_gpr [rt (instr)].y );
1660
1637
1661
1638
psx_value iX;
@@ -1703,9 +1680,9 @@ void CPU::PGXP::CPU_SRLV(u32 instr, u32 rtVal, u32 rsVal)
1703
1680
x = f16Sign (x);
1704
1681
y = f16Sign (y);
1705
1682
1683
+ PGXP_value ret = g_state.pgxp_gpr [rt (instr)];
1706
1684
ret.x = (float )x;
1707
1685
ret.y = (float )y;
1708
-
1709
1686
ret.value = rdVal;
1710
1687
g_state.pgxp_gpr [rd (instr)] = ret;
1711
1688
}
@@ -1716,13 +1693,10 @@ void CPU::PGXP::CPU_SRAV(u32 instr, u32 rtVal, u32 rsVal)
1716
1693
1717
1694
// Rd = Rt >> Sa
1718
1695
const u32 rdVal = static_cast <u32 >(static_cast <s32>(rtVal) >> rsVal);
1719
- PGXP_value ret;
1720
- u32 sh = rsVal & 0x1F ;
1696
+ const u32 sh = rsVal & 0x1F ;
1721
1697
Validate (&g_state.pgxp_gpr [rt (instr)], rtVal);
1722
1698
Validate (&g_state.pgxp_gpr [rs (instr)], rsVal);
1723
1699
1724
- ret = g_state.pgxp_gpr [rt (instr)];
1725
-
1726
1700
double x = g_state.pgxp_gpr [rt (instr)].x , y = g_state.pgxp_gpr [rt (instr)].y ;
1727
1701
1728
1702
psx_value iX;
@@ -1767,12 +1741,11 @@ void CPU::PGXP::CPU_SRAV(u32 instr, u32 rtVal, u32 rsVal)
1767
1741
else
1768
1742
y = y / (1 << sh);
1769
1743
1744
+ PGXP_value ret = g_state.pgxp_gpr [rt (instr)];
1770
1745
x = f16Sign (x);
1771
1746
y = f16Sign (y);
1772
-
1773
1747
ret.x = (float )x;
1774
1748
ret.y = (float )y;
1775
-
1776
1749
ret.value = rdVal;
1777
1750
g_state.pgxp_gpr [rd (instr)] = ret;
1778
1751
}
0 commit comments