Lines Matching refs:sh2

54 		sh2->pc = (newpc);														\
55 readop_pr = pSh2Ext->MemMap[ (sh2->pc >> SH2_SHIFT) + SH2_WADD * 2 ]; \
56 pSh2Ext->opbase = readop_pr - (sh2->pc & ~SH2_PAGEM);
60 #define change_pc(newpc) sh2->pc = (newpc);
125 static SH2 * sh2; variable
129 return sh2->cycle_counts + sh2->sh2_cycles_to_run - sh2->sh2_icount; in sh2_GetTotalCycles()
174 SH2 sh2; member
513 sh2 = & (pSh2Ext->sh2); in Sh2Init()
515 sh2->sh2_eat_cycles = 1; in Sh2Init()
548 sh2 = & (pSh2Ext->sh2); in Sh2Open()
564 sh2->sh2_eat_cycles = i; in Sh2SetEatCycles()
582 INT32 tmp_eat_cycles = sh2->sh2_eat_cycles; in Sh2Reset()
583 int (*tmp_irq_callback)(int irqline) = sh2->irq_callback; in Sh2Reset()
585 memset(sh2, 0, sizeof(SH2)); in Sh2Reset()
587 sh2->sh2_eat_cycles = tmp_eat_cycles; // save & restore init-time variables in Sh2Reset()
588 sh2->irq_callback = tmp_irq_callback; in Sh2Reset()
590 sh2->pc = pc; in Sh2Reset()
591 sh2->r[15] = r15; in Sh2Reset()
592 sh2->sr = I; in Sh2Reset()
594 change_pc(sh2->pc & AM); in Sh2Reset()
596 sh2->internal_irq_level = -1; in Sh2Reset()
782 if (irqline <= (signed int)((sh2->sr >> 4) & 15)) /* If the cpu forbids this interrupt */ in sh2_exception()
786 if (sh2->internal_irq_level == irqline) in sh2_exception()
788 vector = sh2->internal_irq_vector; in sh2_exception()
793 if(sh2->m[0x38] & 0x00010000) in sh2_exception()
815 sh2->r[15] -= 4; in sh2_exception()
816 WL( sh2->r[15], sh2->sr ); /* push SR onto stack */ in sh2_exception()
817 sh2->r[15] -= 4; in sh2_exception()
818 WL( sh2->r[15], sh2->pc ); /* push PC onto stack */ in sh2_exception()
822 sh2->sr = sh2->sr | I; in sh2_exception()
824 sh2->sr = (sh2->sr & ~I) | (irqline << 4); in sh2_exception()
827 sh2->pc = RL( sh2->vbr + vector * 4 ); in sh2_exception()
828 change_pc(sh2->pc & AM); in sh2_exception()
834 if (sh2->pending_irq & (1 << 0)) irq = 0; \
835 if (sh2->pending_irq & (1 << 1)) irq = 1; \
836 if (sh2->pending_irq & (1 << 2)) irq = 2; \
837 if (sh2->pending_irq & (1 << 3)) irq = 3; \
838 if (sh2->pending_irq & (1 << 4)) irq = 4; \
839 if (sh2->pending_irq & (1 << 5)) irq = 5; \
840 if (sh2->pending_irq & (1 << 6)) irq = 6; \
841 if (sh2->pending_irq & (1 << 7)) irq = 7; \
842 if (sh2->pending_irq & (1 << 8)) irq = 8; \
843 if (sh2->pending_irq & (1 << 9)) irq = 9; \
844 if (sh2->pending_irq & (1 << 10)) irq = 10; \
845 if (sh2->pending_irq & (1 << 11)) irq = 11; \
846 if (sh2->pending_irq & (1 << 12)) irq = 12; \
847 if (sh2->pending_irq & (1 << 13)) irq = 13; \
848 if (sh2->pending_irq & (1 << 14)) irq = 14; \
849 if (sh2->pending_irq & (1 << 15)) irq = 15; \
850 …if ((sh2->internal_irq_level != -1) && (sh2->internal_irq_level > irq)) irq = sh2->internal_irq_le…
868 sh2->r[n] += sh2->r[m]; in ADD()
877 sh2->r[n] += (INT32)(INT16)(INT8)i; in ADDI()
888 tmp1 = sh2->r[n] + sh2->r[m]; in ADDC()
889 tmp0 = sh2->r[n]; in ADDC()
890 sh2->r[n] = tmp1 + (sh2->sr & T); in ADDC()
892 sh2->sr |= T; in ADDC()
894 sh2->sr &= ~T; in ADDC()
895 if (tmp1 > sh2->r[n]) in ADDC()
896 sh2->sr |= T; in ADDC()
907 if ((INT32) sh2->r[n] >= 0) in ADDV()
911 if ((INT32) sh2->r[m] >= 0) in ADDV()
916 sh2->r[n] += sh2->r[m]; in ADDV()
917 if ((INT32) sh2->r[n] >= 0) in ADDV()
925 sh2->sr |= T; in ADDV()
927 sh2->sr &= ~T; in ADDV()
930 sh2->sr &= ~T; in ADDV()
939 sh2->r[n] &= sh2->r[m]; in AND()
949 sh2->r[0] &= i; in ANDI()
960 sh2->ea = sh2->gbr + sh2->r[0]; in ANDM()
961 temp = i & RB( sh2->ea ); in ANDM()
962 WB( sh2->ea, temp ); in ANDM()
963 sh2->sh2_icount -= 2; in ANDM()
972 if ((sh2->sr & T) == 0) in BF()
975 sh2->pc = sh2->ea = sh2->pc + disp * 2 + 2; in BF()
976 change_pc(sh2->pc & AM); in BF()
977 sh2->sh2_icount -= 2; in BF()
987 if ((sh2->sr & T) == 0) in BFS()
990 sh2->delay = sh2->pc; in BFS()
991 sh2->pc = sh2->ea = sh2->pc + disp * 2 + 2; in BFS()
992 sh2->sh2_icount--; in BFS()
1007 UINT32 next_opcode = RW(sh2->ppc & AM); in BRA()
1014 sh2->sh2_icount -= 10; in BRA()
1016 sh2->sh2_total_cycles += sh2->sh2_icount; in BRA()
1017 sh2->sh2_icount %= 3; /* cycles for BRA $ and NOP taken (3) */ in BRA()
1022 sh2->delay = sh2->pc; in BRA()
1023 sh2->pc = sh2->ea = sh2->pc + disp * 2 + 2; in BRA()
1024 sh2->sh2_icount--; in BRA()
1033 sh2->delay = sh2->pc; in BRAF()
1034 sh2->pc += sh2->r[m] + 2; in BRAF()
1035 sh2->sh2_icount--; in BRAF()
1046 sh2->pr = sh2->pc + 2; in BSR()
1047 sh2->delay = sh2->pc; in BSR()
1048 sh2->pc = sh2->ea = sh2->pc + disp * 2 + 2; in BSR()
1049 sh2->sh2_icount--; in BSR()
1058 sh2->pr = sh2->pc + 2; in BSRF()
1059 sh2->delay = sh2->pc; in BSRF()
1060 sh2->pc += sh2->r[m] + 2; in BSRF()
1061 sh2->sh2_icount--; in BSRF()
1070 if ((sh2->sr & T) != 0) in BT()
1073 sh2->pc = sh2->ea = sh2->pc + disp * 2 + 2; in BT()
1074 change_pc(sh2->pc & AM); in BT()
1075 sh2->sh2_icount -= 2; in BT()
1085 if ((sh2->sr & T) != 0) in BTS()
1088 sh2->delay = sh2->pc; in BTS()
1089 sh2->pc = sh2->ea = sh2->pc + disp * 2 + 2; in BTS()
1090 sh2->sh2_icount--; in BTS()
1100 sh2->mach = 0; in CLRMAC()
1101 sh2->macl = 0; in CLRMAC()
1110 sh2->sr &= ~T; in CLRT()
1119 if (sh2->r[n] == sh2->r[m]) in CMPEQ()
1120 sh2->sr |= T; in CMPEQ()
1122 sh2->sr &= ~T; in CMPEQ()
1131 if ((INT32) sh2->r[n] >= (INT32) sh2->r[m]) in CMPGE()
1132 sh2->sr |= T; in CMPGE()
1134 sh2->sr &= ~T; in CMPGE()
1143 if ((INT32) sh2->r[n] > (INT32) sh2->r[m]) in CMPGT()
1144 sh2->sr |= T; in CMPGT()
1146 sh2->sr &= ~T; in CMPGT()
1155 if ((UINT32) sh2->r[n] > (UINT32) sh2->r[m]) in CMPHI()
1156 sh2->sr |= T; in CMPHI()
1158 sh2->sr &= ~T; in CMPHI()
1167 if ((UINT32) sh2->r[n] >= (UINT32) sh2->r[m]) in CMPHS()
1168 sh2->sr |= T; in CMPHS()
1170 sh2->sr &= ~T; in CMPHS()
1180 if ((INT32) sh2->r[n] > 0) in CMPPL()
1181 sh2->sr |= T; in CMPPL()
1183 sh2->sr &= ~T; in CMPPL()
1192 if ((INT32) sh2->r[n] >= 0) in CMPPZ()
1193 sh2->sr |= T; in CMPPZ()
1195 sh2->sr &= ~T; in CMPPZ()
1206 temp = sh2->r[n] ^ sh2->r[m]; in CMPSTR()
1212 sh2->sr &= ~T; in CMPSTR()
1214 sh2->sr |= T; in CMPSTR()
1226 if (sh2->r[0] == imm) in CMPIM()
1227 sh2->sr |= T; in CMPIM()
1229 sh2->sr &= ~T; in CMPIM()
1238 if ((sh2->r[n] & 0x80000000) == 0) in DIV0S()
1239 sh2->sr &= ~Q; in DIV0S()
1241 sh2->sr |= Q; in DIV0S()
1242 if ((sh2->r[m] & 0x80000000) == 0) in DIV0S()
1243 sh2->sr &= ~M; in DIV0S()
1245 sh2->sr |= M; in DIV0S()
1246 if ((sh2->r[m] ^ sh2->r[n]) & 0x80000000) in DIV0S()
1247 sh2->sr |= T; in DIV0S()
1249 sh2->sr &= ~T; in DIV0S()
1258 sh2->sr &= ~(M | Q | T); in DIV0U()
1270 old_q = sh2->sr & Q; in DIV1()
1271 if (0x80000000 & sh2->r[n]) in DIV1()
1272 sh2->sr |= Q; in DIV1()
1274 sh2->sr &= ~Q; in DIV1()
1276 sh2->r[n] = (sh2->r[n] << 1) | (sh2->sr & T); in DIV1()
1280 if (!(sh2->sr & M)) in DIV1()
1282 tmp0 = sh2->r[n]; in DIV1()
1283 sh2->r[n] -= sh2->r[m]; in DIV1()
1284 if(!(sh2->sr & Q)) in DIV1()
1285 if(sh2->r[n] > tmp0) in DIV1()
1286 sh2->sr |= Q; in DIV1()
1288 sh2->sr &= ~Q; in DIV1()
1290 if(sh2->r[n] > tmp0) in DIV1()
1291 sh2->sr &= ~Q; in DIV1()
1293 sh2->sr |= Q; in DIV1()
1297 tmp0 = sh2->r[n]; in DIV1()
1298 sh2->r[n] += sh2->r[m]; in DIV1()
1299 if(!(sh2->sr & Q)) in DIV1()
1301 if(sh2->r[n] < tmp0) in DIV1()
1302 sh2->sr &= ~Q; in DIV1()
1304 sh2->sr |= Q; in DIV1()
1308 if(sh2->r[n] < tmp0) in DIV1()
1309 sh2->sr |= Q; in DIV1()
1311 sh2->sr &= ~Q; in DIV1()
1317 if (!(sh2->sr & M)) in DIV1()
1319 tmp0 = sh2->r[n]; in DIV1()
1320 sh2->r[n] += sh2->r[m]; in DIV1()
1321 if(!(sh2->sr & Q)) in DIV1()
1322 if(sh2->r[n] < tmp0) in DIV1()
1323 sh2->sr |= Q; in DIV1()
1325 sh2->sr &= ~Q; in DIV1()
1327 if(sh2->r[n] < tmp0) in DIV1()
1328 sh2->sr &= ~Q; in DIV1()
1330 sh2->sr |= Q; in DIV1()
1334 tmp0 = sh2->r[n]; in DIV1()
1335 sh2->r[n] -= sh2->r[m]; in DIV1()
1336 if(!(sh2->sr & Q)) in DIV1()
1337 if(sh2->r[n] > tmp0) in DIV1()
1338 sh2->sr &= ~Q; in DIV1()
1340 sh2->sr |= Q; in DIV1()
1342 if(sh2->r[n] > tmp0) in DIV1()
1343 sh2->sr |= Q; in DIV1()
1345 sh2->sr &= ~Q; in DIV1()
1349 tmp0 = (sh2->sr & (Q | M)); in DIV1()
1351 sh2->sr |= T; in DIV1()
1353 sh2->sr &= ~T; in DIV1()
1363 tempn = (INT32) sh2->r[n]; in DMULS()
1364 tempm = (INT32) sh2->r[m]; in DMULS()
1369 if ((INT32) (sh2->r[n] ^ sh2->r[m]) < 0) in DMULS()
1400 sh2->mach = Res2; in DMULS()
1401 sh2->macl = Res0; in DMULS()
1402 sh2->sh2_icount--; in DMULS()
1411 RnL = sh2->r[n] & 0x0000ffff; in DMULU()
1412 RnH = (sh2->r[n] >> 16) & 0x0000ffff; in DMULU()
1413 RmL = sh2->r[m] & 0x0000ffff; in DMULU()
1414 RmH = (sh2->r[m] >> 16) & 0x0000ffff; in DMULU()
1428 sh2->mach = Res2; in DMULU()
1429 sh2->macl = Res0; in DMULU()
1430 sh2->sh2_icount--; in DMULU()
1436 sh2->r[n]--; in DT()
1437 if (sh2->r[n] == 0) in DT()
1438 sh2->sr |= T; in DT()
1440 sh2->sr &= ~T; in DT()
1443 UINT32 next_opcode = RW(sh2->ppc & AM); in DT()
1450 while (sh2->r[n] > 1 && sh2->sh2_icount > 4) in DT()
1452 sh2->r[n]--; in DT()
1453 sh2->sh2_icount -= 4; /* cycles for DT (1) and BF taken (3) */ in DT()
1454 sh2->sh2_total_cycles += 4; in DT()
1464 sh2->r[n] = ((INT32)sh2->r[m] << 24) >> 24; in EXTSB()
1470 sh2->r[n] = ((INT32)sh2->r[m] << 16) >> 16; in EXTSW()
1476 sh2->r[n] = sh2->r[m] & 0x000000ff; in EXTUB()
1482 sh2->r[n] = sh2->r[m] & 0x0000ffff; in EXTUW()
1488 sh2->delay = sh2->pc; in JMP()
1489 sh2->pc = sh2->ea = sh2->r[m]; in JMP()
1495 sh2->delay = sh2->pc; in JSR()
1496 sh2->pr = sh2->pc + 2; in JSR()
1497 sh2->pc = sh2->ea = sh2->r[m]; in JSR()
1498 sh2->sh2_icount--; in JSR()
1505 sh2->sr = sh2->r[m] & FLAGS; in LDCSR()
1506 sh2->test_irq = 1; in LDCSR()
1512 sh2->gbr = sh2->r[m]; in LDCGBR()
1518 sh2->vbr = sh2->r[m]; in LDCVBR()
1524 sh2->ea = sh2->r[m]; in LDCMSR()
1525 sh2->sr = RL( sh2->ea ) & FLAGS; in LDCMSR()
1526 sh2->r[m] += 4; in LDCMSR()
1527 sh2->sh2_icount -= 2; in LDCMSR()
1528 sh2->test_irq = 1; in LDCMSR()
1534 sh2->ea = sh2->r[m]; in LDCMGBR()
1535 sh2->gbr = RL( sh2->ea ); in LDCMGBR()
1536 sh2->r[m] += 4; in LDCMGBR()
1537 sh2->sh2_icount -= 2; in LDCMGBR()
1543 sh2->ea = sh2->r[m]; in LDCMVBR()
1544 sh2->vbr = RL( sh2->ea ); in LDCMVBR()
1545 sh2->r[m] += 4; in LDCMVBR()
1546 sh2->sh2_icount -= 2; in LDCMVBR()
1552 sh2->mach = sh2->r[m]; in LDSMACH()
1558 sh2->macl = sh2->r[m]; in LDSMACL()
1564 sh2->pr = sh2->r[m]; in LDSPR()
1570 sh2->ea = sh2->r[m]; in LDSMMACH()
1571 sh2->mach = RL( sh2->ea ); in LDSMMACH()
1572 sh2->r[m] += 4; in LDSMMACH()
1578 sh2->ea = sh2->r[m]; in LDSMMACL()
1579 sh2->macl = RL( sh2->ea ); in LDSMMACL()
1580 sh2->r[m] += 4; in LDSMMACL()
1586 sh2->ea = sh2->r[m]; in LDSMPR()
1587 sh2->pr = RL( sh2->ea ); in LDSMPR()
1588 sh2->r[m] += 4; in LDSMPR()
1598 tempn = (INT32) RL( sh2->r[n] ); in MAC_L()
1599 sh2->r[n] += 4; in MAC_L()
1600 tempm = (INT32) RL( sh2->r[m] ); in MAC_L()
1601 sh2->r[m] += 4; in MAC_L()
1637 if (sh2->sr & S) in MAC_L()
1639 Res0 = sh2->macl + Res0; in MAC_L()
1640 if (sh2->macl > Res0) in MAC_L()
1642 Res2 += (sh2->mach & 0x0000ffff); in MAC_L()
1653 sh2->mach = Res2; in MAC_L()
1654 sh2->macl = Res0; in MAC_L()
1658 Res0 = sh2->macl + Res0; in MAC_L()
1659 if (sh2->macl > Res0) in MAC_L()
1661 Res2 += sh2->mach; in MAC_L()
1662 sh2->mach = Res2; in MAC_L()
1663 sh2->macl = Res0; in MAC_L()
1665 sh2->sh2_icount -= 2; in MAC_L()
1674 tempn = (INT32) RW( sh2->r[n] ); in MAC_W()
1675 sh2->r[n] += 2; in MAC_W()
1676 tempm = (INT32) RW( sh2->r[m] ); in MAC_W()
1677 sh2->r[m] += 2; in MAC_W()
1678 templ = sh2->macl; in MAC_W()
1680 if ((INT32) sh2->macl >= 0) in MAC_W()
1695 sh2->macl += tempm; in MAC_W()
1696 if ((INT32) sh2->macl >= 0) in MAC_W()
1701 if (sh2->sr & S) in MAC_W()
1706 sh2->macl = 0x7fffffff; in MAC_W()
1708 sh2->macl = 0x80000000; in MAC_W()
1713 sh2->mach += tempn; in MAC_W()
1714 if (templ > sh2->macl) in MAC_W()
1715 sh2->mach += 1; in MAC_W()
1717 sh2->sh2_icount -= 2; in MAC_W()
1723 sh2->r[n] = sh2->r[m]; in MOV()
1729 sh2->ea = sh2->r[n]; in MOVBS()
1730 WB( sh2->ea, sh2->r[m] & 0x000000ff); in MOVBS()
1736 sh2->ea = sh2->r[n]; in MOVWS()
1737 WW( sh2->ea, sh2->r[m] & 0x0000ffff); in MOVWS()
1743 sh2->ea = sh2->r[n]; in MOVLS()
1744 WL( sh2->ea, sh2->r[m] ); in MOVLS()
1750 sh2->ea = sh2->r[m]; in MOVBL()
1751 sh2->r[n] = (UINT32)(INT32)(INT16)(INT8) RB( sh2->ea ); in MOVBL()
1757 sh2->ea = sh2->r[m]; in MOVWL()
1758 sh2->r[n] = (UINT32)(INT32)(INT16) RW( sh2->ea ); in MOVWL()
1764 sh2->ea = sh2->r[m]; in MOVLL()
1765 sh2->r[n] = RL( sh2->ea ); in MOVLL()
1772 UINT32 data = sh2->r[m] & 0x000000ff; in MOVBM()
1774 sh2->r[n] -= 1; in MOVBM()
1775 WB( sh2->r[n], data ); in MOVBM()
1781 UINT32 data = sh2->r[m] & 0x0000ffff; in MOVWM()
1783 sh2->r[n] -= 2; in MOVWM()
1784 WW( sh2->r[n], data ); in MOVWM()
1790 UINT32 data = sh2->r[m]; in MOVLM()
1792 sh2->r[n] -= 4; in MOVLM()
1793 WL( sh2->r[n], data ); in MOVLM()
1799 sh2->r[n] = (UINT32)(INT32)(INT16)(INT8) RB( sh2->r[m] ); in MOVBP()
1801 sh2->r[m] += 1; in MOVBP()
1807 sh2->r[n] = (UINT32)(INT32)(INT16) RW( sh2->r[m] ); in MOVWP()
1809 sh2->r[m] += 2; in MOVWP()
1815 sh2->r[n] = RL( sh2->r[m] ); in MOVLP()
1817 sh2->r[m] += 4; in MOVLP()
1823 sh2->ea = sh2->r[n] + sh2->r[0]; in MOVBS0()
1824 WB( sh2->ea, sh2->r[m] & 0x000000ff ); in MOVBS0()
1830 sh2->ea = sh2->r[n] + sh2->r[0]; in MOVWS0()
1831 WW( sh2->ea, sh2->r[m] & 0x0000ffff ); in MOVWS0()
1837 sh2->ea = sh2->r[n] + sh2->r[0]; in MOVLS0()
1838 WL( sh2->ea, sh2->r[m] ); in MOVLS0()
1844 sh2->ea = sh2->r[m] + sh2->r[0]; in MOVBL0()
1845 sh2->r[n] = (UINT32)(INT32)(INT16)(INT8) RB( sh2->ea ); in MOVBL0()
1851 sh2->ea = sh2->r[m] + sh2->r[0]; in MOVWL0()
1852 sh2->r[n] = (UINT32)(INT32)(INT16) RW( sh2->ea ); in MOVWL0()
1858 sh2->ea = sh2->r[m] + sh2->r[0]; in MOVLL0()
1859 sh2->r[n] = RL( sh2->ea ); in MOVLL0()
1865 sh2->r[n] = (UINT32)(INT32)(INT16)(INT8) i; in MOVI()
1872 sh2->ea = sh2->pc + disp * 2 + 2; in MOVWI()
1873 sh2->r[n] = (UINT32)(INT32)(INT16) RW( sh2->ea ); in MOVWI()
1880 sh2->ea = ((sh2->pc + 2) & ~3) + disp * 4; in MOVLI()
1881 sh2->r[n] = RL( sh2->ea ); in MOVLI()
1888 sh2->ea = sh2->gbr + disp; in MOVBLG()
1889 sh2->r[0] = (UINT32)(INT32)(INT16)(INT8) RB( sh2->ea ); in MOVBLG()
1896 sh2->ea = sh2->gbr + disp * 2; in MOVWLG()
1897 sh2->r[0] = (INT32)(INT16) RW( sh2->ea ); in MOVWLG()
1904 sh2->ea = sh2->gbr + disp * 4; in MOVLLG()
1905 sh2->r[0] = RL( sh2->ea ); in MOVLLG()
1912 sh2->ea = sh2->gbr + disp; in MOVBSG()
1913 WB( sh2->ea, sh2->r[0] & 0x000000ff ); in MOVBSG()
1920 sh2->ea = sh2->gbr + disp * 2; in MOVWSG()
1921 WW( sh2->ea, sh2->r[0] & 0x0000ffff ); in MOVWSG()
1928 sh2->ea = sh2->gbr + disp * 4; in MOVLSG()
1929 WL( sh2->ea, sh2->r[0] ); in MOVLSG()
1936 sh2->ea = sh2->r[n] + disp; in MOVBS4()
1937 WB( sh2->ea, sh2->r[0] & 0x000000ff ); in MOVBS4()
1944 sh2->ea = sh2->r[n] + disp * 2; in MOVWS4()
1945 WW( sh2->ea, sh2->r[0] & 0x0000ffff ); in MOVWS4()
1952 sh2->ea = sh2->r[n] + disp * 4; in MOVLS4()
1953 WL( sh2->ea, sh2->r[m] ); in MOVLS4()
1960 sh2->ea = sh2->r[m] + disp; in MOVBL4()
1961 sh2->r[0] = (UINT32)(INT32)(INT16)(INT8) RB( sh2->ea ); in MOVBL4()
1968 sh2->ea = sh2->r[m] + disp * 2; in MOVWL4()
1969 sh2->r[0] = (UINT32)(INT32)(INT16) RW( sh2->ea ); in MOVWL4()
1976 sh2->ea = sh2->r[m] + disp * 4; in MOVLL4()
1977 sh2->r[n] = RL( sh2->ea ); in MOVLL4()
1984 sh2->ea = ((sh2->pc + 2) & ~3) + disp * 4; in MOVA()
1985 sh2->r[0] = sh2->ea; in MOVA()
1991 sh2->r[n] = sh2->sr & T; in MOVT()
1997 sh2->macl = sh2->r[n] * sh2->r[m]; in MULL()
1998 sh2->sh2_icount--; in MULL()
2004 sh2->macl = (INT16) sh2->r[n] * (INT16) sh2->r[m]; in MULS()
2010 sh2->macl = (UINT16) sh2->r[n] * (UINT16) sh2->r[m]; in MULU()
2016 sh2->r[n] = 0 - sh2->r[m]; in NEG()
2024 temp = sh2->r[m]; in NEGC()
2025 sh2->r[n] = -temp - (sh2->sr & T); in NEGC()
2026 if (temp || (sh2->sr & T)) in NEGC()
2027 sh2->sr |= T; in NEGC()
2029 sh2->sr &= ~T; in NEGC()
2040 sh2->r[n] = ~sh2->r[m]; in NOT()
2046 sh2->r[n] |= sh2->r[m]; in OR()
2052 sh2->r[0] |= i; in ORI()
2060 sh2->ea = sh2->gbr + sh2->r[0]; in ORM()
2061 temp = RB( sh2->ea ); in ORM()
2063 WB( sh2->ea, temp ); in ORM()
2064 sh2->sh2_icount -= 2; in ORM()
2072 temp = (sh2->r[n] >> 31) & T; in ROTCL()
2073 sh2->r[n] = (sh2->r[n] << 1) | (sh2->sr & T); in ROTCL()
2074 sh2->sr = (sh2->sr & ~T) | temp; in ROTCL()
2081 temp = (sh2->sr & T) << 31; in ROTCR()
2082 if (sh2->r[n] & T) in ROTCR()
2083 sh2->sr |= T; in ROTCR()
2085 sh2->sr &= ~T; in ROTCR()
2086 sh2->r[n] = (sh2->r[n] >> 1) | temp; in ROTCR()
2092 sh2->sr = (sh2->sr & ~T) | ((sh2->r[n] >> 31) & T); in ROTL()
2093 sh2->r[n] = (sh2->r[n] << 1) | (sh2->r[n] >> 31); in ROTL()
2099 sh2->sr = (sh2->sr & ~T) | (sh2->r[n] & T); in ROTR()
2100 sh2->r[n] = (sh2->r[n] >> 1) | (sh2->r[n] << 31); in ROTR()
2106 sh2->ea = sh2->r[15]; in RTE()
2107 sh2->delay = sh2->pc; in RTE()
2108 sh2->pc = RL( sh2->ea ); in RTE()
2109 sh2->r[15] += 4; in RTE()
2110 sh2->ea = sh2->r[15]; in RTE()
2111 sh2->sr = RL( sh2->ea ) & FLAGS; in RTE()
2112 sh2->r[15] += 4; in RTE()
2113 sh2->sh2_icount -= 3; in RTE()
2114 sh2->test_irq = 1; in RTE()
2120 sh2->delay = sh2->pc; in RTS()
2121 sh2->pc = sh2->ea = sh2->pr; in RTS()
2122 sh2->sh2_icount--; in RTS()
2128 sh2->sr |= T; in SETT()
2134 sh2->sr = (sh2->sr & ~T) | ((sh2->r[n] >> 31) & T); in SHAL()
2135 sh2->r[n] <<= 1; in SHAL()
2141 sh2->sr = (sh2->sr & ~T) | (sh2->r[n] & T); in SHAR()
2142 sh2->r[n] = (UINT32)((INT32)sh2->r[n] >> 1); in SHAR()
2148 sh2->sr = (sh2->sr & ~T) | ((sh2->r[n] >> 31) & T); in SHLL()
2149 sh2->r[n] <<= 1; in SHLL()
2155 sh2->r[n] <<= 2; in SHLL2()
2161 sh2->r[n] <<= 8; in SHLL8()
2167 sh2->r[n] <<= 16; in SHLL16()
2173 sh2->sr = (sh2->sr & ~T) | (sh2->r[n] & T); in SHLR()
2174 sh2->r[n] >>= 1; in SHLR()
2180 sh2->r[n] >>= 2; in SHLR2()
2186 sh2->r[n] >>= 8; in SHLR8()
2192 sh2->r[n] >>= 16; in SHLR16()
2198 sh2->pc -= 2; in SLEEP()
2199 sh2->sh2_icount -= 2; in SLEEP()
2206 sh2->r[n] = sh2->sr; in STCSR()
2212 sh2->r[n] = sh2->gbr; in STCGBR()
2218 sh2->r[n] = sh2->vbr; in STCVBR()
2224 sh2->r[n] -= 4; in STCMSR()
2225 sh2->ea = sh2->r[n]; in STCMSR()
2226 WL( sh2->ea, sh2->sr ); in STCMSR()
2227 sh2->sh2_icount--; in STCMSR()
2233 sh2->r[n] -= 4; in STCMGBR()
2234 sh2->ea = sh2->r[n]; in STCMGBR()
2235 WL( sh2->ea, sh2->gbr ); in STCMGBR()
2236 sh2->sh2_icount--; in STCMGBR()
2242 sh2->r[n] -= 4; in STCMVBR()
2243 sh2->ea = sh2->r[n]; in STCMVBR()
2244 WL( sh2->ea, sh2->vbr ); in STCMVBR()
2245 sh2->sh2_icount--; in STCMVBR()
2251 sh2->r[n] = sh2->mach; in STSMACH()
2257 sh2->r[n] = sh2->macl; in STSMACL()
2263 sh2->r[n] = sh2->pr; in STSPR()
2269 sh2->r[n] -= 4; in STSMMACH()
2270 sh2->ea = sh2->r[n]; in STSMMACH()
2271 WL( sh2->ea, sh2->mach ); in STSMMACH()
2277 sh2->r[n] -= 4; in STSMMACL()
2278 sh2->ea = sh2->r[n]; in STSMMACL()
2279 WL( sh2->ea, sh2->macl ); in STSMMACL()
2285 sh2->r[n] -= 4; in STSMPR()
2286 sh2->ea = sh2->r[n]; in STSMPR()
2287 WL( sh2->ea, sh2->pr ); in STSMPR()
2293 sh2->r[n] -= sh2->r[m]; in SUB()
2301 tmp1 = sh2->r[n] - sh2->r[m]; in SUBC()
2302 tmp0 = sh2->r[n]; in SUBC()
2303 sh2->r[n] = tmp1 - (sh2->sr & T); in SUBC()
2305 sh2->sr |= T; in SUBC()
2307 sh2->sr &= ~T; in SUBC()
2308 if (tmp1 < sh2->r[n]) in SUBC()
2309 sh2->sr |= T; in SUBC()
2317 if ((INT32) sh2->r[n] >= 0) in SUBV()
2321 if ((INT32) sh2->r[m] >= 0) in SUBV()
2326 sh2->r[n] -= sh2->r[m]; in SUBV()
2327 if ((INT32) sh2->r[n] >= 0) in SUBV()
2335 sh2->sr |= T; in SUBV()
2337 sh2->sr &= ~T; in SUBV()
2340 sh2->sr &= ~T; in SUBV()
2348 temp0 = sh2->r[m] & 0xffff0000; in SWAPB()
2349 temp1 = (sh2->r[m] & 0x000000ff) << 8; in SWAPB()
2350 sh2->r[n] = (sh2->r[m] >> 8) & 0x000000ff; in SWAPB()
2351 sh2->r[n] = sh2->r[n] | temp1 | temp0; in SWAPB()
2359 temp = (sh2->r[m] >> 16) & 0x0000ffff; in SWAPW()
2360 sh2->r[n] = (sh2->r[m] << 16) | temp; in SWAPW()
2367 sh2->ea = sh2->r[n]; in TAS()
2369 temp = RB( sh2->ea ); in TAS()
2371 sh2->sr |= T; in TAS()
2373 sh2->sr &= ~T; in TAS()
2376 WB( sh2->ea, temp ); in TAS()
2377 sh2->sh2_icount -= 3; in TAS()
2385 sh2->ea = sh2->vbr + imm * 4; in TRAPA()
2387 sh2->r[15] -= 4; in TRAPA()
2388 WL( sh2->r[15], sh2->sr ); in TRAPA()
2389 sh2->r[15] -= 4; in TRAPA()
2390 WL( sh2->r[15], sh2->pc ); in TRAPA()
2392 sh2->pc = RL( sh2->ea ); in TRAPA()
2393 change_pc(sh2->pc & AM); in TRAPA()
2395 sh2->sh2_icount -= 7; in TRAPA()
2401 if ((sh2->r[n] & sh2->r[m]) == 0) in TST()
2402 sh2->sr |= T; in TST()
2404 sh2->sr &= ~T; in TST()
2412 if ((imm & sh2->r[0]) == 0) in TSTI()
2413 sh2->sr |= T; in TSTI()
2415 sh2->sr &= ~T; in TSTI()
2423 sh2->ea = sh2->gbr + sh2->r[0]; in TSTM()
2424 if ((imm & RB( sh2->ea )) == 0) in TSTM()
2425 sh2->sr |= T; in TSTM()
2427 sh2->sr &= ~T; in TSTM()
2428 sh2->sh2_icount -= 2; in TSTM()
2434 sh2->r[n] ^= sh2->r[m]; in XOR()
2441 sh2->r[0] ^= imm; in XORI()
2450 sh2->ea = sh2->gbr + sh2->r[0]; in XORM()
2451 temp = RB( sh2->ea ); in XORM()
2453 WB( sh2->ea, temp ); in XORM()
2454 sh2->sh2_icount -= 2; in XORM()
2462 temp = (sh2->r[m] << 16) & 0xffff0000; in XTRCT()
2463 sh2->r[n] = (sh2->r[n] >> 16) & 0x0000ffff; in XTRCT()
2464 sh2->r[n] |= temp; in XTRCT()
2792 int divider = div_tab[(sh2->m[5] >> 8) & 3]; in sh2_timer_resync()
2794 UINT64 add = (cur_time - sh2->frc_base) >> divider; in sh2_timer_resync()
2799 sh2->frc += add; in sh2_timer_resync()
2801 sh2->frc_base = cur_time; in sh2_timer_resync()
2811 sh2->timer_active = 0; in sh2_timer_activate()
2814 frc = sh2->frc; in sh2_timer_activate()
2815 if(!(sh2->m[4] & OCFA)) { in sh2_timer_activate()
2816 UINT16 delta = sh2->ocra - frc; in sh2_timer_activate()
2821 if(!(sh2->m[4] & OCFB) && (sh2->ocra <= sh2->ocrb || !(sh2->m[4] & 0x010000))) { in sh2_timer_activate()
2822 UINT16 delta = sh2->ocrb - frc; in sh2_timer_activate()
2827 if(!(sh2->m[4] & OVF) && !(sh2->m[4] & 0x010000)) { in sh2_timer_activate()
2834 int divider = div_tab[(sh2->m[5] >> 8) & 3]; in sh2_timer_activate()
2837 sh2->frc_base = sh2_GetTotalCycles(); in sh2_timer_activate()
2842 sh2->timer_active = 1; in sh2_timer_activate()
2843 sh2->timer_cycles = max_delta; in sh2_timer_activate()
2844 sh2->timer_base = sh2->frc_base; in sh2_timer_activate()
2858 if((sh2->m[4]>>8) & sh2->m[4] & (ICF|OCFA|OCFB|OVF)) in sh2_recalc_irq()
2860 level = (sh2->m[0x18] >> 24) & 15; in sh2_recalc_irq()
2863 int mask = (sh2->m[4]>>8) & sh2->m[4]; in sh2_recalc_irq()
2866 vector = (sh2->m[0x19] >> 8) & 0x7f; in sh2_recalc_irq()
2868 vector = sh2->m[0x19] & 0x7f; in sh2_recalc_irq()
2870 vector = (sh2->m[0x1a] >> 24) & 0x7f; in sh2_recalc_irq()
2875 if((sh2->m[0x63] & 6) == 6) { in sh2_recalc_irq()
2876 level = (sh2->m[0x38] >> 8) & 15; in sh2_recalc_irq()
2879 vector = (sh2->m[0x68] >> 24) & 0x7f; in sh2_recalc_irq()
2883 if((sh2->m[0x67] & 6) == 6) { in sh2_recalc_irq()
2884 level = (sh2->m[0x38] >> 8) & 15; in sh2_recalc_irq()
2887 vector = (sh2->m[0x6a] >> 24) & 0x7f; in sh2_recalc_irq()
2892 sh2->internal_irq_level = irq; in sh2_recalc_irq()
2893 sh2->internal_irq_vector = vector; in sh2_recalc_irq()
2894 sh2->test_irq = 1; in sh2_recalc_irq()
2905 frc = sh2->frc; in sh2_timer_callback()
2907 if(frc == sh2->ocrb) in sh2_timer_callback()
2908 sh2->m[4] |= OCFB; in sh2_timer_callback()
2911 sh2->m[4] |= OVF; in sh2_timer_callback()
2913 if(frc == sh2->ocra) in sh2_timer_callback()
2915 sh2->m[4] |= OCFA; in sh2_timer_callback()
2917 if(sh2->m[4] & 0x010000) in sh2_timer_callback()
2918 sh2->frc = 0; in sh2_timer_callback()
2933 sh2->m[0x63+4*dma] |= 2; in sh2_dmac_callback()
2934 sh2->dma_timer_active[dma] = 0; in sh2_dmac_callback()
2942 if(sh2->m[0x63+4*dma] & sh2->m[0x6c] & 1) in sh2_dmac_check()
2944 if(!sh2->dma_timer_active[dma] && !(sh2->m[0x63+4*dma] & 2)) in sh2_dmac_check()
2948 incd = (sh2->m[0x63+4*dma] >> 14) & 3; in sh2_dmac_check()
2949 incs = (sh2->m[0x63+4*dma] >> 12) & 3; in sh2_dmac_check()
2950 size = (sh2->m[0x63+4*dma] >> 10) & 3; in sh2_dmac_check()
2957 src = sh2->m[0x60+4*dma]; in sh2_dmac_check()
2958 dst = sh2->m[0x61+4*dma]; in sh2_dmac_check()
2959 count = sh2->m[0x62+4*dma]; in sh2_dmac_check()
2966 sh2->dma_timer_active[dma] = 1; in sh2_dmac_check()
2968 sh2->dma_timer_cycles[dma] = 2 * count + 1; in sh2_dmac_check()
2969 sh2->dma_timer_base[dma] = sh2_GetTotalCycles(); in sh2_dmac_check()
3054 if(sh2->dma_timer_active[dma]) in sh2_dmac_check()
3059 sh2->dma_timer_active[dma] = 0; in sh2_dmac_check()
3068 UINT32 old = sh2->m[offset]; in sh2_internal_w()
3069 COMBINE_DATA(sh2->m+offset); in sh2_internal_w()
3081 sh2->m[4] = (sh2->m[4] & ~(ICF|OCFA|OCFB|OVF)) | (old & sh2->m[4] & (ICF|OCFA|OCFB|OVF)); in sh2_internal_w()
3082 COMBINE_DATA(&sh2->frc); in sh2_internal_w()
3090 if(sh2->m[5] & 0x10) in sh2_internal_w()
3091 sh2->ocrb = (sh2->ocrb & (mem_mask >> 16)) | ((data & ~mem_mask) >> 16); in sh2_internal_w()
3093 sh2->ocra = (sh2->ocra & (mem_mask >> 16)) | ((data & ~mem_mask) >> 16); in sh2_internal_w()
3130 INT32 a = sh2->m[0x41]; in sh2_internal_w()
3131 INT32 b = sh2->m[0x40]; in sh2_internal_w()
3135 sh2->m[0x45] = a / b; in sh2_internal_w()
3136 sh2->m[0x44] = a % b; in sh2_internal_w()
3140 sh2->m[0x42] |= 0x00010000; in sh2_internal_w()
3141 sh2->m[0x45] = 0x7fffffff; in sh2_internal_w()
3142 sh2->m[0x44] = 0x7fffffff; in sh2_internal_w()
3148 sh2->m[0x42] = (sh2->m[0x42] & ~0x00001000) | (old & sh2->m[0x42] & 0x00010000); in sh2_internal_w()
3158 INT64 a = sh2->m[0x45] | ((UINT64)(sh2->m[0x44]) << 32); in sh2_internal_w()
3159 INT64 b = (INT32)sh2->m[0x40]; in sh2_internal_w()
3166 sh2->m[0x42] |= 0x00010000; in sh2_internal_w()
3167 sh2->m[0x45] = 0x7fffffff; in sh2_internal_w()
3168 sh2->m[0x44] = 0x7fffffff; in sh2_internal_w()
3173 sh2->m[0x45] = q; in sh2_internal_w()
3174 sh2->m[0x44] = a % b; in sh2_internal_w()
3179 sh2->m[0x42] |= 0x00010000; in sh2_internal_w()
3180 sh2->m[0x45] = 0x7fffffff; in sh2_internal_w()
3181 sh2->m[0x44] = 0x7fffffff; in sh2_internal_w()
3192 sh2->m[0x62] &= 0xffffff; in sh2_internal_w()
3195 sh2->m[0x63] = (sh2->m[0x63] & ~2) | (old & sh2->m[0x63] & 2); in sh2_internal_w()
3202 sh2->m[0x66] &= 0xffffff; in sh2_internal_w()
3205 sh2->m[0x67] = (sh2->m[0x67] & ~2) | (old & sh2->m[0x67] & 2); in sh2_internal_w()
3213 sh2->m[0x6c] = (sh2->m[0x6c] & ~6) | (old & sh2->m[0x6c] & 6); in sh2_internal_w()
3243 return (sh2->m[4] & 0xffff0000) | sh2->frc; in sh2_internal_r()
3245 if(sh2->m[5] & 0x10) in sh2_internal_r()
3246 return (sh2->ocrb << 16) | (sh2->m[5] & 0xffff); in sh2_internal_r()
3248 return (sh2->ocra << 16) | (sh2->m[5] & 0xffff); in sh2_internal_r()
3250 return sh2->icr << 16; in sh2_internal_r()
3254 return (sh2->m[0x38] & 0x7fffffff) | 0x80000000; in sh2_internal_r()
3257 return /*(m_is_slave ? 0x00008000 : 0)*/ 0 | (sh2->m[0x78] & 0x7fff); in sh2_internal_r()
3262 return sh2->m[0x45]; in sh2_internal_r()
3265 return sh2->m[0x44]; in sh2_internal_r()
3267 return sh2->m[offset]; in sh2_internal_r()
3278 sh2->sh2_icount = cycles; in Sh2Run()
3279 sh2->sh2_cycles_to_run = cycles; in Sh2Run()
3280 sh2->end_run = 0; in Sh2Run()
3285 sh2->sh2_total_cycles += cycles; in Sh2Run()
3286 sh2->sh2_icount = 0; in Sh2Run()
3293 if (sh2->delay) { in Sh2Run()
3294 opcode = cpu_readop16(sh2->delay & AM); in Sh2Run()
3295 change_pc(sh2->pc & AM); in Sh2Run()
3296 sh2->delay = 0; in Sh2Run()
3298 opcode = cpu_readop16(sh2->pc & AM); in Sh2Run()
3299 sh2->pc += 2; in Sh2Run()
3302 sh2->ppc = sh2->pc; in Sh2Run()
3325 if(sh2->test_irq && !sh2->delay) in Sh2Run()
3328 sh2->test_irq = 0; in Sh2Run()
3331 sh2->sh2_total_cycles++; in Sh2Run()
3332 sh2->sh2_icount -= sh2->sh2_eat_cycles; in Sh2Run()
3340 if (sh2->dma_timer_active[0]) in Sh2Run()
3341 if ((cy - sh2->dma_timer_base[0]) >= sh2->dma_timer_cycles[0]) in Sh2Run()
3344 if (sh2->dma_timer_active[1]) in Sh2Run()
3345 if ((cy - sh2->dma_timer_base[1]) >= sh2->dma_timer_cycles[1]) in Sh2Run()
3348 if ( sh2->timer_active ) in Sh2Run()
3349 if ((cy - sh2->timer_base) >= sh2->timer_cycles) in Sh2Run()
3354 } while( sh2->sh2_icount > 0 && !sh2->end_run ); in Sh2Run()
3356 cycles = cycles - sh2->sh2_icount; in Sh2Run()
3358 sh2->cycle_counts += cycles; in Sh2Run()
3360 sh2->sh2_cycles_to_run = sh2->sh2_icount = 0; in Sh2Run()
3367 if (sh2->irq_line_state[line] == state) return; in Sh2SetIRQLine_Internal()
3368 sh2->irq_line_state[line] = state; in Sh2SetIRQLine_Internal()
3372 sh2->pending_irq &= ~(1 << line); in Sh2SetIRQLine_Internal()
3375 sh2->pending_irq |= 1 << line; in Sh2SetIRQLine_Internal()
3376 if(sh2->delay) in Sh2SetIRQLine_Internal()
3377 sh2->test_irq = 1; in Sh2SetIRQLine_Internal()
3411 return (sh2->delay) ? (sh2->delay & AM) : (sh2->pc & AM); in Sh2GetPC()
3420 sh2->vbr = i; in Sh2SetVBR()
3438 sh2->end_run = 1; in Sh2StopRun()
3447 return sh2->sh2_total_cycles; in Sh2TotalCycles()
3456 sh2->sh2_total_cycles = 0; in Sh2NewFrame()
3465 sh2->sh2_icount -= cycles; in Sh2BurnCycles()
3466 sh2->sh2_total_cycles += cycles; in Sh2BurnCycles()
3475 sh2->sh2_total_cycles += cycles; in Sh2Idle()
3476 sh2->cycle_counts += cycles; in Sh2Idle()
3520 ba.Data = &Sh2Ext[i].sh2; in Sh2Scan()
3529 change_pc(sh2->pc & AM); // re-load the opbase in Sh2Scan()