|
|
1.1 root 1: //
2: // nono
3: // Copyright (C) 2020 nono project
4: // Licensed under nono-license.txt
5: //
6:
7: #include "m88100disasm.h"
1.1.1.2 ! root 8: #include "config.h"
1.1 root 9: #include "mystring.h"
10:
1.1.1.2 ! root 11: #define O(inst, expstd) { __LINE__, inst, expstd }
! 12: #define T(inst, expstd, expalt) { __LINE__, inst, expstd, expalt }
! 13: #define M(b, d, s1, s2) ((b) | ((d)<<21) | ((s1)<<16) | (s2))
! 14:
1.1 root 15: struct {
1.1.1.2 ! root 16: int line;
1.1 root 17: uint32 inst;
1.1.1.2 ! root 18: std::string expstd;
! 19: std::string expalt;
1.1 root 20: } table[] = {
1.1.1.2 ! root 21: T(0x02328765, "xmem.bu r17,r18,#0x8765", "{xmem.bu r17,(r18,#0x8765)}"),
! 22: T(0x06328765, "xmem r17,r18,#0x8765", "{xmem r17,(r18,#0x8765)}"),
! 23: T(0x06320000, "xmem r17,r18,#0x0000", "{xmem r17,(r18)}"),
! 24: T(0x06200001, "xmem r17,r0, #0x0001", "{xmem r17,(r0,#0x0001)}"),
! 25: T(0x0a328765, "ld.hu r17,r18,#0x8765", "{ld.hu r17,(r18,#0x8765)}"),
! 26: T(0x0e328765, "ld.bu r17,r18,#0x8765", "{ld.bu r17,(r18,#0x8765)}"),
! 27: T(0x12328765, "ld.d r17,r18,#0x8765", "{ld.d r17,(r18,#0x8765)}"),
! 28: T(0x16328765, "ld r17,r18,#0x8765", "{ld r17,(r18,#0x8765)}"),
! 29: T(0x1a328765, "ld.h r17,r18,#0x8765", "{ld.h r17,(r18,#0x8765)}"),
! 30: T(0x1e328765, "ld.b r17,r18,#0x8765", "{ld.b r17,(r18,#0x8765)}"),
! 31: T(0x22328765, "st.d r17,r18,#0x8765", "{st.d r17,(r18,#0x8765)}"),
! 32: T(0x26328765, "st r17,r18,#0x8765", "{st r17,(r18,#0x8765)}"),
! 33: T(0x2a328765, "st.h r17,r18,#0x8765", "{st.h r17,(r18,#0x8765)}"),
! 34: T(0x2e328765, "st.b r17,r18,#0x8765", "{st.b r17,(r18,#0x8765)}"),
! 35: T(0x32328765, "lda.d r17,r18,#0x8765", "{lda.d r17,r18,#0x8765}"),
! 36: T(0x36328765, "lda r17,r18,#0x8765", "{lda r17,r18,#0x8765}"),
! 37: T(0x3a328765, "lda.h r17,r18,#0x8765", "{lda.h r17,r18,#0x8765}"),
! 38: T(0x3e328765, "lda.b r17,r18,#0x8765", "{lda.b r17,r18,#0x8765}"),
! 39: T(0x36320000, "lda r17,r18,#0x0000", "{lda r17,r18}"),
! 40: T(0x36200001, "lda r17,r0, #0x0001", "{lda r17,r0,#0x0001}"),
! 41:
! 42: T(0x40128765, "and r0, r18,#0x8765", "{nop}"),
! 43: T(0x42208765, "and r17,r0, #0x8765", "{clr r17}"),
! 44: T(0x42318765, "and r17,r17,#0x8765", "{and r17,#0xffff8765}"),
! 45: T(0x42328765, "and r17,r18,#0x8765", "{and r17,r18,#0xffff8765}"),
! 46: T(0x44128765, "and.u r0, r18,#0x8765", "{nop}"),
! 47: T(0x46208765, "and.u r17,r0, #0x8765", "{clr r17}"),
! 48: T(0x46318765, "and.u r17,r17,#0x8765", "{and r17,#0x8765ffff}"),
! 49: T(0x46328765, "and.u r17,r18,#0x8765", "{and r17,r18,#0x8765ffff}"),
! 50: T(0x48128765, "mask r0, r18,#0x8765", "{nop}"),
! 51: T(0x4a208765, "mask r17,r0, #0x8765", "{clr r17}"),
! 52: T(0x4a318765, "mask r17,r17,#0x8765", "{and r17,#0x00008765}"),
! 53: T(0x4a328765, "mask r17,r18,#0x8765", "{and r17,r18,#0x00008765}"),
! 54: T(0x4c128765, "mask.u r0, r18,#0x8765", "{nop}"),
! 55: T(0x4e208765, "mask.u r17,r0, #0x8765", "{clr r17}"),
! 56: T(0x4e318765, "mask.u r17,r17,#0x8765", "{and r17,#0x87650000}"),
! 57: T(0x4e328765, "mask.u r17,r18,#0x8765", "{and r17,r18,#0x87650000}"),
! 58:
! 59: T(0x50128765, "xor r0, r18,#0x8765", "{nop}"),
! 60: T(0x52208765, "xor r17,r0, #0x8765", "{mov r17,#0x8765}"),
! 61: T(0x52318765, "xor r17,r17,#0x8765", "{xor r17,#0x8765}"),
! 62: T(0x52328765, "xor r17,r18,#0x8765", "{xor r17,r18,#0x8765}"),
! 63: T(0x54128765, "xor.u r0, r18,#0x8765", "{nop}"),
! 64: T(0x56208765, "xor.u r17,r0, #0x8765", "{mov r17,#0x87650000}"),
! 65: T(0x56318765, "xor.u r17,r17,#0x8765", "{xor r17,#0x87650000}"),
! 66: T(0x56328765, "xor.u r17,r18,#0x8765", "{xor r17,r18,#0x87650000}"),
! 67: T(0x58128765, "or r0, r18,#0x8765", "{nop}"),
! 68: T(0x5a208765, "or r17,r0, #0x8765", "{mov r17,#0x8765}"),
! 69: T(0x5a318765, "or r17,r17,#0x8765", "{or r17,#0x8765}"),
! 70: T(0x5a328765, "or r17,r18,#0x8765", "{or r17,r18,#0x8765}"),
! 71: T(0x5c128765, "or.u r0, r18,#0x8765", "{nop}"),
! 72: T(0x5e208765, "or.u r17,r0, #0x8765", "{mov r17,#0x87650000}"),
! 73: T(0x5e318765, "or.u r17,r17,#0x8765", "{or r17,#0x87650000}"),
! 74: T(0x5e328765, "or.u r17,r18,#0x8765", "{or r17,r18,#0x87650000}"),
! 75:
! 76: T(0x60128765, "addu r0, r18,#0x8765", "{nop}"),
! 77: T(0x62208765, "addu r17,r0, #0x8765", "{mov r17,#0x00008765}"),
! 78: T(0x62318765, "addu r17,r17,#0x8765", "{addu r17,#0x00008765}"),
! 79: T(0x62328765, "addu r17,r18,#0x8765", "{addu r17,r18,#0x00008765}"),
! 80: T(0x64128765, "subu r0, r18,#0x8765", "{nop}"),
! 81: T(0x66208765, "subu r17,r0, #0x8765", "{mov r17,#0xffff789b}"),
! 82: T(0x66318765, "subu r17,r17,#0x8765", "{subu r17,#0x00008765}"),
! 83: T(0x66328765, "subu r17,r18,#0x8765", "{subu r17,r18,#0x00008765}"),
! 84: T(0x68128765, "divu r0, r18,#0x8765", "{divu r0, r18,#0x00008765}"),
! 85: T(0x6a208765, "divu r17,r0, #0x8765", "{divu r17,r0, #0x00008765}"),
! 86: T(0x6a318765, "divu r17,r17,#0x8765", "{divu r17,#0x00008765}"),
! 87: T(0x6a328765, "divu r17,r18,#0x8765", "{divu r17,r18,#0x00008765}"),
! 88: T(0x6c128765, "mul r0, r18,#0x8765", "{mul r0, r18,#0x00008765}"),
! 89: T(0x6e208765, "mul r17,r0, #0x8765", "{mul r17,r0, #0x00008765}"),
! 90: T(0x6e318765, "mul r17,r17,#0x8765", "{mul r17,#0x00008765}"),
! 91: T(0x6e328765, "mul r17,r18,#0x8765", "{mul r17,r18,#0x00008765}"),
! 92:
! 93: T(0x70128765, "add r0, r18,#0x8765", "{adds r0, r18,#0x00008765}"),
! 94: T(0x72208765, "add r17,r0, #0x8765", "{adds r17,r0, #0x00008765}"),
! 95: T(0x72318765, "add r17,r17,#0x8765", "{adds r17,#0x00008765}"),
! 96: T(0x72328765, "add r17,r18,#0x8765", "{adds r17,r18,#0x00008765}"),
! 97: T(0x74128765, "sub r0, r18,#0x8765", "{subs r0, r18,#0x00008765}"),
! 98: T(0x76208765, "sub r17,r0, #0x8765", "{subs r17,r0, #0x00008765}"),
! 99: T(0x76318765, "sub r17,r17,#0x8765", "{subs r17,#0x00008765}"),
! 100: T(0x76328765, "sub r17,r18,#0x8765", "{subs r17,r18,#0x00008765}"),
! 101: T(0x78128765, "div r0, r18,#0x8765", "{div r0, r18,#0x00008765}"),
! 102: T(0x7a208765, "div r17,r0, #0x8765", "{div r17,r0, #0x00008765}"),
! 103: T(0x7a318765, "div r17,r17,#0x8765", "{div r17,#0x00008765}"),
! 104: T(0x7a328765, "div r17,r18,#0x8765", "{div r17,r18,#0x00008765}"),
! 105: T(0x7c128765, "cmp r0, r18,#0x8765", "{nop}"),
! 106: T(0x7e208765, "cmp r17,r0, #0x8765", "{cmp r17,r0, #0x00008765}"),
! 107: T(0x7e318765, "cmp r17,r17,#0x8765", "{cmp r17,r17,#0x00008765}"),
! 108: T(0x7e328765, "cmp r17,r18,#0x8765", "{cmp r17,r18,#0x00008765}"),
! 109:
! 110: O(0x82204260, "ldcr r17,sr2"),
! 111: O(0x82204fe0, "fldcr r17,fpcr"),
! 112: O(0x80118271, "stcr r17,sr2"),
! 113: O(0x80118ff1, "fstcr r17,fpcr"),
! 114: O(0x8232c272, "xcr r17,r18,sr2"),
! 115: O(0x8232cff2, "fxcr r17,r18,fpcr"),
! 116:
! 117: O(0x86320001, "fmul.sss r17,r18,r1"),
! 118: O(0x86202001, "flt.ss r17,r1"),
! 119: O(0x86322801, "fadd.sss r17,r18,r1"),
! 120: O(0x86323001, "fsub.sss r17,r18,r1"),
! 121: O(0x86323801, "fcmp.sss r17,r18,r1"),
! 122: O(0x86204801, "int.ss r17,r1"),
! 123: O(0x86205001, "nint.ss r17,r1"),
! 124: O(0x86205801, "trnc.ss r17,r1"),
! 125: O(0x86327001, "fdiv.sss r17,r18,r1"),
1.1 root 126: // fmul のサイズ
1.1.1.2 ! root 127: O(0x86320021, "fmul.dss r17,r18,r1"),
! 128: O(0x86320081, "fmul.ssd r17,r18,r1"),
! 129: O(0x863200a1, "fmul.dsd r17,r18,r1"),
! 130: O(0x86320201, "fmul.sds r17,r18,r1"),
! 131: O(0x86320221, "fmul.dds r17,r18,r1"),
! 132: O(0x86320281, "fmul.sdd r17,r18,r1"),
! 133: O(0x863202a1, "fmul.ddd r17,r18,r1"),
! 134:
! 135: O(0xc3ffffff, "br 0x000000fc"),
! 136: O(0xc7ffffff, "br.n 0x000000fc"),
! 137: O(0xcbffffff, "bsr 0x000000fc"),
! 138: O(0xcfffffff, "bsr.n 0x000000fc"),
! 139: O(0xd232ffff, "bb0 #17,r18,0x000000fc"),
! 140: O(0xd632ffff, "bb0.n #17,r18,0x000000fc"),
! 141: O(0xda32ffff, "bb1 #17,r18,0x000000fc"),
! 142: O(0xde32ffff, "bb1.n #17,r18,0x000000fc"),
! 143: O(0xe852ffff, "bcnd eq0,r18,0x000000fc"),
! 144: O(0xec52ffff, "bcnd.n eq0,r18,0x000000fc"),
1.1 root 145: // bcnd の M5
1.1.1.2 ! root 146: O(0xe9b2ffff, "bcnd ne0,r18,0x000000fc"),
! 147: O(0xe832ffff, "bcnd gt0,r18,0x000000fc"),
! 148: O(0xe992ffff, "bcnd lt0,r18,0x000000fc"),
! 149: O(0xe872ffff, "bcnd ge0,r18,0x000000fc"),
! 150: O(0xe9d2ffff, "bcnd le0,r18,0x000000fc"),
! 151:
! 152: T(0xf2328034, "clr r17,r18,1<20>", "{bitclr r17,r18,#20}"),
! 153: T(0xf2328274, "clr r17,r18,19<20>", "{bfclr r17,r18,19<20>}"),
! 154: T(0xf2328834, "set r17,r18,1<20>", "{bitset r17,r18,#20}"),
! 155: T(0xf2328a74, "set r17,r18,19<20>", "{bfset r17,r18,19<20>}"),
! 156:
! 157: T(0xf0129274, "ext r0, r18,19<20>", "{nop}"),
! 158: T(0xf2209274, "ext r17,r0, 19<20>", "{clr r17}"),
! 159: T(0xf2319014, "ext r17,r17,32<20>", "{asr r17,#20}"),
! 160: T(0xf2329014, "ext r17,r18,32<20>", "{asr r17,r18,#20}"),
! 161: T(0xf2319194, "ext r17,r17,12<20>", "{asr r17,#20}"),
! 162: T(0xf2319174, "ext r17,r17,11<20>", "{bfexts r17,11<20>}"),
! 163: T(0xf2329194, "ext r17,r18,12<20>", "{asr r17,r18,#20}"),
! 164: T(0xf2329174, "ext r17,r18,11<20>", "{bfexts r17,r18,11<20>}"),
! 165: T(0xf0129a74, "extu r0, r18,19<20>", "{nop}"),
! 166: T(0xf2209a74, "extu r17,r0, 19<20>", "{clr r17}"),
! 167: T(0xf2319814, "extu r17,r17,32<20>", "{lsr r17,#20}"),
! 168: T(0xf2329814, "extu r17,r18,32<20>", "{lsr r17,r18,#20}"),
! 169: T(0xf2319994, "extu r17,r17,12<20>", "{lsr r17,#20}"),
! 170: T(0xf2319974, "extu r17,r17,11<20>", "{bfextu r17,11<20>}"),
! 171: T(0xf2329994, "extu r17,r18,12<20>", "{lsr r17,r18,#20}"),
! 172: T(0xf2329974, "extu r17,r18,11<20>", "{bfextu r17,r18,11<20>}"),
! 173:
! 174: T(0xf012a274, "mak r0, r18,19<20>", "{nop}"),
! 175: T(0xf220a274, "mak r17,r0, 19<20>", "{clr r17}"),
! 176: T(0xf231a014, "mak r17,r17,32<20>", "{lsl r17,#20}"),
! 177: T(0xf232a014, "mak r17,r18,32<20>", "{lsl r17,r18,#20}"),
! 178: T(0xf231a194, "mak r17,r17,12<20>", "{lsl r17,#20}"),
! 179: T(0xf231a174, "mak r17,r17,11<20>", "{bfmak r17,11<20>}"),
! 180: T(0xf232a194, "mak r17,r18,12<20>", "{lsl r17,r18,#20}"),
! 181: T(0xf232a174, "mak r17,r18,11<20>", "{bfmak r17,r18,11<20>}"),
! 182: T(0xf012a814, "rot r0, r18,<20>", "{nop}"),
! 183: T(0xf231a800, "rot r17,r17,<0>", "{nop}"),
! 184: T(0xf220a814, "rot r17,r0, <20>", "{clr r17}"),
! 185: T(0xf231a810, "rot r17,r17,<16>", "{ror r17,#16}"),
! 186: T(0xf232a810, "rot r17,r18,<16>", "{ror r17,r18,#16}"),
! 187: T(0xf231a814, "rot r17,r17,<20>", "{rol r17,#12}"),
! 188: T(0xf232a814, "rot r17,r18,<20>", "{rol r17,r18,#12}"),
! 189:
! 190: O(0xf232d101, "tb0 #17,r18,#0x101"),
! 191: O(0xf232d901, "tb1 #17,r18,#0x101"),
! 192: T(0xf220d87f, "tb1 #17,r0, #0x07f", "{ssync}"),
! 193: T(0xf220d880, "tb1 #17,r0, #0x080", "{usync}"),
! 194: O(0xf052e901, "tcnd eq0,r18,#0x101"),
! 195:
! 196: T(0xf6320001, "xmem.bu r17,r18,r1", "{xmem.bu r17,(r18,r1)}"),
! 197: T(0xf6320401, "xmem r17,r18,r1", "{xmem r17,(r18,r1)}"),
! 198: T(0xf6320801, "ld.hu r17,r18,r1", "{ld.hu r17,(r18,r1)}"),
! 199: T(0xf6320c01, "ld.bu r17,r18,r1", "{ld.bu r17,(r18,r1)}"),
! 200: T(0xf6321001, "ld.d r17,r18,r1", "{ld.d r17,(r18,r1)}"),
! 201: T(0xf6321401, "ld r17,r18,r1", "{ld r17,(r18,r1)}"),
! 202: T(0xf6321801, "ld.h r17,r18,r1", "{ld.h r17,(r18,r1)}"),
! 203: T(0xf6321c01, "ld.b r17,r18,r1", "{ld.b r17,(r18,r1)}"),
! 204: T(0xf6322001, "st.d r17,r18,r1", "{st.d r17,(r18,r1)}"),
! 205: T(0xf6322401, "st r17,r18,r1", "{st r17,(r18,r1)}"),
! 206: T(0xf6322801, "st.h r17,r18,r1", "{st.h r17,(r18,r1)}"),
! 207: T(0xf6322c01, "st.b r17,r18,r1", "{st.b r17,(r18,r1)}"),
1.1 root 208: // 全種について全引数パターンはつらいので ld だけで引数を変える
1.1.1.2 ! root 209: T(0xf6321000, "ld.d r17,r18,r0", "{ld.d r17,(r18)}"),
! 210: T(0xf6321200, "ld.d r17,r18[r0]", "{ld.d r17,(r18)}"),
! 211: T(0xf6201001, "ld.d r17,r0, r1", "{ld.d r17,(r1)}"),
! 212: T(0xf6321001, "ld.d r17,r18,r1", "{ld.d r17,(r18,r1)}"),
! 213: T(0xf6201201, "ld.d r17,r0[r1]", "{ld.d r17,(r0[r1])}"),
! 214: T(0xf6321201, "ld.d r17,r18[r1]", "{ld.d r17,(r18[r1])}"),
1.1 root 215: // .usr も一部代表だけ
1.1.1.2 ! root 216: T(0xf6321101, "ld.d.usr r17,r18,r1", "{ldusr.d r17,(r18,r1)}"),
! 217: T(0xf6321401, "ld r17,r18,r1", "{ld r17,(r18,r1)}"),
! 218: T(0xf6321501, "ld.usr r17,r18,r1", "{ldusr r17,(r18,r1)}"),
1.1 root 219: // lda
1.1.1.2 ! root 220: T(0xf6323001, "lda.d r17,r18,r1", "{lda.d r17,r18,r1}"),
! 221: T(0xf6323401, "lda r17,r18,r1", "{lda r17,r18,r1}"),
! 222: T(0xf6323801, "lda.h r17,r18,r1", "{lda.h r17,r18,r1}"),
! 223: T(0xf6323c01, "lda.b r17,r18,r1", "{lda.b r17,r18,r1}"),
! 224:
! 225: // ここから3項になってパターンが増えるので r17, r18 ではなく r1, r2 を使う
! 226: #define A(d, s1, s2) M(0xf400'4000, d, s1, s2)
! 227: T(A(0, 0, 0), "and r0, r0, r0", "{nop}"),
! 228: T(A(0, 0, 1), "and r0, r0, r1", "{nop}"),
! 229: T(A(0, 1, 0), "and r0, r1, r0", "{nop}"),
! 230: T(A(0, 1, 1), "and r0, r1, r1", "{nop}"),
! 231: T(A(0, 1, 2), "and r0, r1, r2", "{nop}"),
! 232: T(A(0, 2, 1), "and r0, r2, r1", "{nop}"),
! 233: T(A(1, 0, 0), "and r1, r0, r0", "{clr r1}"),
! 234: T(A(1, 0, 1), "and r1, r0, r1", "{clr r1}"),
! 235: T(A(1, 0, 2), "and r1, r0, r2", "{clr r1}"),
! 236: T(A(1, 1, 0), "and r1, r1, r0", "{clr r1}"),
! 237: T(A(1, 1, 1), "and r1, r1, r1", "{nop}"),
! 238: T(A(1, 1, 2), "and r1, r1, r2", "{and r1, r2}"),
! 239: T(A(1, 2, 0), "and r1, r2, r0", "{clr r1}"),
! 240: T(A(1, 2, 1), "and r1, r2, r1", "{and r1, r2}"),
! 241: T(A(1, 2, 2), "and r1, r2, r2", "{mov r1, r2}"),
! 242: T(A(1, 2, 3), "and r1, r2, r3", "{and r1, r2, r3}"),
! 243: #undef A
! 244:
! 245: #define A(d, s1, s2) M(0xf400'4400, d, s1, s2)
! 246: T(A(0, 0, 0), "and.c r0, r0, r0", "{nop}"),
! 247: T(A(0, 0, 1), "and.c r0, r0, r1", "{nop}"),
! 248: T(A(0, 1, 0), "and.c r0, r1, r0", "{nop}"),
! 249: T(A(0, 1, 1), "and.c r0, r1, r1", "{nop}"),
! 250: T(A(0, 1, 2), "and.c r0, r1, r2", "{nop}"),
! 251: T(A(0, 2, 1), "and.c r0, r2, r1", "{nop}"),
! 252: T(A(1, 0, 0), "and.c r1, r0, r0", "{clr r1}"),
! 253: T(A(1, 0, 1), "and.c r1, r0, r1", "{clr r1}"),
! 254: T(A(1, 0, 2), "and.c r1, r0, r2", "{clr r1}"),
! 255: T(A(1, 1, 0), "and.c r1, r1, r0", "{nop}"),
! 256: T(A(1, 1, 1), "and.c r1, r1, r1", "{clr r1}"),
! 257: T(A(1, 1, 2), "and.c r1, r1, r2", "{and r1, ~r2}"),
! 258: T(A(1, 2, 0), "and.c r1, r2, r0", "{mov r1, r2}"),
! 259: T(A(1, 2, 1), "and.c r1, r2, r1", "{and r1, r2, ~r1}"),
! 260: T(A(1, 2, 2), "and.c r1, r2, r2", "{clr r1}"),
! 261: T(A(1, 2, 3), "and.c r1, r2, r3", "{and r1, r2, ~r3}"),
! 262: #undef A
! 263:
! 264: #define A(d, s1, s2) M(0xf400'5000, d, s1, s2)
! 265: T(A(0, 0, 0), "xor r0, r0, r0", "{nop}"),
! 266: T(A(0, 0, 1), "xor r0, r0, r1", "{nop}"),
! 267: T(A(0, 1, 0), "xor r0, r1, r0", "{nop}"),
! 268: T(A(0, 1, 1), "xor r0, r1, r1", "{nop}"),
! 269: T(A(0, 1, 2), "xor r0, r1, r2", "{nop}"),
! 270: T(A(0, 2, 1), "xor r0, r2, r1", "{nop}"),
! 271: T(A(1, 0, 0), "xor r1, r0, r0", "{clr r1}"),
! 272: T(A(1, 0, 1), "xor r1, r0, r1", "{nop}"),
! 273: T(A(1, 0, 2), "xor r1, r0, r2", "{mov r1, r2}"),
! 274: T(A(1, 1, 0), "xor r1, r1, r0", "{nop}"),
! 275: T(A(1, 1, 1), "xor r1, r1, r1", "{clr r1}"),
! 276: T(A(1, 1, 2), "xor r1, r1, r2", "{xor r1, r2}"),
! 277: T(A(1, 2, 0), "xor r1, r2, r0", "{mov r1, r2}"),
! 278: T(A(1, 2, 1), "xor r1, r2, r1", "{xor r1, r2}"),
! 279: T(A(1, 2, 2), "xor r1, r2, r2", "{clr r1}"),
! 280: T(A(1, 2, 3), "xor r1, r2, r3", "{xor r1, r2, r3}"),
! 281: #undef A
! 282:
! 283: // 独自ニーモニック側の XOR rD,rS1,~rS2 はもうちょっと演算したい
! 284: #define A(d, s1, s2) M(0xf400'5400, d, s1, s2)
! 285: T(A(0, 0, 0), "xor.c r0, r0, r0", "{nop}"),
! 286: T(A(0, 0, 1), "xor.c r0, r0, r1", "{nop}"),
! 287: T(A(0, 1, 0), "xor.c r0, r1, r0", "{nop}"),
! 288: T(A(0, 1, 1), "xor.c r0, r1, r1", "{nop}"),
! 289: T(A(0, 1, 2), "xor.c r0, r1, r2", "{nop}"),
! 290: T(A(0, 2, 1), "xor.c r0, r2, r1", "{nop}"),
! 291: T(A(1, 0, 0), "xor.c r1, r0, r0", "{mov r1, #0xffffffff}"),
! 292: T(A(1, 0, 1), "xor.c r1, r0, r1", "{not r1}"),
! 293: T(A(1, 0, 2), "xor.c r1, r0, r2", "{not r1, r2}"),
! 294: T(A(1, 1, 0), "xor.c r1, r1, r0", "{not r1}"),
! 295: T(A(1, 1, 1), "xor.c r1, r1, r1", "{mov r1, #0xffffffff}"),
! 296: T(A(1, 1, 2), "xor.c r1, r1, r2", "{xor r1, ~r2}"),
! 297: T(A(1, 2, 0), "xor.c r1, r2, r0", "{not r1, r2}"),
! 298: T(A(1, 2, 1), "xor.c r1, r2, r1", "{xor r1, r2, ~r1}"),
! 299: T(A(1, 2, 2), "xor.c r1, r2, r2", "{mov r1, #0xffffffff}"),
! 300: T(A(1, 2, 3), "xor.c r1, r2, r3", "{xor r1, r2, ~r3}"),
! 301: #undef A
! 302:
! 303: #define A(d, s1, s2) M(0xf400'5800, d, s1, s2)
! 304: T(A(0, 0, 0), "or r0, r0, r0", "{nop}"),
! 305: T(A(0, 0, 1), "or r0, r0, r1", "{nop}"),
! 306: T(A(0, 1, 0), "or r0, r1, r0", "{nop}"),
! 307: T(A(0, 1, 1), "or r0, r1, r1", "{nop}"),
! 308: T(A(0, 1, 2), "or r0, r1, r2", "{nop}"),
! 309: T(A(0, 2, 1), "or r0, r2, r1", "{nop}"),
! 310: T(A(1, 0, 0), "or r1, r0, r0", "{clr r1}"),
! 311: T(A(1, 0, 1), "or r1, r0, r1", "{nop}"),
! 312: T(A(1, 0, 2), "or r1, r0, r2", "{mov r1, r2}"),
! 313: T(A(1, 1, 0), "or r1, r1, r0", "{nop}"),
! 314: T(A(1, 1, 1), "or r1, r1, r1", "{nop}"),
! 315: T(A(1, 1, 2), "or r1, r1, r2", "{or r1, r2}"),
! 316: T(A(1, 2, 0), "or r1, r2, r0", "{mov r1, r2}"),
! 317: T(A(1, 2, 1), "or r1, r2, r1", "{or r1, r2}"),
! 318: T(A(1, 2, 2), "or r1, r2, r2", "{mov r1, r2}"),
! 319: T(A(1, 2, 3), "or r1, r2, r3", "{or r1, r2, r3}"),
! 320: #undef A
! 321:
! 322: #define A(d, s1, s2) M(0xf400'5c00, d, s1, s2)
! 323: T(A(0, 0, 0), "or.c r0, r0, r0", "{nop}"),
! 324: T(A(0, 0, 1), "or.c r0, r0, r1", "{nop}"),
! 325: T(A(0, 1, 0), "or.c r0, r1, r0", "{nop}"),
! 326: T(A(0, 1, 1), "or.c r0, r1, r1", "{nop}"),
! 327: T(A(0, 1, 2), "or.c r0, r1, r2", "{nop}"),
! 328: T(A(0, 2, 1), "or.c r0, r2, r1", "{nop}"),
! 329: T(A(1, 0, 0), "or.c r1, r0, r0", "{mov r1, #0xffffffff}"),
! 330: T(A(1, 0, 1), "or.c r1, r0, r1", "{not r1}"),
! 331: T(A(1, 0, 2), "or.c r1, r0, r2", "{not r1, r2}"),
! 332: T(A(1, 1, 0), "or.c r1, r1, r0", "{mov r1, #0xffffffff}"),
! 333: T(A(1, 1, 1), "or.c r1, r1, r1", "{mov r1, #0xffffffff}"),
! 334: T(A(1, 1, 2), "or.c r1, r1, r2", "{or r1, ~r2}"),
! 335: T(A(1, 2, 0), "or.c r1, r2, r0", "{mov r1, #0xffffffff}"),
! 336: T(A(1, 2, 1), "or.c r1, r2, r1", "{or r1, r2, ~r1}"),
! 337: T(A(1, 2, 2), "or.c r1, r2, r2", "{mov r1, #0xffffffff}"),
! 338: T(A(1, 2, 3), "or.c r1, r2, r3", "{or r1, r2, ~r3}"),
! 339: #undef A
! 340:
! 341: #define A(d, s1, s2) M(0xf400'6000, d, s1, s2)
! 342: T(A(0, 0, 0), "addu r0, r0, r0", "{nop}"),
! 343: T(A(0, 0, 1), "addu r0, r0, r1", "{nop}"),
! 344: T(A(0, 1, 0), "addu r0, r1, r0", "{nop}"),
! 345: T(A(0, 1, 1), "addu r0, r1, r1", "{nop}"),
! 346: T(A(0, 1, 2), "addu r0, r1, r2", "{nop}"),
! 347: T(A(0, 2, 1), "addu r0, r2, r1", "{nop}"),
! 348: T(A(1, 0, 0), "addu r1, r0, r0", "{clr r1}"),
! 349: T(A(1, 0, 1), "addu r1, r0, r1", "{nop}"),
! 350: T(A(1, 0, 2), "addu r1, r0, r2", "{mov r1, r2}"),
! 351: T(A(1, 1, 0), "addu r1, r1, r0", "{nop}"),
! 352: T(A(1, 1, 1), "addu r1, r1, r1", "{addu r1, r1}"),
! 353: T(A(1, 1, 2), "addu r1, r1, r2", "{addu r1, r2}"),
! 354: T(A(1, 2, 0), "addu r1, r2, r0", "{mov r1, r2}"),
! 355: T(A(1, 2, 1), "addu r1, r2, r1", "{addu r1, r2}"),
! 356: T(A(1, 2, 2), "addu r1, r2, r2", "{addu r1, r2, r2}"),
! 357: T(A(1, 2, 3), "addu r1, r2, r3", "{addu r1, r2, r3}"),
! 358: #undef A
! 359:
! 360: // Carry In/Out を含むやつは 2オペランドへの省略のみ (.coだけ代表でテスト)
! 361: #define A(d, s1, s2) M(0xf400'6100, d, s1, s2)
! 362: T(A(0, 0, 0), "addu.co r0, r0, r0", "{addu.co r0, r0}"),
! 363: T(A(0, 0, 1), "addu.co r0, r0, r1", "{addu.co r0, r1}"),
! 364: T(A(0, 1, 0), "addu.co r0, r1, r0", "{addu.co r0, r1, r0}"),
! 365: T(A(0, 1, 1), "addu.co r0, r1, r1", "{addu.co r0, r1, r1}"),
! 366: T(A(0, 1, 2), "addu.co r0, r1, r2", "{addu.co r0, r1, r2}"),
! 367: T(A(0, 2, 1), "addu.co r0, r2, r1", "{addu.co r0, r2, r1}"),
! 368: T(A(1, 0, 0), "addu.co r1, r0, r0", "{addu.co r1, r0, r0}"),
! 369: T(A(1, 0, 1), "addu.co r1, r0, r1", "{addu.co r1, r0, r1}"),
! 370: T(A(1, 0, 2), "addu.co r1, r0, r2", "{addu.co r1, r0, r2}"),
! 371: T(A(1, 1, 0), "addu.co r1, r1, r0", "{addu.co r1, r0}"),
! 372: T(A(1, 1, 1), "addu.co r1, r1, r1", "{addu.co r1, r1}"),
! 373: T(A(1, 1, 2), "addu.co r1, r1, r2", "{addu.co r1, r2}"),
! 374: T(A(1, 2, 0), "addu.co r1, r2, r0", "{addu.co r1, r2, r0}"),
! 375: T(A(1, 2, 1), "addu.co r1, r2, r1", "{addu.co r1, r2, r1}"),
! 376: T(A(1, 2, 2), "addu.co r1, r2, r2", "{addu.co r1, r2, r2}"),
! 377: T(A(1, 2, 3), "addu.co r1, r2, r3", "{addu.co r1, r2, r3}"),
! 378: #undef A
! 379: T(0xf6326201, "addu.ci r17,r18,r1", "{addu.ci r17,r18,r1}"),
! 380: T(0xf6326301, "addu.cio r17,r18,r1", "{addu.cio r17,r18,r1}"),
! 381:
! 382: #define A(d, s1, s2) M(0xf400'6400, d, s1, s2)
! 383: T(A(0, 0, 0), "subu r0, r0, r0", "{nop}"),
! 384: T(A(0, 0, 1), "subu r0, r0, r1", "{nop}"),
! 385: T(A(0, 1, 0), "subu r0, r1, r0", "{nop}"),
! 386: T(A(0, 1, 1), "subu r0, r1, r1", "{nop}"),
! 387: T(A(0, 1, 2), "subu r0, r1, r2", "{nop}"),
! 388: T(A(0, 2, 1), "subu r0, r2, r1", "{nop}"),
! 389: T(A(1, 0, 0), "subu r1, r0, r0", "{clr r1}"),
! 390: T(A(1, 0, 1), "subu r1, r0, r1", "{subu r1, r0, r1}"),
! 391: T(A(1, 0, 2), "subu r1, r0, r2", "{subu r1, r0, r2}"),
! 392: T(A(1, 1, 0), "subu r1, r1, r0", "{nop}"),
! 393: T(A(1, 1, 1), "subu r1, r1, r1", "{clr r1}"),
! 394: T(A(1, 1, 2), "subu r1, r1, r2", "{subu r1, r2}"),
! 395: T(A(1, 2, 0), "subu r1, r2, r0", "{mov r1, r2}"),
! 396: T(A(1, 2, 1), "subu r1, r2, r1", "{subu r1, r2, r1}"),
! 397: T(A(1, 2, 2), "subu r1, r2, r2", "{clr r1}"),
! 398: T(A(1, 2, 3), "subu r1, r2, r3", "{subu r1, r2, r3}"),
! 399: #undef A
! 400:
! 401: // Carry In/Out を含むやつは 2オペランドへの省略のみ (.coだけ代表でテスト)
! 402: #define A(d, s1, s2) M(0xf400'6500, d, s1, s2)
! 403: T(A(0, 0, 0), "subu.co r0, r0, r0", "{subu.co r0, r0}"),
! 404: T(A(0, 0, 1), "subu.co r0, r0, r1", "{subu.co r0, r1}"),
! 405: T(A(0, 1, 0), "subu.co r0, r1, r0", "{subu.co r0, r1, r0}"),
! 406: T(A(0, 1, 1), "subu.co r0, r1, r1", "{subu.co r0, r1, r1}"),
! 407: T(A(0, 1, 2), "subu.co r0, r1, r2", "{subu.co r0, r1, r2}"),
! 408: T(A(0, 2, 1), "subu.co r0, r2, r1", "{subu.co r0, r2, r1}"),
! 409: T(A(1, 0, 0), "subu.co r1, r0, r0", "{subu.co r1, r0, r0}"),
! 410: T(A(1, 0, 1), "subu.co r1, r0, r1", "{subu.co r1, r0, r1}"),
! 411: T(A(1, 0, 2), "subu.co r1, r0, r2", "{subu.co r1, r0, r2}"),
! 412: T(A(1, 1, 0), "subu.co r1, r1, r0", "{subu.co r1, r0}"),
! 413: T(A(1, 1, 1), "subu.co r1, r1, r1", "{subu.co r1, r1}"),
! 414: T(A(1, 1, 2), "subu.co r1, r1, r2", "{subu.co r1, r2}"),
! 415: T(A(1, 2, 0), "subu.co r1, r2, r0", "{subu.co r1, r2, r0}"),
! 416: T(A(1, 2, 1), "subu.co r1, r2, r1", "{subu.co r1, r2, r1}"),
! 417: T(A(1, 2, 2), "subu.co r1, r2, r2", "{subu.co r1, r2, r2}"),
! 418: T(A(1, 2, 3), "subu.co r1, r2, r3", "{subu.co r1, r2, r3}"),
! 419: #undef A
! 420: T(0xf6326601, "subu.ci r17,r18,r1", "{subu.ci r17,r18,r1}"),
! 421: T(0xf6326701, "subu.cio r17,r18,r1", "{subu.cio r17,r18,r1}"),
! 422:
! 423: #define A(d, s1, s2) M(0xf400'6800, d, s1, s2)
! 424: T(A(0, 0, 0), "divu r0, r0, r0", "{divu r0, r0}"),
! 425: T(A(0, 0, 1), "divu r0, r0, r1", "{divu r0, r1}"),
! 426: T(A(0, 1, 0), "divu r0, r1, r0", "{divu r0, r1, r0}"),
! 427: T(A(0, 1, 1), "divu r0, r1, r1", "{divu r0, r1, r1}"),
! 428: T(A(0, 1, 2), "divu r0, r1, r2", "{divu r0, r1, r2}"),
! 429: T(A(0, 2, 1), "divu r0, r2, r1", "{divu r0, r2, r1}"),
! 430: T(A(1, 0, 0), "divu r1, r0, r0", "{divu r1, r0, r0}"),
! 431: T(A(1, 0, 1), "divu r1, r0, r1", "{divu r1, r0, r1}"),
! 432: T(A(1, 0, 2), "divu r1, r0, r2", "{divu r1, r0, r2}"),
! 433: T(A(1, 1, 0), "divu r1, r1, r0", "{divu r1, r0}"),
! 434: T(A(1, 1, 1), "divu r1, r1, r1", "{divu r1, r1}"),
! 435: T(A(1, 1, 2), "divu r1, r1, r2", "{divu r1, r2}"),
! 436: T(A(1, 2, 0), "divu r1, r2, r0", "{divu r1, r2, r0}"),
! 437: T(A(1, 2, 1), "divu r1, r2, r1", "{divu r1, r2, r1}"),
! 438: T(A(1, 2, 2), "divu r1, r2, r2", "{divu r1, r2, r2}"),
! 439: T(A(1, 2, 3), "divu r1, r2, r3", "{divu r1, r2, r3}"),
! 440: #undef A
! 441:
! 442: #define A(d, s1, s2) M(0xf400'6c00, d, s1, s2)
! 443: T(A(0, 0, 0), "mul r0, r0, r0", "{mul r0, r0}"),
! 444: T(A(0, 0, 1), "mul r0, r0, r1", "{mul r0, r1}"),
! 445: T(A(0, 1, 0), "mul r0, r1, r0", "{mul r0, r1, r0}"),
! 446: T(A(0, 1, 1), "mul r0, r1, r1", "{mul r0, r1, r1}"),
! 447: T(A(0, 1, 2), "mul r0, r1, r2", "{mul r0, r1, r2}"),
! 448: T(A(0, 2, 1), "mul r0, r2, r1", "{mul r0, r2, r1}"),
! 449: T(A(1, 0, 0), "mul r1, r0, r0", "{mul r1, r0, r0}"),
! 450: T(A(1, 0, 1), "mul r1, r0, r1", "{mul r1, r0, r1}"),
! 451: T(A(1, 0, 2), "mul r1, r0, r2", "{mul r1, r0, r2}"),
! 452: T(A(1, 1, 0), "mul r1, r1, r0", "{mul r1, r0}"),
! 453: T(A(1, 1, 1), "mul r1, r1, r1", "{mul r1, r1}"),
! 454: T(A(1, 1, 2), "mul r1, r1, r2", "{mul r1, r2}"),
! 455: T(A(1, 2, 0), "mul r1, r2, r0", "{mul r1, r2, r0}"),
! 456: T(A(1, 2, 1), "mul r1, r2, r1", "{mul r1, r2, r1}"),
! 457: T(A(1, 2, 2), "mul r1, r2, r2", "{mul r1, r2, r2}"),
! 458: T(A(1, 2, 3), "mul r1, r2, r3", "{mul r1, r2, r3}"),
! 459: #undef A
! 460:
! 461: #define A(d, s1, s2) M(0xf400'7000, d, s1, s2)
! 462: T(A(0, 0, 0), "add r0, r0, r0", "{nop}"),
! 463: T(A(0, 0, 1), "add r0, r0, r1", "{nop}"),
! 464: T(A(0, 1, 0), "add r0, r1, r0", "{nop}"),
! 465: T(A(0, 1, 1), "add r0, r1, r1", "{adds r0, r1, r1}"),
! 466: T(A(0, 1, 2), "add r0, r1, r2", "{adds r0, r1, r2}"),
! 467: T(A(0, 2, 1), "add r0, r2, r1", "{adds r0, r2, r1}"),
! 468: T(A(1, 0, 0), "add r1, r0, r0", "{clr r1}"),
! 469: T(A(1, 0, 1), "add r1, r0, r1", "{nop}"),
! 470: T(A(1, 0, 2), "add r1, r0, r2", "{mov r1, r2}"),
! 471: T(A(1, 1, 0), "add r1, r1, r0", "{nop}"),
! 472: T(A(1, 1, 1), "add r1, r1, r1", "{adds r1, r1}"),
! 473: T(A(1, 1, 2), "add r1, r1, r2", "{adds r1, r2}"),
! 474: T(A(1, 2, 0), "add r1, r2, r0", "{mov r1, r2}"),
! 475: T(A(1, 2, 1), "add r1, r2, r1", "{adds r1, r2, r1}"),
! 476: T(A(1, 2, 2), "add r1, r2, r2", "{adds r1, r2, r2}"),
! 477: T(A(1, 2, 3), "add r1, r2, r3", "{adds r1, r2, r3}"),
! 478: #undef A
! 479:
! 480: // Carry In/Out を含むやつは 2オペランドへの省略のみ (.coだけ代表でテスト)
! 481: #define A(d, s1, s2) M(0xf400'7100, d, s1, s2)
! 482: T(A(0, 0, 0), "add.co r0, r0, r0", "{adds.co r0, r0}"),
! 483: T(A(0, 0, 1), "add.co r0, r0, r1", "{adds.co r0, r1}"),
! 484: T(A(0, 1, 0), "add.co r0, r1, r0", "{adds.co r0, r1, r0}"),
! 485: T(A(0, 1, 1), "add.co r0, r1, r1", "{adds.co r0, r1, r1}"),
! 486: T(A(0, 1, 2), "add.co r0, r1, r2", "{adds.co r0, r1, r2}"),
! 487: T(A(0, 2, 1), "add.co r0, r2, r1", "{adds.co r0, r2, r1}"),
! 488: T(A(1, 0, 0), "add.co r1, r0, r0", "{adds.co r1, r0, r0}"),
! 489: T(A(1, 0, 1), "add.co r1, r0, r1", "{adds.co r1, r0, r1}"),
! 490: T(A(1, 0, 2), "add.co r1, r0, r2", "{adds.co r1, r0, r2}"),
! 491: T(A(1, 1, 0), "add.co r1, r1, r0", "{adds.co r1, r0}"),
! 492: T(A(1, 1, 1), "add.co r1, r1, r1", "{adds.co r1, r1}"),
! 493: T(A(1, 1, 2), "add.co r1, r1, r2", "{adds.co r1, r2}"),
! 494: T(A(1, 2, 0), "add.co r1, r2, r0", "{adds.co r1, r2, r0}"),
! 495: T(A(1, 2, 1), "add.co r1, r2, r1", "{adds.co r1, r2, r1}"),
! 496: T(A(1, 2, 2), "add.co r1, r2, r2", "{adds.co r1, r2, r2}"),
! 497: T(A(1, 2, 3), "add.co r1, r2, r3", "{adds.co r1, r2, r3}"),
! 498: #undef A
! 499: T(0xf6327201, "add.ci r17,r18,r1", "{adds.ci r17,r18,r1}"),
! 500: T(0xf6327301, "add.cio r17,r18,r1", "{adds.cio r17,r18,r1}"),
! 501:
! 502: #define A(d, s1, s2) M(0xf400'7400, d, s1, s2)
! 503: T(A(0, 0, 0), "sub r0, r0, r0", "{nop}"),
! 504: T(A(0, 0, 1), "sub r0, r0, r1", "{subs r0, r1}"),
! 505: T(A(0, 1, 0), "sub r0, r1, r0", "{nop}"),
! 506: T(A(0, 1, 1), "sub r0, r1, r1", "{subs r0, r1, r1}"),
! 507: T(A(0, 1, 2), "sub r0, r1, r2", "{subs r0, r1, r2}"),
! 508: T(A(0, 2, 1), "sub r0, r2, r1", "{subs r0, r2, r1}"),
! 509: T(A(1, 0, 0), "sub r1, r0, r0", "{clr r1}"),
! 510: T(A(1, 0, 1), "sub r1, r0, r1", "{subs r1, r0, r1}"),
! 511: T(A(1, 0, 2), "sub r1, r0, r2", "{subs r1, r0, r2}"),
! 512: T(A(1, 1, 0), "sub r1, r1, r0", "{nop}"),
! 513: T(A(1, 1, 1), "sub r1, r1, r1", "{subs r1, r1}"),
! 514: T(A(1, 1, 2), "sub r1, r1, r2", "{subs r1, r2}"),
! 515: T(A(1, 2, 0), "sub r1, r2, r0", "{mov r1, r2}"),
! 516: T(A(1, 2, 1), "sub r1, r2, r1", "{subs r1, r2, r1}"),
! 517: T(A(1, 2, 2), "sub r1, r2, r2", "{subs r1, r2, r2}"),
! 518: T(A(1, 2, 3), "sub r1, r2, r3", "{subs r1, r2, r3}"),
! 519: #undef A
! 520:
! 521: // Carry In/Out を含むやつは 2オペランドへの省略のみ (.coだけ代表でテスト)
! 522: #define A(d, s1, s2) M(0xf400'7500, d, s1, s2)
! 523: T(A(0, 0, 0), "sub.co r0, r0, r0", "{subs.co r0, r0}"),
! 524: T(A(0, 0, 1), "sub.co r0, r0, r1", "{subs.co r0, r1}"),
! 525: T(A(0, 1, 0), "sub.co r0, r1, r0", "{subs.co r0, r1, r0}"),
! 526: T(A(0, 1, 1), "sub.co r0, r1, r1", "{subs.co r0, r1, r1}"),
! 527: T(A(0, 1, 2), "sub.co r0, r1, r2", "{subs.co r0, r1, r2}"),
! 528: T(A(0, 2, 1), "sub.co r0, r2, r1", "{subs.co r0, r2, r1}"),
! 529: T(A(1, 0, 0), "sub.co r1, r0, r0", "{subs.co r1, r0, r0}"),
! 530: T(A(1, 0, 1), "sub.co r1, r0, r1", "{subs.co r1, r0, r1}"),
! 531: T(A(1, 0, 2), "sub.co r1, r0, r2", "{subs.co r1, r0, r2}"),
! 532: T(A(1, 1, 0), "sub.co r1, r1, r0", "{subs.co r1, r0}"),
! 533: T(A(1, 1, 1), "sub.co r1, r1, r1", "{subs.co r1, r1}"),
! 534: T(A(1, 1, 2), "sub.co r1, r1, r2", "{subs.co r1, r2}"),
! 535: T(A(1, 2, 0), "sub.co r1, r2, r0", "{subs.co r1, r2, r0}"),
! 536: T(A(1, 2, 1), "sub.co r1, r2, r1", "{subs.co r1, r2, r1}"),
! 537: T(A(1, 2, 2), "sub.co r1, r2, r2", "{subs.co r1, r2, r2}"),
! 538: T(A(1, 2, 3), "sub.co r1, r2, r3", "{subs.co r1, r2, r3}"),
! 539: #undef A
! 540: T(0xf6327601, "sub.ci r17,r18,r1", "{subs.ci r17,r18,r1}"),
! 541: T(0xf6327701, "sub.cio r17,r18,r1", "{subs.cio r17,r18,r1}"),
! 542:
! 543: #define A(d, s1, s2) M(0xf400'7800, d, s1, s2)
! 544: T(A(0, 0, 0), "div r0, r0, r0", "{div r0, r0}"),
! 545: T(A(0, 0, 1), "div r0, r0, r1", "{div r0, r1}"),
! 546: T(A(0, 1, 0), "div r0, r1, r0", "{div r0, r1, r0}"),
! 547: T(A(0, 1, 1), "div r0, r1, r1", "{div r0, r1, r1}"),
! 548: T(A(0, 1, 2), "div r0, r1, r2", "{div r0, r1, r2}"),
! 549: T(A(0, 2, 1), "div r0, r2, r1", "{div r0, r2, r1}"),
! 550: T(A(1, 0, 0), "div r1, r0, r0", "{div r1, r0, r0}"),
! 551: T(A(1, 0, 1), "div r1, r0, r1", "{div r1, r0, r1}"),
! 552: T(A(1, 0, 2), "div r1, r0, r2", "{div r1, r0, r2}"),
! 553: T(A(1, 1, 0), "div r1, r1, r0", "{div r1, r0}"),
! 554: T(A(1, 1, 1), "div r1, r1, r1", "{div r1, r1}"),
! 555: T(A(1, 1, 2), "div r1, r1, r2", "{div r1, r2}"),
! 556: T(A(1, 2, 0), "div r1, r2, r0", "{div r1, r2, r0}"),
! 557: T(A(1, 2, 1), "div r1, r2, r1", "{div r1, r2, r1}"),
! 558: T(A(1, 2, 2), "div r1, r2, r2", "{div r1, r2, r2}"),
! 559: T(A(1, 2, 3), "div r1, r2, r3", "{div r1, r2, r3}"),
! 560: #undef A
! 561:
! 562: #define A(d, s1, s2) M(0xf400'7c00, d, s1, s2)
! 563: T(A(0, 0, 0), "cmp r0, r0, r0", "{nop}"),
! 564: T(A(0, 0, 1), "cmp r0, r0, r1", "{nop}"),
! 565: T(A(0, 1, 0), "cmp r0, r1, r0", "{nop}"),
! 566: T(A(0, 1, 1), "cmp r0, r1, r1", "{nop}"),
! 567: T(A(0, 1, 2), "cmp r0, r1, r2", "{nop}"),
! 568: T(A(0, 2, 1), "cmp r0, r2, r1", "{nop}"),
! 569: O(A(1, 0, 0), "cmp r1, r0, r0"),
! 570: O(A(1, 0, 1), "cmp r1, r0, r1"),
! 571: O(A(1, 0, 2), "cmp r1, r0, r2"),
! 572: O(A(1, 1, 0), "cmp r1, r1, r0"),
! 573: O(A(1, 1, 1), "cmp r1, r1, r1"),
! 574: O(A(1, 1, 2), "cmp r1, r1, r2"),
! 575: O(A(1, 2, 0), "cmp r1, r2, r0"),
! 576: O(A(1, 2, 1), "cmp r1, r2, r1"),
! 577: O(A(1, 2, 2), "cmp r1, r2, r2"),
! 578: O(A(1, 2, 3), "cmp r1, r2, r3"),
! 579: #undef A
! 580:
! 581: #define A(d, s1, s2) M(0xf400'8000, d, s1, s2)
! 582: T(A(0, 0, 0), "clr r0, r0, r0", "{nop}"),
! 583: T(A(0, 0, 1), "clr r0, r0, r1", "{nop}"),
! 584: T(A(0, 1, 0), "clr r0, r1, r0", "{nop}"),
! 585: T(A(0, 1, 1), "clr r0, r1, r1", "{nop}"),
! 586: T(A(0, 1, 2), "clr r0, r1, r2", "{nop}"),
! 587: T(A(0, 2, 1), "clr r0, r2, r1", "{nop}"),
! 588: T(A(1, 0, 0), "clr r1, r0, r0", "{clr r1}"),
! 589: T(A(1, 0, 1), "clr r1, r0, r1", "{clr r1}"),
! 590: T(A(1, 0, 2), "clr r1, r0, r2", "{clr r1}"),
! 591: T(A(1, 1, 0), "clr r1, r1, r0", "{nop}"),
! 592: T(A(1, 1, 1), "clr r1, r1, r1", "{bfclr r1, r1}"),
! 593: T(A(1, 1, 2), "clr r1, r1, r2", "{bfclr r1, r2}"),
! 594: T(A(1, 2, 0), "clr r1, r2, r0", "{mov r1, r2}"),
! 595: T(A(1, 2, 1), "clr r1, r2, r1", "{bfclr r1, r2, r1}"),
! 596: T(A(1, 2, 2), "clr r1, r2, r2", "{bfclr r1, r2, r2}"),
! 597: T(A(1, 2, 3), "clr r1, r2, r3", "{bfclr r1, r2, r3}"),
! 598: #undef A
! 599:
! 600: #define A(d, s1, s2) M(0xf400'8800, d, s1, s2)
! 601: T(A(0, 0, 0), "set r0, r0, r0", "{nop}"),
! 602: T(A(0, 0, 1), "set r0, r0, r1", "{nop}"),
! 603: T(A(0, 1, 0), "set r0, r1, r0", "{nop}"),
! 604: T(A(0, 1, 1), "set r0, r1, r1", "{nop}"),
! 605: T(A(0, 1, 2), "set r0, r1, r2", "{nop}"),
! 606: T(A(0, 2, 1), "set r0, r2, r1", "{nop}"),
! 607: T(A(1, 0, 0), "set r1, r0, r0", "{mov r1, #0xffffffff}"),
! 608: T(A(1, 0, 1), "set r1, r0, r1", "{bfset r1, r0, r1}"),
! 609: T(A(1, 0, 2), "set r1, r0, r2", "{bfset r1, r0, r2}"),
! 610: T(A(1, 1, 0), "set r1, r1, r0", "{mov r1, #0xffffffff}"),
! 611: T(A(1, 1, 1), "set r1, r1, r1", "{bfset r1, r1}"),
! 612: T(A(1, 1, 2), "set r1, r1, r2", "{bfset r1, r2}"),
! 613: T(A(1, 2, 0), "set r1, r2, r0", "{mov r1, #0xffffffff}"),
! 614: T(A(1, 2, 1), "set r1, r2, r1", "{bfset r1, r2, r1}"),
! 615: T(A(1, 2, 2), "set r1, r2, r2", "{bfset r1, r2, r2}"),
! 616: T(A(1, 2, 3), "set r1, r2, r3", "{bfset r1, r2, r3}"),
! 617: #undef A
! 618:
! 619: #define A(d, s1, s2) M(0xf400'9000, d, s1, s2)
! 620: T(A(0, 0, 0), "ext r0, r0, r0", "{nop}"),
! 621: T(A(0, 0, 1), "ext r0, r0, r1", "{nop}"),
! 622: T(A(0, 1, 0), "ext r0, r1, r0", "{nop}"),
! 623: T(A(0, 1, 1), "ext r0, r1, r1", "{nop}"),
! 624: T(A(0, 1, 2), "ext r0, r1, r2", "{nop}"),
! 625: T(A(0, 2, 1), "ext r0, r2, r1", "{nop}"),
! 626: T(A(1, 0, 0), "ext r1, r0, r0", "{mov r1, r0}"),
! 627: T(A(1, 0, 1), "ext r1, r0, r1", "{bfexts r1, r0, r1}"),
! 628: T(A(1, 0, 2), "ext r1, r0, r2", "{bfexts r1, r0, r2}"),
! 629: T(A(1, 1, 0), "ext r1, r1, r0", "{nop}"),
! 630: T(A(1, 1, 1), "ext r1, r1, r1", "{bfexts r1, r1}"),
! 631: T(A(1, 1, 2), "ext r1, r1, r2", "{bfexts r1, r2}"),
! 632: T(A(1, 2, 0), "ext r1, r2, r0", "{mov r1, r2}"),
! 633: T(A(1, 2, 1), "ext r1, r2, r1", "{bfexts r1, r2, r1}"),
! 634: T(A(1, 2, 2), "ext r1, r2, r2", "{bfexts r1, r2, r2}"),
! 635: T(A(1, 2, 3), "ext r1, r2, r3", "{bfexts r1, r2, r3}"),
! 636: #undef A
! 637:
! 638: #define A(d, s1, s2) M(0xf400'9800, d, s1, s2)
! 639: T(A(0, 0, 0), "extu r0, r0, r0", "{nop}"),
! 640: T(A(0, 0, 1), "extu r0, r0, r1", "{nop}"),
! 641: T(A(0, 1, 0), "extu r0, r1, r0", "{nop}"),
! 642: T(A(0, 1, 1), "extu r0, r1, r1", "{nop}"),
! 643: T(A(0, 1, 2), "extu r0, r1, r2", "{nop}"),
! 644: T(A(0, 2, 1), "extu r0, r2, r1", "{nop}"),
! 645: T(A(1, 0, 0), "extu r1, r0, r0", "{mov r1, r0}"),
! 646: T(A(1, 0, 1), "extu r1, r0, r1", "{bfextu r1, r0, r1}"),
! 647: T(A(1, 0, 2), "extu r1, r0, r2", "{bfextu r1, r0, r2}"),
! 648: T(A(1, 1, 0), "extu r1, r1, r0", "{nop}"),
! 649: T(A(1, 1, 1), "extu r1, r1, r1", "{bfextu r1, r1}"),
! 650: T(A(1, 1, 2), "extu r1, r1, r2", "{bfextu r1, r2}"),
! 651: T(A(1, 2, 0), "extu r1, r2, r0", "{mov r1, r2}"),
! 652: T(A(1, 2, 1), "extu r1, r2, r1", "{bfextu r1, r2, r1}"),
! 653: T(A(1, 2, 2), "extu r1, r2, r2", "{bfextu r1, r2, r2}"),
! 654: T(A(1, 2, 3), "extu r1, r2, r3", "{bfextu r1, r2, r3}"),
! 655: #undef A
! 656:
! 657: #define A(d, s1, s2) M(0xf400'a000, d, s1, s2)
! 658: T(A(0, 0, 0), "mak r0, r0, r0", "{nop}"),
! 659: T(A(0, 0, 1), "mak r0, r0, r1", "{nop}"),
! 660: T(A(0, 1, 0), "mak r0, r1, r0", "{nop}"),
! 661: T(A(0, 1, 1), "mak r0, r1, r1", "{nop}"),
! 662: T(A(0, 1, 2), "mak r0, r1, r2", "{nop}"),
! 663: T(A(0, 2, 1), "mak r0, r2, r1", "{nop}"),
! 664: T(A(1, 0, 0), "mak r1, r0, r0", "{clr r1}"),
! 665: T(A(1, 0, 1), "mak r1, r0, r1", "{clr r1}"),
! 666: T(A(1, 0, 2), "mak r1, r0, r2", "{clr r1}"),
! 667: T(A(1, 1, 0), "mak r1, r1, r0", "{nop}"),
! 668: T(A(1, 1, 1), "mak r1, r1, r1", "{bfmak r1, r1}"),
! 669: T(A(1, 1, 2), "mak r1, r1, r2", "{bfmak r1, r2}"),
! 670: T(A(1, 2, 0), "mak r1, r2, r0", "{mov r1, r2}"),
! 671: T(A(1, 2, 1), "mak r1, r2, r1", "{bfmak r1, r2, r1}"),
! 672: T(A(1, 2, 2), "mak r1, r2, r2", "{bfmak r1, r2, r2}"),
! 673: T(A(1, 2, 3), "mak r1, r2, r3", "{bfmak r1, r2, r3}"),
! 674: #undef A
! 675:
! 676: #define A(d, s1, s2) M(0xf400'a800, d, s1, s2)
! 677: T(A(0, 0, 0), "rot r0, r0, r0", "{nop}"),
! 678: T(A(0, 0, 1), "rot r0, r0, r1", "{nop}"),
! 679: T(A(0, 1, 0), "rot r0, r1, r0", "{nop}"),
! 680: T(A(0, 1, 1), "rot r0, r1, r1", "{nop}"),
! 681: T(A(0, 1, 2), "rot r0, r1, r2", "{nop}"),
! 682: T(A(0, 2, 1), "rot r0, r2, r1", "{nop}"),
! 683: T(A(1, 0, 0), "rot r1, r0, r0", "{clr r1}"),
! 684: T(A(1, 0, 1), "rot r1, r0, r1", "{clr r1}"),
! 685: T(A(1, 0, 2), "rot r1, r0, r2", "{clr r1}"),
! 686: T(A(1, 1, 0), "rot r1, r1, r0", "{nop}"),
! 687: T(A(1, 1, 1), "rot r1, r1, r1", "{ror r1, r1}"),
! 688: T(A(1, 1, 2), "rot r1, r1, r2", "{ror r1, r2}"),
! 689: T(A(1, 2, 0), "rot r1, r2, r0", "{mov r1, r2}"),
! 690: T(A(1, 2, 1), "rot r1, r2, r1", "{ror r1, r2, r1}"),
! 691: T(A(1, 2, 2), "rot r1, r2, r2", "{ror r1, r2, r2}"),
! 692: T(A(1, 2, 3), "rot r1, r2, r3", "{ror r1, r2, r3}"),
! 693: #undef A
! 694:
! 695: O(0xf400c011, "jmp r17"),
! 696: O(0xf400c411, "jmp.n r17"),
! 697: O(0xf400c811, "jsr r17"),
! 698: O(0xf400cc11, "jsr.n r17"),
! 699:
! 700: #define A(d, s2) M(0xf400'e800, d, 0, s2)
! 701: T(A(0, 0), "ff1 r0, r0", "{nop}"),
! 702: T(A(0, 1), "ff1 r0, r1", "{nop}"),
! 703: T(A(1, 0), "ff1 r1, r0", "{mov r1, #32}"),
! 704: T(A(1, 1), "ff1 r1, r1", "{ff1 r1, r1}"),
! 705: T(A(1, 2), "ff1 r1, r2", "{ff1 r1, r2}"),
! 706: #undef A
! 707: #define A(d, s2) M(0xf400'ec00, d, 0, s2)
! 708: T(A(0, 0), "ff0 r0, r0", "{nop}"),
! 709: T(A(0, 1), "ff0 r0, r1", "{nop}"),
! 710: T(A(1, 0), "ff0 r1, r0", "{clr r1}"),
! 711: T(A(1, 1), "ff0 r1, r1", "{ff0 r1, r1}"),
! 712: T(A(1, 2), "ff0 r1, r2", "{ff0 r1, r2}"),
! 713: #undef A
! 714:
! 715: O(0xf400fc00, "rte"),
! 716: O(0xf411f801, "tbnd r17,r1"),
! 717: O(0xf8118765, "tbnd r17,#0x8765"),
1.1 root 718: };
719:
720: static uint8 ram[1024];
721: static int failed;
722:
723: uint64
724: vm_phys_peek_8(uint32 addr)
725: {
726: assertmsg(addr < sizeof(ram), "addr=0x%x", addr);
727:
728: // XXX endian
729: return ram[addr ^ 1];
730: }
731:
732: // リンカを通すためのダミー
733: Disasm::~Disasm() { }
734: DebuggerMD::~DebuggerMD() { }
735:
736: int
737: main(int ac, char *av[])
738: {
739: saddr_t saddr;
740:
1.1.1.2 ! root 741: gConfig.reset(new Config());
! 742: gConfig->Update(std::vector<std::string> { ".m88k-altname=1" });
! 743:
1.1 root 744: // DebuggerMD (の継承クラス)を用意するのは芋づる式に大変なので、
745: // 中でアクセスする変数だけ強引に用意する。
746: DebuggerMD *md = (DebuggerMD *)malloc(sizeof(DebuggerMD));
747: md->inst_bytes = 4;
748:
749: for (int i = 0; i < countof(table); i++) {
1.1.1.2 ! root 750: int line = table[i].line;
! 751: std::string expstd = table[i].expstd;
! 752: std::string expalt = table[i].expalt;
1.1 root 753: uint32 inst = table[i].inst;
754:
755: // エラー表示用
1.1.1.2 ! root 756: std::string inst_str = string_format("%d: $%08x", line, inst);
1.1 root 757:
758: // 全体を初期化
759: memset(ram, 0xdd, sizeof(ram));
760: // 100番地に命令列を書き込む
761: *(uint16 *)(ram + 0x100) = inst >> 16;
762: *(uint16 *)(ram + 0x102) = inst & 0xffff;
763: // 検査
764: saddr = 0x100;
765: DebuggerMemoryStream mem(md, saddr, MemoryMode::Physical);
766: m88100disasm dis(mem);
767: dis.Exec();
768: // 照合
1.1.1.2 ! root 769: if (dis.text != expstd) {
! 770: printf("%s std expects \"%s\" but \"%s\"\n", inst_str.c_str(),
! 771: expstd.c_str(), dis.text.c_str());
1.1 root 772: failed++;
773: continue;
774: }
775: uint32 expected_len = 4;
776: if (dis.bin.size() != expected_len) {
1.1.1.2 ! root 777: printf("%s std expects len=$%x but $%x\n", inst_str.c_str(),
1.1 root 778: expected_len, (uint)dis.bin.size());
779: failed++;
780: continue;
781: }
1.1.1.2 ! root 782:
! 783: // 照合(別名)
! 784: if (dis.alttext != expalt) {
! 785: printf("%s alt expects \"%s\" but \"%s\"\n", inst_str.c_str(),
! 786: expalt.c_str(), dis.alttext.c_str());
! 787: failed++;
! 788: continue;
! 789: }
1.1 root 790: }
791:
792: int total = countof(table);
793: printf("%d tests, %d success", total, total - failed);
794: if (failed > 0) {
795: printf(", %d failed", failed);
796: }
797: printf("\n");
798: return 0;
799: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.