X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=sim%2Fmips%2Fm16.igen;h=833d7cae70ed80ca6866ffb971644409b9ee6cfc;hb=d29e330fda06495d12dd9f90d8963a4b9e5bc1bd;hp=af88375c4281ba5841feb5db7ebcb35745583aed;hpb=e98fe4f7b54cbdf29aef9287bbb1bea8801dd05a;p=deliverable%2Fbinutils-gdb.git diff --git a/sim/mips/m16.igen b/sim/mips/m16.igen index af88375c42..833d7cae70 100644 --- a/sim/mips/m16.igen +++ b/sim/mips/m16.igen @@ -26,14 +26,6 @@ :compute:::address_word:IMMEDIATE:IMM_10_4,IMM_14_11,IMM_3_0:(LSINSERTED (IMM_10_4, 10, 4) | LSINSERTED (IMM_14_11, 14, 11) | LSINSERTED (IMM_3_0, 3, 0)) -// FIXME: -// -// Only the `LB' instruction is implemented. It should be used as a guideline -// when implementing other instructions. -// -// How to handle delayslots (for jumps) and extended lwpc instructions -// has not been resolved. - // Load and Store Instructions @@ -41,9 +33,7 @@ 10000,3.RX,3.RY,5.IMMED:RRI:16::LB "lb r, (r)" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { GPR[TRY] = EXTEND8 (do_load (SD_, AccessLength_BYTE, GPR[TRX], IMMED)); } @@ -51,9 +41,7 @@ 11110,6.IMM_10_5,5.IMM_15_11 + 10000,3.RX,3.RY,5.IMM_4_0:EXT-RRI:16::LB "lb r, (r)" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { GPR[TRY] = EXTEND8 (do_load (SD_, AccessLength_BYTE, GPR[TRX], EXTEND16 (IMMEDIATE))); } @@ -63,9 +51,7 @@ 10100,3.RX,3.RY,5.IMMED:RRI:16::LBU "lbu r, (r)" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { GPR[TRY] = do_load (SD_, AccessLength_BYTE, GPR[TRX], IMMED); } @@ -73,9 +59,7 @@ 11110,6.IMM_10_5,5.IMM_15_11 + 10100,3.RX,3.RY,5.IMM_4_0:EXT-RRI:16::LBU "lbu r, (r)" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { GPR[TRY] = do_load (SD_, AccessLength_BYTE, GPR[TRX], EXTEND16 (IMMEDIATE)); } @@ -85,9 +69,7 @@ 10001,3.RX,3.RY,5.IMMED:RRI:16::LH "lh r, (r)" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { GPR[TRY] = EXTEND16 (do_load (SD_, AccessLength_HALFWORD, GPR[TRX], IMMED << 1)); } @@ -95,9 +77,7 @@ 11110,6.IMM_10_5,5.IMM_15_11 + 10001,3.RX,3.RY,5.IMM_4_0:EXT-RRI:16::LH "lh r, (r)" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { GPR[TRY] = EXTEND16 (do_load (SD_, AccessLength_HALFWORD, GPR[TRX], EXTEND16 (IMMEDIATE))); } @@ -107,9 +87,7 @@ 10101,3.RX,3.RY,5.IMMED:RRI:16::LHU "lhu r, (r)" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { GPR[TRY] = do_load (SD_, AccessLength_HALFWORD, GPR[TRX], IMMED << 1); } @@ -117,9 +95,7 @@ 11110,6.IMM_10_5,5.IMM_15_11 + 10101,3.RX,3.RY,5.IMM_4_0:EXT-RRI:16::LHU "lhu r, (r)" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { GPR[TRY] = do_load (SD_, AccessLength_HALFWORD, GPR[TRX], EXTEND16 (IMMEDIATE)); } @@ -129,9 +105,7 @@ 10011,3.RX,3.RY,5.IMMED:RRI:16::LW "lw r, (r)" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { GPR[TRY] = EXTEND32 (do_load (SD_, AccessLength_WORD, GPR[TRX], IMMED << 2)); } @@ -139,9 +113,7 @@ 11110,6.IMM_10_5,5.IMM_15_11 + 10011,3.RX,3.RY,5.IMM_4_0:EXT-RRI:16::LW "lw r, (r)" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { GPR[TRY] = EXTEND32 (do_load (SD_, AccessLength_WORD, GPR[TRX], EXTEND16 (IMMEDIATE))); } @@ -151,9 +123,7 @@ 10110,3.RX,8.IMMED:RI:16::LWPC "lw r, (PC)" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { GPR[TRX] = EXTEND32 (do_load (SD_, AccessLength_WORD, basepc (SD_) & ~3, IMMED << 2)); @@ -162,9 +132,7 @@ 11110,6.IMM_10_5,5.IMM_15_11 + 10110,3.RX,000,5.IMM_4_0:EXT-RI:16::LWPC "lw r, (PC)" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { GPR[TRX] = EXTEND32 (do_load (SD_, AccessLength_WORD, basepc (SD_) & ~3, EXTEND16 (IMMEDIATE))); } @@ -174,9 +142,7 @@ 10010,3.RX,8.IMMED:RI:16::LWSP "lw r, (SP)" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { GPR[TRX] = EXTEND32 (do_load (SD_, AccessLength_WORD, SP, IMMED << 2)); } @@ -184,9 +150,7 @@ 11110,6.IMM_10_5,5.IMM_15_11 + 10010,3.RX,000,5.IMM_4_0:EXT-RI:16::LWSP "lw r, (SP)" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { GPR[TRX] = EXTEND32 (do_load (SD_, AccessLength_WORD, SP, EXTEND16 (IMMEDIATE))); } @@ -196,9 +160,7 @@ 10111,3.RX,3.RY,5.IMMED:RRI:16::LWU "lwu r, (r)" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { GPR[TRY] = do_load (SD_, AccessLength_WORD, GPR[TRX], IMMED << 2); } @@ -206,31 +168,25 @@ 11110,6.IMM_10_5,5.IMM_15_11 + 10111,3.RX,3.RY,5.IMM_4_0:EXT-RRI:16::LWU "lwu r, (r)" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { GPR[TRY] = do_load (SD_, AccessLength_WORD, GPR[TRX], EXTEND16 (IMMEDIATE)); } -00111,3.RX,3.RY,5.IMMED:RRI:16,64::LD +00111,3.RX,3.RY,5.IMMED:RRI:16::LD "ld r, (r)" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { GPR[TRY] = do_load (SD_, AccessLength_DOUBLEWORD, GPR[TRX], IMMED << 3); } -11110,6.IMM_10_5,5.IMM_15_11 + 00111,3.RX,3.RY,5.IMM_4_0:EXT-RRI:16,64::LD -"ld r, (r)" +11110,6.IMM_10_5,5.IMM_15_11 + 00111,3.RX,3.RY,5.IMM_4_0:EXT-RRI:16::LD +"ld r, (r)" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { GPR[TRY] = do_load (SD_, AccessLength_DOUBLEWORD, GPR[TRX], EXTEND16 (IMMEDIATE)); } @@ -240,9 +196,7 @@ 11111,100,3.RY,5.IMMED:RI64:16::LDPC "ld r, (PC)" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { GPR[TRY] = do_load (SD_, AccessLength_DOUBLEWORD, basepc (SD_) & ~7, IMMED << 3); @@ -251,9 +205,7 @@ 11110,6.IMM_10_5,5.IMM_15_11 + 11111,100,3.RY,5.IMM_4_0:EXT-RI64:16::LDPC "ld r, (PC)" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { GPR[TRY] = do_load (SD_, AccessLength_DOUBLEWORD, basepc (SD_) & ~7, EXTEND16 (IMMEDIATE)); } @@ -263,9 +215,7 @@ 11111,000,3.RY,5.IMMED:RI64:16::LDSP "ld r, (SP)" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { GPR[TRY] = do_load (SD_, AccessLength_DOUBLEWORD, SP, IMMED << 3); } @@ -273,9 +223,7 @@ 11110,6.IMM_10_5,5.IMM_15_11 + 11111,000,3.RY,5.IMM_4_0:EXT-RI64:16::LDSP "ld r, (SP)" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { GPR[TRY] = do_load (SD_, AccessLength_DOUBLEWORD, SP, EXTEND16 (IMMEDIATE)); } @@ -285,9 +233,7 @@ 11000,3.RX,3.RY,5.IMMED:RRI:16::SB "sb r, (r)" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_store (SD_, AccessLength_BYTE, GPR[TRX], IMMED, GPR[TRY]); } @@ -295,9 +241,7 @@ 11110,6.IMM_10_5,5.IMM_15_11 + 11000,3.RX,3.RY,5.IMM_4_0:EXT-RRI:16::SB "sb r, (r)" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_store (SD_, AccessLength_BYTE, GPR[TRX], EXTEND16 (IMMEDIATE), GPR[TRY]); } @@ -307,9 +251,7 @@ 11001,3.RX,3.RY,5.IMMED:RRI:16::SH "sh r, (r)" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_store (SD_, AccessLength_HALFWORD, GPR[TRX], IMMED << 1, GPR[TRY]); } @@ -317,9 +259,7 @@ 11110,6.IMM_10_5,5.IMM_15_11 + 11001,3.RX,3.RY,5.IMM_4_0:EXT-RRI:16::SH "sh r, (r)" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_store (SD_, AccessLength_HALFWORD, GPR[TRX], EXTEND16 (IMMEDIATE), GPR[TRY]); } @@ -329,9 +269,7 @@ 11011,3.RX,3.RY,5.IMMED:RRI:16::SW "sw r, (r)" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_store (SD_, AccessLength_WORD, GPR[TRX], IMMED << 2, GPR[TRY]); } @@ -339,9 +277,7 @@ 11110,6.IMM_10_5,5.IMM_15_11 + 11011,3.RX,3.RY,5.IMM_4_0:EXT-RRI:16::SW "sw r, (r)" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_store (SD_, AccessLength_WORD, GPR[TRX], EXTEND16 (IMMEDIATE), GPR[TRY]); } @@ -351,9 +287,7 @@ 11010,3.RX,8.IMMED:RI:16::SWSP "sw r, (SP)" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_store (SD_, AccessLength_WORD, SP, IMMED << 2, GPR[TRX]); } @@ -361,9 +295,7 @@ 11110,6.IMM_10_5,5.IMM_15_11 + 11010,3.RX,000,5.IMM_4_0:EXT-RI:16::SWSP "sw r, (SP)" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_store (SD_, AccessLength_WORD, SP, EXTEND16 (IMMEDIATE), GPR[TRX]); } @@ -373,9 +305,7 @@ 01100,010,8.IMMED:I8:16::SWRASP "sw r, (SP)" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_store (SD_, AccessLength_WORD, SP, IMMED << 2, RA); } @@ -383,9 +313,7 @@ 11110,6.IMM_10_5,5.IMM_15_11 + 01100,010,000,5.IMM_4_0:EXT-I8:16::SWRASP "sw r, (SP)" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_store (SD_, AccessLength_WORD, SP, EXTEND16 (IMMEDIATE), RA); } @@ -395,9 +323,7 @@ 01111,3.RX,3.RY,5.IMMED:RRI:16::SD "sd r, (r)" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_store (SD_, AccessLength_DOUBLEWORD, GPR[TRX], IMMED << 3, GPR[TRY]); } @@ -405,9 +331,7 @@ 11110,6.IMM_10_5,5.IMM_15_11 + 01111,3.RX,3.RY,5.IMM_4_0:EXT-RRI:16::SD "sd r, (r)" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_store (SD_, AccessLength_DOUBLEWORD, GPR[TRX], EXTEND16 (IMMEDIATE), GPR[TRY]); } @@ -417,9 +341,7 @@ 11111,001,3.RY,5.IMMED:RI64:16::SDSP "sd r, (SP)" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_store (SD_, AccessLength_DOUBLEWORD, SP, IMMED << 3, GPR[TRY]); } @@ -427,9 +349,7 @@ 11110,6.IMM_10_5,5.IMM_15_11 + 11111,001,3.RY,5.IMM_4_0:EXT-RI64:16::SDSP "sd r, (SP)" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_store (SD_, AccessLength_DOUBLEWORD, SP, EXTEND16 (IMMEDIATE), GPR[TRY]); } @@ -439,9 +359,7 @@ 11111,010,8.IMMED:I64:16::SDRASP "sd r, (SP)" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_store (SD_, AccessLength_DOUBLEWORD, SP, IMMED << 3, RA); } @@ -449,9 +367,7 @@ 11110,6.IMM_10_5,5.IMM_15_11 + 11111,010,000,5.IMM_4_0:EXT-I64:16::SDRASP "sd r, (SP)" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_store (SD_, AccessLength_DOUBLEWORD, SP, EXTEND16 (IMMEDIATE), RA); } @@ -464,9 +380,7 @@ 01101,3.RX,8.IMMED:RI:16::LI "li r, " *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_ori (SD_, 0, TRX, IMMED); } @@ -474,9 +388,7 @@ 11110,6.IMM_10_5,5.IMM_15_11 + 01101,3.RX,000,5.IMM_4_0:EXT-RI:16::LI "li r, " *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_ori (SD_, 0, TRX, IMMEDIATE); } @@ -486,9 +398,7 @@ 01000,3.RX,3.RY,0,4.IMMED:RRI-A:16::ADDIU "addiu r, r, " *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_addiu (SD_, TRX, TRY, EXTEND4 (IMMED)); } @@ -496,9 +406,7 @@ 11110,7.IMM_10_4,4.IMM_14_11 + 01000,3.RX,3.RY,0,4.IMM_3_0:EXT-RRI-A:16::ADDIU "addiu r, r, " *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_addiu (SD_, TRX, TRY, EXTEND15 (IMMEDIATE)); } @@ -508,9 +416,7 @@ 01001,3.RX,8.IMMED:RI:16::ADDIU8 "addiu r, " *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_addiu (SD_, TRX, TRX, EXTEND8 (IMMED)); } @@ -518,9 +424,7 @@ 11110,6.IMM_10_5,5.IMM_15_11 + 01001,3.RX,000,5.IMM_4_0:EXT-RI:16::ADDIU8 "addiu r, " *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_addiu (SD_, TRX, TRX, EXTEND16 (IMMEDIATE)); } @@ -530,9 +434,7 @@ 01100,011,8.IMMED:I8:16::ADJSP "addiu SP, " *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_addiu (SD_, SPIDX, SPIDX, EXTEND8 (IMMED) << 3); } @@ -540,9 +442,7 @@ 11110,6.IMM_10_5,5.IMM_15_11 + 01100,011,000,5.IMM_4_0:EXT-I8:16::ADJSP "addiu SP, " *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_addiu (SD_, SPIDX, SPIDX, EXTEND16 (IMMEDIATE)); } @@ -552,20 +452,16 @@ 00001,3.RX,8.IMMED:RI:16::ADDIUPC "addiu r, PC, " *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { - unsigned32 temp = (basepc (SD_) & ~3) + (EXTEND8 (IMMED) << 2); + unsigned32 temp = (basepc (SD_) & ~3) + (IMMED << 2); GPR[TRX] = EXTEND32 (temp); } 11110,6.IMM_10_5,5.IMM_15_11 + 00001,3.RX,000,5.IMM_4_0:EXT-RI:16::ADDIUPC "addiu r, PC, " *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { unsigned32 temp = (basepc (SD_) & ~3) + EXTEND16 (IMMEDIATE); GPR[TRX] = EXTEND32 (temp); @@ -576,131 +472,107 @@ 00000,3.RX,8.IMMED:RI:16::ADDIUSP "addiu r, SP, " *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { - do_addiu (SD_, SPIDX, TRX, EXTEND8 (IMMED) << 2); + do_addiu (SD_, SPIDX, TRX, IMMED << 2); } 11110,6.IMM_10_5,5.IMM_15_11 + 00000,3.RX,000,5.IMM_4_0:EXT-RI:16::ADDIUSP "addiu r, SP, " *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_addiu (SD_, SPIDX, TRX, EXTEND16 (IMMEDIATE)); } -01000,3.RX,3.RY,1,4.IMMED:RRI-A:16,64::DADDIU +01000,3.RX,3.RY,1,4.IMMED:RRI-A:16::DADDIU "daddiu r, r, " *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_daddiu (SD_, TRX, TRY, EXTEND4 (IMMED)); } -11110,7.IMM_10_4,4.IMM_14_11 + 01000,3.RX,3.RY,1,4.IMM_3_0:EXT-RRI-A:16,64::DADDIU -"daddiu r, r, " +11110,7.IMM_10_4,4.IMM_14_11 + 01000,3.RX,3.RY,1,4.IMM_3_0:EXT-RRI-A:16::DADDIU +"daddiu r, r, " *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_daddiu (SD_, TRX, TRY, EXTEND15 (IMMEDIATE)); } -11111,101,3.RY,5.IMMED:RI64:16,64::DADDIU5 +11111,101,3.RY,5.IMMED:RI64:16::DADDIU5 "daddiu r, " *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_daddiu (SD_, TRY, TRY, EXTEND5 (IMMED)); } -11110,6.IMM_10_5,5.IMM_15_11 + 11111,101,3.RY,5.IMM_4_0:EXT-RI64:16,64::DADDIU5 -"daddiu r, " +11110,6.IMM_10_5,5.IMM_15_11 + 11111,101,3.RY,5.IMM_4_0:EXT-RI64:16::DADDIU5 +"daddiu r, " *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { - do_daddiu (SD_, TRY, TRY, EXTEND5 (IMMEDIATE)); + do_daddiu (SD_, TRY, TRY, EXTEND16 (IMMEDIATE)); } -11111,011,8.IMMED:I64:16,64::DADJSP +11111,011,8.IMMED:I64:16::DADJSP "daddiu SP, " *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_daddiu (SD_, SPIDX, SPIDX, EXTEND8 (IMMED) << 3); } -11110,6.IMM_10_5,5.IMM_15_11 + 11111,011,000,5.IMM_4_0:EXT-I64:16,64::DADJSP -"daddiu SP, " +11110,6.IMM_10_5,5.IMM_15_11 + 11111,011,000,5.IMM_4_0:EXT-I64:16::DADJSP +"daddiu SP, " *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_daddiu (SD_, SPIDX, SPIDX, EXTEND16 (IMMEDIATE)); } -11111,110,3.RY,5.IMMED:RI64:16,64::DADDIUPC +11111,110,3.RY,5.IMMED:RI64:16::DADDIUPC "daddiu r, PC, " *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { - GPR[TRY] = (basepc (SD_) & ~3) + (EXTEND5 (IMMED) << 2); + GPR[TRY] = (basepc (SD_) & ~3) + (IMMED << 2); } -11110,6.IMM_10_5,5.IMM_15_11 + 11111,110,3.RY,5.IMM_4_0:EXT-RI64:16,64::DADDIUPC -"daddiu r, PC, " +11110,6.IMM_10_5,5.IMM_15_11 + 11111,110,3.RY,5.IMM_4_0:EXT-RI64:16::DADDIUPC +"daddiu r, PC, " *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { - GPR[TRY] = (basepc (SD_) & ~3) + EXTEND5 (IMMED); + GPR[TRY] = (basepc (SD_) & ~3) + EXTEND16 (IMMEDIATE); } -11111,111,3.RY,5.IMMED:RI64:16,64::DADDIUSP +11111,111,3.RY,5.IMMED:RI64:16::DADDIUSP "daddiu r, SP, " *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { - do_daddiu (SD_, SPIDX, TRY, EXTEND5 (IMMED) << 2); + do_daddiu (SD_, SPIDX, TRY, IMMED << 2); } -11110,6.IMM_10_5,5.IMM_15_11 + 11111,111,3.RY,5.IMM_4_0:EXT-RI64:16,64::DADDIUSP -"daddiu r, SP, " +11110,6.IMM_10_5,5.IMM_15_11 + 11111,111,3.RY,5.IMM_4_0:EXT-RI64:16::DADDIUSP +"daddiu r, SP, " *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { - do_daddiu (SD_, SPIDX, TRY, EXTEND5 (IMMED)); + do_daddiu (SD_, SPIDX, TRY, EXTEND16 (IMMEDIATE)); } @@ -708,9 +580,7 @@ 01010,3.RX,8.IMMED:RI:16::SLTI "slti r, " *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_slti (SD_, TRX, T8IDX, IMMED); } @@ -718,9 +588,7 @@ 11110,6.IMM_10_5,5.IMM_15_11 + 01010,3.RX,000,5.IMM_4_0:EXT-RI:16::SLTI "slti r, " *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_slti (SD_, TRX, T8IDX, IMMEDIATE); } @@ -730,9 +598,7 @@ 01011,3.RX,8.IMMED:RI:16::SLTIU "sltiu r, " *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_sltiu (SD_, TRX, T8IDX, IMMED); } @@ -740,9 +606,7 @@ 11110,6.IMM_10_5,5.IMM_15_11 + 01011,3.RX,000,5.IMM_4_0:EXT-RI:16::SLTIU "sltiu r, " *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_sltiu (SD_, TRX, T8IDX, IMMEDIATE); } @@ -752,9 +616,7 @@ 11101,3.RX,3.RY,01010:RR:16::CMP "sltiu r, r" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_xor (SD_, TRX, TRY, T8IDX); } @@ -763,9 +625,7 @@ 01110,3.RX,8.IMMED:RI:16::CMPI "sltiu r, " *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_xori (SD_, TRX, T8IDX, IMMED); } @@ -773,9 +633,7 @@ 11110,6.IMM_10_5,5.IMM_15_11 + 01110,3.RX,000,5.IMM_4_0:EXT-RI:16::CMPI "sltiu r, " *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_xori (SD_, TRX, T8IDX, IMMEDIATE); } @@ -789,9 +647,7 @@ 11100,3.RX,3.RY,3.RZ,01:RRR:16::ADDU "addu r, r, r" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_addu (SD_, TRX, TRY, TRZ); } @@ -801,33 +657,25 @@ 11100,3.RX,3.RY,3.RZ,11:RRR:16::SUBU "subu r, r, r" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_subu (SD_, TRX, TRY, TRZ); } - - -11100,3.RX,3.RY,3.RZ,00:RRR:16,64::DADDU +11100,3.RX,3.RY,3.RZ,00:RRR:16::DADDU "daddu r, r, r" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_daddu (SD_, TRX, TRY, TRZ); } -11100,3.RX,3.RY,3.RZ,10:RRR:16,64::DSUBU +11100,3.RX,3.RY,3.RZ,10:RRR:16::DSUBU "dsubu r, r, r" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_dsubu (SD_, TRX, TRY, TRZ); } @@ -837,9 +685,7 @@ 11101,3.RX,3.RY,00010:RR:16::SLT "slt r, r" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_slt (SD_, TRX, TRY, T8IDX); } @@ -849,9 +695,7 @@ 11101,3.RX,3.RY,00011:RR:16::SLTU "sltu r, r" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_sltu (SD_, TRX, TRY, T8IDX); } @@ -861,9 +705,7 @@ 11101,3.RX,3.RY,01011:RR:16::NEG "neg r, r" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_subu (SD_, 0, TRY, TRX); } @@ -873,9 +715,7 @@ 11101,3.RX,3.RY,01100:RR:16::AND "and r, r" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_and (SD_, TRX, TRY, TRX); } @@ -885,9 +725,7 @@ 11101,3.RX,3.RY,01101:RR:16::OR "or r, r" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_or (SD_, TRX, TRY, TRX); } @@ -897,9 +735,7 @@ 11101,3.RX,3.RY,01110:RR:16::XOR "xor r, r" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_xor (SD_, TRX, TRY, TRX); } @@ -909,9 +745,7 @@ 11101,3.RX,3.RY,01111:RR:16::NOT "not r, r" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_nor (SD_, 0, TRY, TRX); } @@ -921,9 +755,7 @@ 01100,111,3.RY,5.R32:I8_MOVR32:16::MOVR32 "move r, r" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_or (SD_, R32, 0, TRY); } @@ -933,9 +765,7 @@ 01100,101,3.R32L,2.R32H,3.RZ:I8_MOV32R:16::MOV32R "move r, r" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_or (SD_, TRZ, 0, R32); } @@ -945,9 +775,7 @@ 00110,3.RX,3.RY,3.SHAMT,00:SHIFT:16::SLL "sll r, r, " *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_sll (SD_, TRY, TRX, SHIFT); } @@ -955,9 +783,7 @@ 11110,5.SHAMT,0,00000 + 00110,3.RX,3.RY,000,00:EXT-SHIFT:16::SLL "sll r, r, " *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_sll (SD_, TRY, TRX, SHAMT); } @@ -967,9 +793,7 @@ 00110,3.RX,3.RY,3.SHAMT,10:SHIFT:16::SRL "srl r, r, " *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_srl (SD_, TRY, TRX, SHIFT); } @@ -977,9 +801,7 @@ 11110,5.SHAMT,0,00000 + 00110,3.RX,3.RY,000,10:EXT-SHIFT:16::SRL "srl r, r, " *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_srl (SD_, TRY, TRX, SHAMT); } @@ -989,9 +811,7 @@ 00110,3.RX,3.RY,3.SHAMT,11:SHIFT:16::SRA "sra r, r, " *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_sra (SD_, TRY, TRX, SHIFT); } @@ -999,9 +819,7 @@ 11110,5.SHAMT,0,00000 + 00110,3.RX,3.RY,000,11:EXT-SHIFT:16::SRA "sra r, r, " *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_sra (SD_, TRY, TRX, SHAMT); } @@ -1011,9 +829,7 @@ 11101,3.RX,3.RY,00100:RR:16::SLLV "sllv r, r" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_sllv (SD_, TRX, TRY, TRY); } @@ -1022,9 +838,7 @@ 11101,3.RX,3.RY,00110:RR:16::SRLV "srlv r, r" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_srlv (SD_, TRX, TRY, TRY); } @@ -1033,108 +847,88 @@ 11101,3.RX,3.RY,00111:RR:16::SRAV "srav r, r" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_srav (SD_, TRX, TRY, TRY); } -00110,3.RX,3.RY,3.SHAMT,01:SHIFT:16,64::DSLL +00110,3.RX,3.RY,3.SHAMT,01:SHIFT:16::DSLL "dsll r, r, " *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { - do_dsll (SD_, 0, TRY, TRX, SHIFT); + do_dsll (SD_, TRY, TRX, SHIFT); } -11110,5.SHAMT_4_0,1.S5,00000 + 00110,3.RX,3.RY,000,01:EXT-SHIFT:16,64::DSLL +11110,5.SHAMT_4_0,1.S5,00000 + 00110,3.RX,3.RY,000,01:EXT-SHIFT:16::DSLL "dsll r, r, " *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { - do_dsll (SD_, 0, TRY, TRX, SHAMT); + do_dsll (SD_, TRY, TRX, SHAMT); } -11101,3.SHAMT,3.RY,01000:SHIFT64:16,64::DSRL +11101,3.SHAMT,3.RY,01000:SHIFT64:16::DSRL "dsrl r, " *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { - do_dsrl (SD_, 0, TRY, TRY, SHIFT); + do_dsrl (SD_, TRY, TRY, SHIFT); } -11110,5.SHAMT_4_0,1.S5,00000 + 11101,000,3.RY,01000:EXT-SHIFT64:16,64::DSRL -"dsrl r, " +11110,5.SHAMT_4_0,1.S5,00000 + 11101,000,3.RY,01000:EXT-SHIFT64:16::DSRL +"dsrl r, " *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { - do_dsrl (SD_, 0, TRY, TRY, SHIFT); + do_dsrl (SD_, TRY, TRY, SHAMT); } -11101,3.SHAMT,3.RY,10011:SHIFT64:16,64::DSRA +11101,3.SHAMT,3.RY,10011:SHIFT64:16::DSRA "dsra r, " *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { - do_dsra (SD_, 0, TRY, TRY, SHIFT); + do_dsra (SD_, TRY, TRY, SHIFT); } -11110,5.SHAMT_4_0,1.S5,00000 + 11101,000,3.RY,10011:EXT-SHIFT64:16,64::DSRA -"dsra r, " +11110,5.SHAMT_4_0,1.S5,00000 + 11101,000,3.RY,10011:EXT-SHIFT64:16::DSRA +"dsra r, " *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { - do_dsra (SD_, 0, TRY, TRY, SHIFT); + do_dsra (SD_, TRY, TRY, SHAMT); } -11101,3.RX,3.RY,10100:RR:16,64::DSLLV -"dsra r, r" +11101,3.RX,3.RY,10100:RR:16::DSLLV +"dsllv r, r" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_dsllv (SD_, TRX, TRY, TRY); } -11101,3.RX,3.RY,10110:RR:16,64::DSRLV +11101,3.RX,3.RY,10110:RR:16::DSRLV "dsrlv r, r" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_dsrlv (SD_, TRX, TRY, TRY); } -11101,3.RX,3.RY,10111:RR:16,64::DSRAV +11101,3.RX,3.RY,10111:RR:16::DSRAV "dsrav r, r" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_dsrav (SD_, TRX, TRY, TRY); } @@ -1146,9 +940,7 @@ 11101,3.RX,3.RY,11000:RR:16::MULT "mult r, r" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_mult (SD_, TRX, TRY, 0); } @@ -1157,9 +949,7 @@ 11101,3.RX,3.RY,11001:RR:16::MULTU "multu r, r" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_multu (SD_, TRX, TRY, 0); } @@ -1168,9 +958,7 @@ 11101,3.RX,3.RY,11010:RR:16::DIV "div r, r" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_div (SD_, TRX, TRY); } @@ -1179,9 +967,7 @@ 11101,3.RX,3.RY,11011:RR:16::DIVU "divu r, r" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_divu (SD_, TRX, TRY); } @@ -1190,9 +976,7 @@ 11101,3.RX,000,10000:RR:16::MFHI "mfhi r" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_mfhi (SD_, TRX); } @@ -1201,53 +985,43 @@ 11101,3.RX,000,10010:RR:16::MFLO "mflo r" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_mflo (SD_, TRX); } -11101,3.RX,3.RY,11100:RR:16,64::DMULT +11101,3.RX,3.RY,11100:RR:16::DMULT "dmult r, r" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { - do_dmult (SD_, TRX, TRY); + do_dmult (SD_, TRX, TRY, 0); } -11101,3.RX,3.RY,11101:RR:16,64::DMULTU +11101,3.RX,3.RY,11101:RR:16::DMULTU "dmultu r, r" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { - do_dmultu (SD_, TRX, TRY); + do_dmultu (SD_, TRX, TRY, 0); } -11101,3.RX,3.RY,11110:RR:16,64::DDIV +11101,3.RX,3.RY,11110:RR:16::DDIV "ddiv r, r" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_ddiv (SD_, TRX, TRY); } -11101,3.RX,3.RY,11111:RR:16,64::DDIVU +11101,3.RX,3.RY,11111:RR:16::DDIVU "ddivu r, r" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { do_ddivu (SD_, TRX, TRY); } @@ -1288,9 +1062,7 @@ 00011,0,5.IMM_20_16,5.IMM_25_21 + 16.IMMED_15_0:JAL:16::JAL "jal " *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { address_word region = (NIA & MASK (63, 28)); RA = NIA + 2; /* skip 16 bit delayslot insn */ @@ -1303,10 +1075,8 @@ 011101,26.IMMED:JALX:32::JALX32 "jalx " -*r3900: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*mips16: +*vr4100: { address_word region = (NIA & MASK (63, 28)); RA = NIA + 4; /* skip 32 bit delayslot insn */ @@ -1316,9 +1086,7 @@ 00011,1,5.IMM_20_16,5.IMM_25_21 + 16.IMMED_15_0:JALX:16::JALX16 "jalx " *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { address_word region = (NIA & MASK (63, 28)); RA = NIA + 2; /* 16 bit INSN */ @@ -1330,9 +1098,7 @@ 11101,3.RX,000,00000:RR:16::JR "jr r" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { NIA = delayslot16 (SD_, NIA, GPR[TRX]); } @@ -1341,9 +1107,7 @@ 11101,000,001,00000:RR:16::JRRA "jrra" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { NIA = delayslot16 (SD_, NIA, RA); } @@ -1353,9 +1117,7 @@ 11101,3.RX,010,00000:RR:16::JALR "jalr r" *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { RA = NIA + 2; NIA = delayslot16 (SD_, NIA, GPR[TRX]); @@ -1366,23 +1128,19 @@ 00100,3.RX,8.IMMED:RI:16::BEQZ "beqz r, " *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { - if (GPR[RX] == 0) + if (GPR[TRX] == 0) NIA = (NIA + (EXTEND8 (IMMED) << 1)); } 11110,6.IMM_10_5,5.IMM_15_11 + 00100,3.RX,000,5.IMM_4_0:EXT-RI:16::BEQZ "beqz r, " *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { - if (GPR[RX] == 0) - NIA = (NIA + EXTEND16 (IMMEDIATE)); + if (GPR[TRX] == 0) + NIA = (NIA + (EXTEND16 (IMMEDIATE) << 1)); } @@ -1390,23 +1148,19 @@ 00101,3.RX,8.IMMED:RI:16::BNEZ "bnez r, " *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { - if (GPR[RX] != 0) + if (GPR[TRX] != 0) NIA = (NIA + (EXTEND8 (IMMED) << 1)); } 11110,6.IMM_10_5,5.IMM_15_11 + 00101,3.RX,000,5.IMM_4_0:EXT-RI:16::BNEZ "bnez r, " *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { - if (GPR[RX] != 0) - NIA = (NIA + EXTEND16 (IMMEDIATE)); + if (GPR[TRX] != 0) + NIA = (NIA + (EXTEND16 (IMMEDIATE) << 1)); } @@ -1414,9 +1168,7 @@ 01100,000,8.IMMED:I8:16::BTEQZ "bteqz " *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { if (T8 == 0) NIA = (NIA + (EXTEND8 (IMMED) << 1)); @@ -1425,12 +1177,10 @@ 11110,6.IMM_10_5,5.IMM_15_11 + 01100,000,000,5.IMM_4_0:EXT-I8:16::BTEQZ "bteqz " *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { if (T8 == 0) - NIA = (NIA + EXTEND16 (IMMEDIATE)); + NIA = (NIA + (EXTEND16 (IMMEDIATE) << 1)); } @@ -1438,9 +1188,7 @@ 01100,001,8.IMMED:I8:16::BTNEZ "btnez " *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { if (T8 != 0) NIA = (NIA + (EXTEND8 (IMMED) << 1)); @@ -1449,12 +1197,10 @@ 11110,6.IMM_10_5,5.IMM_15_11 + 01100,001,000,5.IMM_4_0:EXT-I8:16::BTNEZ "btnez " *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { if (T8 != 0) - NIA = (NIA + EXTEND16 (IMMEDIATE)); + NIA = (NIA + (EXTEND16 (IMMEDIATE) << 1)); } @@ -1462,39 +1208,29 @@ 00010,11.IMMED:I:16::B "b " *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { - NIA = (NIA + (EXTEND8 (IMMED) << 1)); + NIA = (NIA + (EXTEND11 (IMMED) << 1)); } 11110,6.IMM_10_5,5.IMM_15_11 + 00010,6.0,5.IMM_4_0:EXT-I:16::B "b " *mips16: -// start-sanitize-tx19 -*tx19: -// end-sanitize-tx19 +*vr4100: { - NIA = (NIA + EXTEND16 (IMMEDIATE)); + NIA = (NIA + (EXTEND16 (IMMEDIATE) << 1)); } -// Special Instructions - - -// See the front of the mips16 doc -// -> FIXME need this for most instructions -//// 11110,eeeeeeeeeee:I:16::EXTEND -//// *mips16: -//// // start-sanitize-tx19 -//// *tx19: -//// // end-sanitize-tx19 - - -// 11101,3.RX,3.RY,00101:RR:16::BREAK -// *mips16: -// // start-sanitize-tx19 -// *tx19: -// // end-sanitize-tx19 +11101,3.RX,3.RY,00101:RR:16::BREAK +"break" +*mips16: +*vr4100: +{ + if (STATE & simDELAYSLOT) + PC = cia - 2; /* reference the branch instruction */ + else + PC = cia; + SignalException (BreakPoint, instruction_0); +}