* Roll Alpha modifications into devo for sky-gpuif*/ sky-gs*/ interp.c
[deliverable/binutils-gdb.git] / sim / mips / m16.igen
CommitLineData
c0a4c3ba
AC
1// -*- C -*-
2//
16bd5d6e
AC
3//
4// MIPS Architecture:
5//
6// CPU Instruction Set (mips16)
7//
8
9// The instructions in this section are ordered according
10// to http://www.sgi.com/MIPS/arch/MIPS16/mips16.pdf.
11
12
c0a4c3ba
AC
13// The MIPS16 codes registers in a special way, map from one to the other.
14// :<type>:<flags>:<models>:<typedef>:<name>:<field>:<expression>
15:compute:::int:TRX:RX:((RX < 2) ? (16 + RX) \: RX)
16:compute:::int:TRY:RY:((RY < 2) ? (16 + RY) \: RY)
17:compute:::int:TRZ:RZ:((RZ < 2) ? (16 + RZ) \: RZ)
18:compute:::int:SHIFT:SHAMT:((SHAMT == 0) ? 8 \: SHAMT)
19
f3bdd368
AC
20:compute:::int:SHAMT:SHAMT_4_0,S5:(LSINSERTED (S5, 5, 5) | SHAMT_4_0)
21
22:compute:::address_word:IMMEDIATE:IMM_25_21,IMM_20_16,IMMED_15_0:(LSINSERTED (IMM_25_21, 25, 21) | LSINSERTED (IMM_20_16, 20, 16) | LSINSERTED (IMMED_15_0, 15, 0))
23:compute:::int:R32:R32L,R32H:((R32H << 3) | R32L)
24
25:compute:::address_word:IMMEDIATE:IMM_10_5,IMM_15_11,IMM_4_0:(LSINSERTED (IMM_10_5, 10, 5) | LSINSERTED (IMM_15_11, 15, 11) | LSINSERTED (IMM_4_0, 4, 0))
26
27: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))
c0a4c3ba
AC
28
29// FIXME:
30//
31// Only the `LB' instruction is implemented. It should be used as a guideline
32// when implementing other instructions.
33//
34// How to handle delayslots (for jumps) and extended lwpc instructions
35// has not been resolved.
36
37
16bd5d6e
AC
38// Load and Store Instructions
39
40
c0a4c3ba 4110000,3.RX,3.RY,5.IMMED:RRI:16::LB
f3bdd368 42"lb r<TRY>, <IMMED> (r<TRX>)"
16bd5d6e 43*mips16:
c0a4c3ba
AC
44// start-sanitize-tx19
45*tx19:
46// end-sanitize-tx19
16bd5d6e 47{
c0a4c3ba 48 GPR[TRY] = EXTEND8 (do_load (SD_, AccessLength_BYTE, GPR[TRX], IMMED));
16bd5d6e
AC
49}
50
f3bdd368
AC
5111110,6.IMM_10_5,5.IMM_15_11 + 10000,3.RX,3.RY,5.IMM_4_0:EXT-RRI:16::LB
52"lb r<TRY>, <IMMEDIATE> (r<TRX>)"
53*mips16:
54// start-sanitize-tx19
55*tx19:
56// end-sanitize-tx19
57{
58 GPR[TRY] = EXTEND8 (do_load (SD_, AccessLength_BYTE, GPR[TRX], EXTEND16 (IMMEDIATE)));
59}
60
61
16bd5d6e 62
c0a4c3ba 6310100,3.RX,3.RY,5.IMMED:RRI:16::LBU
f3bdd368 64"lbu r<TRY>, <IMMED> (r<TRX>)"
16bd5d6e 65*mips16:
c0a4c3ba
AC
66// start-sanitize-tx19
67*tx19:
68// end-sanitize-tx19
16bd5d6e 69{
c0a4c3ba 70 GPR[TRY] = do_load (SD_, AccessLength_BYTE, GPR[TRX], IMMED);
16bd5d6e
AC
71}
72
f3bdd368
AC
7311110,6.IMM_10_5,5.IMM_15_11 + 10100,3.RX,3.RY,5.IMM_4_0:EXT-RRI:16::LBU
74"lbu r<TRY>, <IMMEDIATE> (r<TRX>)"
75*mips16:
76// start-sanitize-tx19
77*tx19:
78// end-sanitize-tx19
79{
80 GPR[TRY] = do_load (SD_, AccessLength_BYTE, GPR[TRX], EXTEND16 (IMMEDIATE));
81}
82
83
16bd5d6e 84
c0a4c3ba 8510001,3.RX,3.RY,5.IMMED:RRI:16::LH
f3bdd368 86"lh r<TRY>, <IMMED> (r<TRX>)"
16bd5d6e 87*mips16:
c0a4c3ba
AC
88// start-sanitize-tx19
89*tx19:
90// end-sanitize-tx19
16bd5d6e 91{
c0a4c3ba 92 GPR[TRY] = EXTEND16 (do_load (SD_, AccessLength_HALFWORD, GPR[TRX], IMMED << 1));
16bd5d6e
AC
93}
94
f3bdd368
AC
9511110,6.IMM_10_5,5.IMM_15_11 + 10001,3.RX,3.RY,5.IMM_4_0:EXT-RRI:16::LH
96"lh r<TRY>, <IMMEDIATE> (r<TRX>)"
97*mips16:
98// start-sanitize-tx19
99*tx19:
100// end-sanitize-tx19
101{
102 GPR[TRY] = EXTEND16 (do_load (SD_, AccessLength_HALFWORD, GPR[TRX], EXTEND16 (IMMEDIATE)));
103}
104
105
16bd5d6e 106
c0a4c3ba 10710101,3.RX,3.RY,5.IMMED:RRI:16::LHU
f3bdd368 108"lhu r<TRY>, <IMMED> (r<TRX>)"
16bd5d6e 109*mips16:
c0a4c3ba
AC
110// start-sanitize-tx19
111*tx19:
112// end-sanitize-tx19
16bd5d6e 113{
c0a4c3ba
AC
114 GPR[TRY] = do_load (SD_, AccessLength_HALFWORD, GPR[TRX], IMMED << 1);
115}
116
f3bdd368
AC
11711110,6.IMM_10_5,5.IMM_15_11 + 10101,3.RX,3.RY,5.IMM_4_0:EXT-RRI:16::LHU
118"lhu r<TRY>, <IMMEDIATE> (r<TRX>)"
119*mips16:
120// start-sanitize-tx19
121*tx19:
122// end-sanitize-tx19
123{
124 GPR[TRY] = do_load (SD_, AccessLength_HALFWORD, GPR[TRX], EXTEND16 (IMMEDIATE));
125}
126
127
c0a4c3ba
AC
128
12910011,3.RX,3.RY,5.IMMED:RRI:16::LW
f3bdd368 130"lw r<TRY>, <IMMED> (r<TRX>)"
c0a4c3ba
AC
131*mips16:
132// start-sanitize-tx19
133*tx19:
134// end-sanitize-tx19
135{
136 GPR[TRY] = EXTEND32 (do_load (SD_, AccessLength_WORD, GPR[TRX], IMMED << 2));
137}
138
f3bdd368
AC
13911110,6.IMM_10_5,5.IMM_15_11 + 10011,3.RX,3.RY,5.IMM_4_0:EXT-RRI:16::LW
140"lw r<TRY>, <IMMEDIATE> (r<TRX>)"
141*mips16:
142// start-sanitize-tx19
143*tx19:
144// end-sanitize-tx19
145{
146 GPR[TRY] = EXTEND32 (do_load (SD_, AccessLength_WORD, GPR[TRX], EXTEND16 (IMMEDIATE)));
147}
148
149
c0a4c3ba
AC
150
15110110,3.RX,8.IMMED:RI:16::LWPC
f3bdd368 152"lw r<TRX>, <IMMED> (PC)"
c0a4c3ba
AC
153*mips16:
154// start-sanitize-tx19
155*tx19:
156// end-sanitize-tx19
157{
158 GPR[TRX] = EXTEND32 (do_load (SD_, AccessLength_WORD,
159 basepc (SD_) & ~3, IMMED << 2));
160}
161
f3bdd368
AC
16211110,6.IMM_10_5,5.IMM_15_11 + 10110,3.RX,000,5.IMM_4_0:EXT-RI:16::LWPC
163"lw r<TRX>, <IMMEDIATE> (PC)"
164*mips16:
165// start-sanitize-tx19
166*tx19:
167// end-sanitize-tx19
168{
169 GPR[TRX] = EXTEND32 (do_load (SD_, AccessLength_WORD, basepc (SD_) & ~3, EXTEND16 (IMMEDIATE)));
170}
171
172
c0a4c3ba
AC
173
17410010,3.RX,8.IMMED:RI:16::LWSP
f3bdd368 175"lw r<TRX>, <IMMED> (SP)"
c0a4c3ba
AC
176*mips16:
177// start-sanitize-tx19
178*tx19:
179// end-sanitize-tx19
180{
181 GPR[TRX] = EXTEND32 (do_load (SD_, AccessLength_WORD, SP, IMMED << 2));
182}
183
f3bdd368
AC
18411110,6.IMM_10_5,5.IMM_15_11 + 10010,3.RX,000,5.IMM_4_0:EXT-RI:16::LWSP
185"lw r<TRX>, <IMMEDIATE> (SP)"
186*mips16:
187// start-sanitize-tx19
188*tx19:
189// end-sanitize-tx19
190{
191 GPR[TRX] = EXTEND32 (do_load (SD_, AccessLength_WORD, SP, EXTEND16 (IMMEDIATE)));
192}
193
194
c0a4c3ba
AC
195
19610111,3.RX,3.RY,5.IMMED:RRI:16::LWU
f3bdd368 197"lwu r<TRY>, <IMMED> (r<TRX>)"
c0a4c3ba
AC
198*mips16:
199// start-sanitize-tx19
200*tx19:
201// end-sanitize-tx19
202{
203 GPR[TRY] = do_load (SD_, AccessLength_WORD, GPR[TRX], IMMED << 2);
204}
205
f3bdd368
AC
20611110,6.IMM_10_5,5.IMM_15_11 + 10111,3.RX,3.RY,5.IMM_4_0:EXT-RRI:16::LWU
207"lwu r<TRY>, <IMMEDIATE> (r<TRX>)"
208*mips16:
209// start-sanitize-tx19
210*tx19:
211// end-sanitize-tx19
212{
213 GPR[TRY] = do_load (SD_, AccessLength_WORD, GPR[TRX], EXTEND16 (IMMEDIATE));
214}
215
216
c0a4c3ba
AC
217
21800111,3.RX,3.RY,5.IMMED:RRI:16,64::LD
f3bdd368 219"ld r<TRY>, <IMMED> (r<TRX>)"
c0a4c3ba
AC
220*mips16:
221// start-sanitize-tx19
222*tx19:
223// end-sanitize-tx19
224{
225 GPR[TRY] = do_load (SD_, AccessLength_DOUBLEWORD, GPR[TRX], IMMED << 3);
226}
227
f3bdd368
AC
22811110,6.IMM_10_5,5.IMM_15_11 + 00111,3.RX,3.RY,5.IMM_4_0:EXT-RRI:16,64::LD
229"ld r<TRY>, <IMMED> (r<TRX>)"
230*mips16:
231// start-sanitize-tx19
232*tx19:
233// end-sanitize-tx19
234{
235 GPR[TRY] = do_load (SD_, AccessLength_DOUBLEWORD, GPR[TRX], EXTEND16 (IMMEDIATE));
236}
237
238
c0a4c3ba
AC
239
24011111,100,3.RY,5.IMMED:RI64:16::LDPC
f3bdd368 241"ld r<TRY>, <IMMED> (PC)"
c0a4c3ba
AC
242*mips16:
243// start-sanitize-tx19
244*tx19:
245// end-sanitize-tx19
246{
247 GPR[TRY] = do_load (SD_, AccessLength_DOUBLEWORD,
248 basepc (SD_) & ~7, IMMED << 3);
249}
250
f3bdd368
AC
25111110,6.IMM_10_5,5.IMM_15_11 + 11111,100,3.RY,5.IMM_4_0:EXT-RI64:16::LDPC
252"ld r<TRY>, <IMMEDIATE> (PC)"
253*mips16:
254// start-sanitize-tx19
255*tx19:
256// end-sanitize-tx19
257{
258 GPR[TRY] = do_load (SD_, AccessLength_DOUBLEWORD, basepc (SD_) & ~7, EXTEND16 (IMMEDIATE));
259}
260
261
c0a4c3ba
AC
262
26311111,000,3.RY,5.IMMED:RI64:16::LDSP
f3bdd368 264"ld r<TRY>, <IMMED> (SP)"
c0a4c3ba
AC
265*mips16:
266// start-sanitize-tx19
267*tx19:
268// end-sanitize-tx19
269{
270 GPR[TRY] = do_load (SD_, AccessLength_DOUBLEWORD, SP, IMMED << 3);
271}
272
f3bdd368
AC
27311110,6.IMM_10_5,5.IMM_15_11 + 11111,000,3.RY,5.IMM_4_0:EXT-RI64:16::LDSP
274"ld r<TRY>, <IMMEDIATE> (SP)"
275*mips16:
276// start-sanitize-tx19
277*tx19:
278// end-sanitize-tx19
279{
280 GPR[TRY] = do_load (SD_, AccessLength_DOUBLEWORD, SP, EXTEND16 (IMMEDIATE));
281}
282
283
c0a4c3ba
AC
284
28511000,3.RX,3.RY,5.IMMED:RRI:16::SB
f3bdd368 286"sb r<TRY>, <IMMED> (r<TRX>)"
c0a4c3ba
AC
287*mips16:
288// start-sanitize-tx19
289*tx19:
290// end-sanitize-tx19
291{
292 do_store (SD_, AccessLength_BYTE, GPR[TRX], IMMED, GPR[TRY]);
293}
294
f3bdd368
AC
29511110,6.IMM_10_5,5.IMM_15_11 + 11000,3.RX,3.RY,5.IMM_4_0:EXT-RRI:16::SB
296"sb r<TRY>, <IMMEDIATE> (r<TRX>)"
297*mips16:
298// start-sanitize-tx19
299*tx19:
300// end-sanitize-tx19
301{
302 do_store (SD_, AccessLength_BYTE, GPR[TRX], EXTEND16 (IMMEDIATE), GPR[TRY]);
303}
304
305
c0a4c3ba
AC
306
30711001,3.RX,3.RY,5.IMMED:RRI:16::SH
f3bdd368 308"sh r<TRY>, <IMMED> (r<TRX>)"
c0a4c3ba
AC
309*mips16:
310// start-sanitize-tx19
311*tx19:
312// end-sanitize-tx19
313{
314 do_store (SD_, AccessLength_HALFWORD, GPR[TRX], IMMED << 1, GPR[TRY]);
315}
316
f3bdd368
AC
31711110,6.IMM_10_5,5.IMM_15_11 + 11001,3.RX,3.RY,5.IMM_4_0:EXT-RRI:16::SH
318"sh r<TRY>, <IMMEDIATE> (r<TRX>)"
319*mips16:
320// start-sanitize-tx19
321*tx19:
322// end-sanitize-tx19
323{
324 do_store (SD_, AccessLength_HALFWORD, GPR[TRX], EXTEND16 (IMMEDIATE), GPR[TRY]);
325}
326
327
c0a4c3ba
AC
328
32911011,3.RX,3.RY,5.IMMED:RRI:16::SW
f3bdd368 330"sw r<TRY>, <IMMED> (r<TRX>)"
c0a4c3ba
AC
331*mips16:
332// start-sanitize-tx19
333*tx19:
334// end-sanitize-tx19
335{
336 do_store (SD_, AccessLength_WORD, GPR[TRX], IMMED << 2, GPR[TRY]);
337}
338
f3bdd368
AC
33911110,6.IMM_10_5,5.IMM_15_11 + 11011,3.RX,3.RY,5.IMM_4_0:EXT-RRI:16::SW
340"sw r<TRY>, <IMMEDIATE> (r<TRX>)"
341*mips16:
342// start-sanitize-tx19
343*tx19:
344// end-sanitize-tx19
345{
346 do_store (SD_, AccessLength_WORD, GPR[TRX], EXTEND16 (IMMEDIATE), GPR[TRY]);
347}
348
349
c0a4c3ba
AC
350
35111010,3.RX,8.IMMED:RI:16::SWSP
f3bdd368 352"sw r<TRX>, <IMMED> (SP)"
c0a4c3ba
AC
353*mips16:
354// start-sanitize-tx19
355*tx19:
356// end-sanitize-tx19
357{
358 do_store (SD_, AccessLength_WORD, SP, IMMED << 2, GPR[TRX]);
359}
360
f3bdd368
AC
36111110,6.IMM_10_5,5.IMM_15_11 + 11010,3.RX,000,5.IMM_4_0:EXT-RI:16::SWSP
362"sw r<TRX>, <IMMEDIATE> (SP)"
363*mips16:
364// start-sanitize-tx19
365*tx19:
366// end-sanitize-tx19
367{
368 do_store (SD_, AccessLength_WORD, SP, EXTEND16 (IMMEDIATE), GPR[TRX]);
369}
370
371
c0a4c3ba
AC
372
37301100,010,8.IMMED:I8:16::SWRASP
f3bdd368 374"sw r<RAIDX>, <IMMED> (SP)"
c0a4c3ba
AC
375*mips16:
376// start-sanitize-tx19
377*tx19:
378// end-sanitize-tx19
379{
380 do_store (SD_, AccessLength_WORD, SP, IMMED << 2, RA);
381}
382
f3bdd368
AC
38311110,6.IMM_10_5,5.IMM_15_11 + 01100,010,000,5.IMM_4_0:EXT-I8:16::SWRASP
384"sw r<RAIDX>, <IMMEDIATE> (SP)"
385*mips16:
386// start-sanitize-tx19
387*tx19:
388// end-sanitize-tx19
389{
390 do_store (SD_, AccessLength_WORD, SP, EXTEND16 (IMMEDIATE), RA);
391}
392
393
c0a4c3ba
AC
394
39501111,3.RX,3.RY,5.IMMED:RRI:16::SD
f3bdd368 396"sd r<TRY>, <IMMED> (r<TRX>)"
c0a4c3ba
AC
397*mips16:
398// start-sanitize-tx19
399*tx19:
400// end-sanitize-tx19
401{
402 do_store (SD_, AccessLength_DOUBLEWORD, GPR[TRX], IMMED << 3, GPR[TRY]);
403}
404
f3bdd368
AC
40511110,6.IMM_10_5,5.IMM_15_11 + 01111,3.RX,3.RY,5.IMM_4_0:EXT-RRI:16::SD
406"sd r<TRY>, <IMMEDIATE> (r<TRX>)"
407*mips16:
408// start-sanitize-tx19
409*tx19:
410// end-sanitize-tx19
411{
412 do_store (SD_, AccessLength_DOUBLEWORD, GPR[TRX], EXTEND16 (IMMEDIATE), GPR[TRY]);
413}
414
415
c0a4c3ba
AC
416
41711111,001,3.RY,5.IMMED:RI64:16::SDSP
f3bdd368 418"sd r<TRY>, <IMMED> (SP)"
c0a4c3ba
AC
419*mips16:
420// start-sanitize-tx19
421*tx19:
422// end-sanitize-tx19
423{
424 do_store (SD_, AccessLength_DOUBLEWORD, SP, IMMED << 3, GPR[TRY]);
425}
426
f3bdd368
AC
42711110,6.IMM_10_5,5.IMM_15_11 + 11111,001,3.RY,5.IMM_4_0:EXT-RI64:16::SDSP
428"sd r<TRY>, <IMMEDIATE> (SP)"
429*mips16:
430// start-sanitize-tx19
431*tx19:
432// end-sanitize-tx19
433{
434 do_store (SD_, AccessLength_DOUBLEWORD, SP, EXTEND16 (IMMEDIATE), GPR[TRY]);
435}
436
437
c0a4c3ba
AC
438
43911111,010,8.IMMED:I64:16::SDRASP
f3bdd368 440"sd r<RAIDX>, <IMMED> (SP)"
c0a4c3ba
AC
441*mips16:
442// start-sanitize-tx19
443*tx19:
444// end-sanitize-tx19
445{
446 do_store (SD_, AccessLength_DOUBLEWORD, SP, IMMED << 3, RA);
16bd5d6e
AC
447}
448
f3bdd368
AC
44911110,6.IMM_10_5,5.IMM_15_11 + 11111,010,000,5.IMM_4_0:EXT-I64:16::SDRASP
450"sd r<RAIDX>, <IMMEDIATE> (SP)"
451*mips16:
452// start-sanitize-tx19
453*tx19:
454// end-sanitize-tx19
455{
456 do_store (SD_, AccessLength_DOUBLEWORD, SP, EXTEND16 (IMMEDIATE), RA);
457}
458
459
16bd5d6e
AC
460
461// ALU Immediate Instructions
462
463
f3bdd368
AC
46401101,3.RX,8.IMMED:RI:16::LI
465"li r<TRX>, <IMMED>"
16bd5d6e 466*mips16:
c0a4c3ba
AC
467// start-sanitize-tx19
468*tx19:
469// end-sanitize-tx19
16bd5d6e 470{
c0a4c3ba 471 do_ori (SD_, 0, TRX, IMMED);
16bd5d6e
AC
472}
473
f3bdd368
AC
47411110,6.IMM_10_5,5.IMM_15_11 + 01101,3.RX,000,5.IMM_4_0:EXT-RI:16::LI
475"li r<TRX>, <IMMEDIATE>"
476*mips16:
477// start-sanitize-tx19
478*tx19:
479// end-sanitize-tx19
480{
481 do_ori (SD_, 0, TRX, IMMEDIATE);
482}
483
484
16bd5d6e 485
f3bdd368
AC
48601000,3.RX,3.RY,0,4.IMMED:RRI-A:16::ADDIU
487"addiu r<TRY>, r<TRX>, <IMMED>"
16bd5d6e 488*mips16:
c0a4c3ba
AC
489// start-sanitize-tx19
490*tx19:
491// end-sanitize-tx19
16bd5d6e 492{
c0a4c3ba 493 do_addiu (SD_, TRX, TRY, EXTEND4 (IMMED));
16bd5d6e
AC
494}
495
f3bdd368
AC
49611110,7.IMM_10_4,4.IMM_14_11 + 01000,3.RX,3.RY,0,4.IMM_3_0:EXT-RRI-A:16::ADDIU
497"addiu r<TRY>, r<TRX>, <IMMEDIATE>"
498*mips16:
499// start-sanitize-tx19
500*tx19:
501// end-sanitize-tx19
502{
503 do_addiu (SD_, TRX, TRY, EXTEND15 (IMMEDIATE));
504}
505
506
16bd5d6e 507
c0a4c3ba 50801001,3.RX,8.IMMED:RI:16::ADDIU8
f3bdd368 509"addiu r<TRX>, <IMMED>"
16bd5d6e 510*mips16:
c0a4c3ba
AC
511// start-sanitize-tx19
512*tx19:
513// end-sanitize-tx19
16bd5d6e 514{
c0a4c3ba 515 do_addiu (SD_, TRX, TRX, EXTEND8 (IMMED));
16bd5d6e
AC
516}
517
f3bdd368
AC
51811110,6.IMM_10_5,5.IMM_15_11 + 01001,3.RX,000,5.IMM_4_0:EXT-RI:16::ADDIU8
519"addiu r<TRX>, <IMMEDIATE>"
520*mips16:
521// start-sanitize-tx19
522*tx19:
523// end-sanitize-tx19
524{
525 do_addiu (SD_, TRX, TRX, EXTEND16 (IMMEDIATE));
526}
527
528
16bd5d6e 529
c0a4c3ba 53001100,011,8.IMMED:I8:16::ADJSP
f3bdd368 531"addiu SP, <IMMED>"
16bd5d6e 532*mips16:
c0a4c3ba
AC
533// start-sanitize-tx19
534*tx19:
535// end-sanitize-tx19
16bd5d6e 536{
c0a4c3ba 537 do_addiu (SD_, SPIDX, SPIDX, EXTEND8 (IMMED) << 3);
16bd5d6e
AC
538}
539
f3bdd368
AC
54011110,6.IMM_10_5,5.IMM_15_11 + 01100,011,000,5.IMM_4_0:EXT-I8:16::ADJSP
541"addiu SP, <IMMEDIATE>"
542*mips16:
543// start-sanitize-tx19
544*tx19:
545// end-sanitize-tx19
546{
547 do_addiu (SD_, SPIDX, SPIDX, EXTEND16 (IMMEDIATE));
548}
549
550
16bd5d6e 551
c0a4c3ba 55200001,3.RX,8.IMMED:RI:16::ADDIUPC
f3bdd368 553"addiu r<TRX>, PC, <IMMED>"
16bd5d6e 554*mips16:
c0a4c3ba
AC
555// start-sanitize-tx19
556*tx19:
557// end-sanitize-tx19
16bd5d6e 558{
c0a4c3ba
AC
559 unsigned32 temp = (basepc (SD_) & ~3) + (EXTEND8 (IMMED) << 2);
560 GPR[TRX] = EXTEND32 (temp);
16bd5d6e
AC
561}
562
f3bdd368
AC
56311110,6.IMM_10_5,5.IMM_15_11 + 00001,3.RX,000,5.IMM_4_0:EXT-RI:16::ADDIUPC
564"addiu r<TRX>, PC, <IMMEDIATE>"
565*mips16:
566// start-sanitize-tx19
567*tx19:
568// end-sanitize-tx19
569{
570 unsigned32 temp = (basepc (SD_) & ~3) + EXTEND16 (IMMEDIATE);
571 GPR[TRX] = EXTEND32 (temp);
572}
573
574
16bd5d6e 575
c0a4c3ba 57600000,3.RX,8.IMMED:RI:16::ADDIUSP
f3bdd368 577"addiu r<TRX>, SP, <IMMED>"
16bd5d6e 578*mips16:
c0a4c3ba
AC
579// start-sanitize-tx19
580*tx19:
581// end-sanitize-tx19
16bd5d6e 582{
c0a4c3ba 583 do_addiu (SD_, SPIDX, TRX, EXTEND8 (IMMED) << 2);
16bd5d6e
AC
584}
585
f3bdd368
AC
58611110,6.IMM_10_5,5.IMM_15_11 + 00000,3.RX,000,5.IMM_4_0:EXT-RI:16::ADDIUSP
587"addiu r<TRX>, SP, <IMMEDIATE>"
588*mips16:
589// start-sanitize-tx19
590*tx19:
591// end-sanitize-tx19
592{
593 do_addiu (SD_, SPIDX, TRX, EXTEND16 (IMMEDIATE));
594}
595
16bd5d6e 596
f3bdd368
AC
597
59801000,3.RX,3.RY,1,4.IMMED:RRI-A:16,64::DADDIU
599"daddiu r<TRY>, r<TRX>, <IMMED>"
16bd5d6e 600*mips16:
c0a4c3ba
AC
601// start-sanitize-tx19
602*tx19:
603// end-sanitize-tx19
16bd5d6e 604{
c0a4c3ba 605 do_daddiu (SD_, TRX, TRY, EXTEND4 (IMMED));
16bd5d6e
AC
606}
607
f3bdd368
AC
60811110,7.IMM_10_4,4.IMM_14_11 + 01000,3.RX,3.RY,1,4.IMM_3_0:EXT-RRI-A:16,64::DADDIU
609"daddiu r<TRY>, r<TRX>, <IMMED>"
610*mips16:
611// start-sanitize-tx19
612*tx19:
613// end-sanitize-tx19
614{
615 do_daddiu (SD_, TRX, TRY, EXTEND15 (IMMEDIATE));
616}
617
618
16bd5d6e 619
c0a4c3ba 62011111,101,3.RY,5.IMMED:RI64:16,64::DADDIU5
f3bdd368 621"daddiu r<TRY>, <IMMED>"
16bd5d6e 622*mips16:
c0a4c3ba
AC
623// start-sanitize-tx19
624*tx19:
625// end-sanitize-tx19
16bd5d6e 626{
c0a4c3ba 627 do_daddiu (SD_, TRY, TRY, EXTEND5 (IMMED));
16bd5d6e
AC
628}
629
f3bdd368
AC
63011110,6.IMM_10_5,5.IMM_15_11 + 11111,101,3.RY,5.IMM_4_0:EXT-RI64:16,64::DADDIU5
631"daddiu r<TRY>, <IMMED>"
632*mips16:
633// start-sanitize-tx19
634*tx19:
635// end-sanitize-tx19
636{
637 do_daddiu (SD_, TRY, TRY, EXTEND5 (IMMEDIATE));
638}
639
640
16bd5d6e 641
c0a4c3ba 64211111,011,8.IMMED:I64:16,64::DADJSP
f3bdd368 643"daddiu SP, <IMMED>"
16bd5d6e 644*mips16:
c0a4c3ba
AC
645// start-sanitize-tx19
646*tx19:
647// end-sanitize-tx19
16bd5d6e 648{
c0a4c3ba 649 do_daddiu (SD_, SPIDX, SPIDX, EXTEND8 (IMMED) << 3);
16bd5d6e
AC
650}
651
f3bdd368
AC
65211110,6.IMM_10_5,5.IMM_15_11 + 11111,011,000,5.IMM_4_0:EXT-I64:16,64::DADJSP
653"daddiu SP, <IMMED>"
654*mips16:
655// start-sanitize-tx19
656*tx19:
657// end-sanitize-tx19
658{
659 do_daddiu (SD_, SPIDX, SPIDX, EXTEND16 (IMMEDIATE));
660}
661
662
16bd5d6e 663
c0a4c3ba 66411111,110,3.RY,5.IMMED:RI64:16,64::DADDIUPC
f3bdd368 665"daddiu r<TRY>, PC, <IMMED>"
16bd5d6e 666*mips16:
c0a4c3ba
AC
667// start-sanitize-tx19
668*tx19:
669// end-sanitize-tx19
16bd5d6e 670{
c0a4c3ba 671 GPR[TRY] = (basepc (SD_) & ~3) + (EXTEND5 (IMMED) << 2);
16bd5d6e
AC
672}
673
f3bdd368
AC
67411110,6.IMM_10_5,5.IMM_15_11 + 11111,110,3.RY,5.IMM_4_0:EXT-RI64:16,64::DADDIUPC
675"daddiu r<TRY>, PC, <IMMED>"
676*mips16:
677// start-sanitize-tx19
678*tx19:
679// end-sanitize-tx19
680{
681 GPR[TRY] = (basepc (SD_) & ~3) + EXTEND5 (IMMED);
682}
683
684
16bd5d6e 685
c0a4c3ba 68611111,111,3.RY,5.IMMED:RI64:16,64::DADDIUSP
f3bdd368 687"daddiu r<TRY>, SP, <IMMED>"
16bd5d6e 688*mips16:
c0a4c3ba
AC
689// start-sanitize-tx19
690*tx19:
691// end-sanitize-tx19
16bd5d6e 692{
c0a4c3ba 693 do_daddiu (SD_, SPIDX, TRY, EXTEND5 (IMMED) << 2);
16bd5d6e
AC
694}
695
f3bdd368
AC
69611110,6.IMM_10_5,5.IMM_15_11 + 11111,111,3.RY,5.IMM_4_0:EXT-RI64:16,64::DADDIUSP
697"daddiu r<TRY>, SP, <IMMED>"
698*mips16:
699// start-sanitize-tx19
700*tx19:
701// end-sanitize-tx19
702{
703 do_daddiu (SD_, SPIDX, TRY, EXTEND5 (IMMED));
704}
705
706
16bd5d6e 707
c0a4c3ba 70801010,3.RX,8.IMMED:RI:16::SLTI
f3bdd368 709"slti r<TRX>, <IMMED>"
16bd5d6e 710*mips16:
c0a4c3ba
AC
711// start-sanitize-tx19
712*tx19:
713// end-sanitize-tx19
16bd5d6e 714{
c0a4c3ba 715 do_slti (SD_, TRX, T8IDX, IMMED);
16bd5d6e
AC
716}
717
f3bdd368
AC
71811110,6.IMM_10_5,5.IMM_15_11 + 01010,3.RX,000,5.IMM_4_0:EXT-RI:16::SLTI
719"slti r<TRX>, <IMMEDIATE>"
720*mips16:
721// start-sanitize-tx19
722*tx19:
723// end-sanitize-tx19
724{
725 do_slti (SD_, TRX, T8IDX, IMMEDIATE);
726}
727
728
16bd5d6e 729
c0a4c3ba 73001011,3.RX,8.IMMED:RI:16::SLTIU
f3bdd368 731"sltiu r<TRX>, <IMMED>"
16bd5d6e 732*mips16:
c0a4c3ba
AC
733// start-sanitize-tx19
734*tx19:
735// end-sanitize-tx19
16bd5d6e 736{
c0a4c3ba 737 do_sltiu (SD_, TRX, T8IDX, IMMED);
16bd5d6e
AC
738}
739
f3bdd368
AC
74011110,6.IMM_10_5,5.IMM_15_11 + 01011,3.RX,000,5.IMM_4_0:EXT-RI:16::SLTIU
741"sltiu r<TRX>, <IMMEDIATE>"
742*mips16:
743// start-sanitize-tx19
744*tx19:
745// end-sanitize-tx19
746{
747 do_sltiu (SD_, TRX, T8IDX, IMMEDIATE);
748}
749
750
16bd5d6e 751
c0a4c3ba 75211101,3.RX,3.RY,01010:RR:16::CMP
f3bdd368 753"sltiu r<TRX>, r<TRY>"
16bd5d6e 754*mips16:
c0a4c3ba
AC
755// start-sanitize-tx19
756*tx19:
757// end-sanitize-tx19
16bd5d6e 758{
c0a4c3ba
AC
759 do_xor (SD_, TRX, TRY, T8IDX);
760}
761
762
76301110,3.RX,8.IMMED:RI:16::CMPI
f3bdd368 764"sltiu r<TRX>, <IMMED>"
c0a4c3ba
AC
765*mips16:
766// start-sanitize-tx19
767*tx19:
768// end-sanitize-tx19
769{
770 do_xori (SD_, TRX, T8IDX, IMMED);
16bd5d6e
AC
771}
772
f3bdd368
AC
77311110,6.IMM_10_5,5.IMM_15_11 + 01110,3.RX,000,5.IMM_4_0:EXT-RI:16::CMPI
774"sltiu r<TRX>, <IMMEDIATE>"
775*mips16:
776// start-sanitize-tx19
777*tx19:
778// end-sanitize-tx19
779{
780 do_xori (SD_, TRX, T8IDX, IMMEDIATE);
781}
782
783
16bd5d6e
AC
784
785// Two/Three Operand, Register-Type
786
787
f3bdd368 788
c0a4c3ba 78911100,3.RX,3.RY,3.RZ,01:RRR:16::ADDU
f3bdd368 790"addu r<TRZ>, r<TRX>, r<TRY>"
c0a4c3ba
AC
791*mips16:
792// start-sanitize-tx19
793*tx19:
794// end-sanitize-tx19
795{
796 do_addu (SD_, TRX, TRY, TRZ);
16bd5d6e
AC
797}
798
799
f3bdd368 800
c0a4c3ba 80111100,3.RX,3.RY,3.RZ,11:RRR:16::SUBU
f3bdd368 802"subu r<TRZ>, r<TRX>, r<TRY>"
16bd5d6e 803*mips16:
c0a4c3ba
AC
804// start-sanitize-tx19
805*tx19:
806// end-sanitize-tx19
16bd5d6e 807{
c0a4c3ba 808 do_subu (SD_, TRX, TRY, TRZ);
16bd5d6e
AC
809}
810
811
f3bdd368 812
c0a4c3ba 81311100,3.RX,3.RY,3.RZ,00:RRR:16,64::DADDU
f3bdd368 814"daddu r<TRZ>, r<TRX>, r<TRY>"
16bd5d6e 815*mips16:
c0a4c3ba
AC
816// start-sanitize-tx19
817*tx19:
818// end-sanitize-tx19
16bd5d6e 819{
c0a4c3ba
AC
820 do_daddu (SD_, TRX, TRY, TRZ);
821}
822
823
f3bdd368 824
c0a4c3ba 82511100,3.RX,3.RY,3.RZ,10:RRR:16,64::DSUBU
f3bdd368 826"dsubu r<TRZ>, r<TRX>, r<TRY>"
c0a4c3ba
AC
827*mips16:
828// start-sanitize-tx19
829*tx19:
830// end-sanitize-tx19
831{
832 do_dsubu (SD_, TRX, TRY, TRZ);
833}
834
835
f3bdd368 836
c0a4c3ba 83711101,3.RX,3.RY,00010:RR:16::SLT
f3bdd368 838"slt r<TRX>, r<TRY>"
c0a4c3ba
AC
839*mips16:
840// start-sanitize-tx19
841*tx19:
842// end-sanitize-tx19
843{
844 do_slt (SD_, TRX, TRY, T8IDX);
845}
846
847
f3bdd368 848
c0a4c3ba 84911101,3.RX,3.RY,00011:RR:16::SLTU
f3bdd368 850"sltu r<TRX>, r<TRY>"
c0a4c3ba
AC
851*mips16:
852// start-sanitize-tx19
853*tx19:
854// end-sanitize-tx19
855{
856 do_sltu (SD_, TRX, TRY, T8IDX);
857}
858
859
f3bdd368 860
c0a4c3ba 86111101,3.RX,3.RY,01011:RR:16::NEG
f3bdd368 862"neg r<TRX>, r<TRY>"
c0a4c3ba
AC
863*mips16:
864// start-sanitize-tx19
865*tx19:
866// end-sanitize-tx19
867{
868 do_subu (SD_, 0, TRY, TRX);
869}
870
871
f3bdd368 872
c0a4c3ba 87311101,3.RX,3.RY,01100:RR:16::AND
f3bdd368 874"and r<TRX>, r<TRY>"
c0a4c3ba
AC
875*mips16:
876// start-sanitize-tx19
877*tx19:
878// end-sanitize-tx19
879{
880 do_and (SD_, TRX, TRY, TRX);
881}
882
883
f3bdd368 884
c0a4c3ba 88511101,3.RX,3.RY,01101:RR:16::OR
f3bdd368 886"or r<TRX>, r<TRY>"
c0a4c3ba
AC
887*mips16:
888// start-sanitize-tx19
889*tx19:
890// end-sanitize-tx19
891{
892 do_or (SD_, TRX, TRY, TRX);
893}
894
895
f3bdd368 896
c0a4c3ba 89711101,3.RX,3.RY,01110:RR:16::XOR
f3bdd368 898"xor r<TRX>, r<TRY>"
c0a4c3ba
AC
899*mips16:
900// start-sanitize-tx19
901*tx19:
902// end-sanitize-tx19
903{
904 do_xor (SD_, TRX, TRY, TRX);
905}
906
907
f3bdd368 908
c0a4c3ba 90911101,3.RX,3.RY,01111:RR:16::NOT
f3bdd368 910"not r<TRX>, r<TRY>"
c0a4c3ba
AC
911*mips16:
912// start-sanitize-tx19
913*tx19:
914// end-sanitize-tx19
915{
916 do_nor (SD_, 0, TRY, TRX);
917}
918
919
f3bdd368 920
c0a4c3ba 92101100,111,3.RY,5.R32:I8_MOVR32:16::MOVR32
f3bdd368 922"move r<TRY>, r<R32>"
c0a4c3ba
AC
923*mips16:
924// start-sanitize-tx19
925*tx19:
926// end-sanitize-tx19
927{
928 do_or (SD_, R32, 0, TRY);
929}
930
931
f3bdd368 932
c0a4c3ba 93301100,101,3.R32L,2.R32H,3.RZ:I8_MOV32R:16::MOV32R
f3bdd368 934"move r<R32>, r<TRZ>"
c0a4c3ba
AC
935*mips16:
936// start-sanitize-tx19
937*tx19:
938// end-sanitize-tx19
939{
f3bdd368 940 do_or (SD_, TRZ, 0, R32);
c0a4c3ba
AC
941}
942
943
f3bdd368
AC
944
94500110,3.RX,3.RY,3.SHAMT,00:SHIFT:16::SLL
946"sll r<TRX>, r<TRY>, <SHIFT>"
c0a4c3ba
AC
947*mips16:
948// start-sanitize-tx19
949*tx19:
950// end-sanitize-tx19
951{
952 do_sll (SD_, TRY, TRX, SHIFT);
953}
954
f3bdd368
AC
95511110,5.SHAMT,0,00000 + 00110,3.RX,3.RY,000,00:EXT-SHIFT:16::SLL
956"sll r<TRX>, r<TRY>, <SHIFT>"
957*mips16:
958// start-sanitize-tx19
959*tx19:
960// end-sanitize-tx19
961{
962 do_sll (SD_, TRY, TRX, SHAMT);
963}
964
965
c0a4c3ba 966
f3bdd368
AC
96700110,3.RX,3.RY,3.SHAMT,10:SHIFT:16::SRL
968"srl r<TRX>, r<TRY>, <SHIFT>"
c0a4c3ba
AC
969*mips16:
970// start-sanitize-tx19
971*tx19:
972// end-sanitize-tx19
973{
974 do_srl (SD_, TRY, TRX, SHIFT);
975}
976
f3bdd368
AC
97711110,5.SHAMT,0,00000 + 00110,3.RX,3.RY,000,10:EXT-SHIFT:16::SRL
978"srl r<TRX>, r<TRY>, <SHIFT>"
979*mips16:
980// start-sanitize-tx19
981*tx19:
982// end-sanitize-tx19
983{
984 do_srl (SD_, TRY, TRX, SHAMT);
985}
986
c0a4c3ba 987
f3bdd368
AC
988
98900110,3.RX,3.RY,3.SHAMT,11:SHIFT:16::SRA
990"sra r<TRX>, r<TRY>, <SHIFT>"
c0a4c3ba
AC
991*mips16:
992// start-sanitize-tx19
993*tx19:
994// end-sanitize-tx19
995{
996 do_sra (SD_, TRY, TRX, SHIFT);
997}
998
f3bdd368
AC
99911110,5.SHAMT,0,00000 + 00110,3.RX,3.RY,000,11:EXT-SHIFT:16::SRA
1000"sra r<TRX>, r<TRY>, <SHIFT>"
1001*mips16:
1002// start-sanitize-tx19
1003*tx19:
1004// end-sanitize-tx19
1005{
1006 do_sra (SD_, TRY, TRX, SHAMT);
1007}
1008
1009
c0a4c3ba
AC
1010
101111101,3.RX,3.RY,00100:RR:16::SLLV
f3bdd368 1012"sllv r<TRY>, r<TRX>"
c0a4c3ba
AC
1013*mips16:
1014// start-sanitize-tx19
1015*tx19:
1016// end-sanitize-tx19
1017{
1018 do_sllv (SD_, TRX, TRY, TRY);
1019}
1020
1021
102211101,3.RX,3.RY,00110:RR:16::SRLV
f3bdd368 1023"srlv r<TRY>, r<TRX>"
c0a4c3ba
AC
1024*mips16:
1025// start-sanitize-tx19
1026*tx19:
1027// end-sanitize-tx19
1028{
1029 do_srlv (SD_, TRX, TRY, TRY);
1030}
1031
1032
103311101,3.RX,3.RY,00111:RR:16::SRAV
f3bdd368 1034"srav r<TRY>, r<TRX>"
c0a4c3ba
AC
1035*mips16:
1036// start-sanitize-tx19
1037*tx19:
1038// end-sanitize-tx19
1039{
1040 do_srav (SD_, TRX, TRY, TRY);
1041}
1042
1043
f3bdd368
AC
104400110,3.RX,3.RY,3.SHAMT,01:SHIFT:16,64::DSLL
1045"dsll r<TRY>, r<TRX>, <SHIFT>"
c0a4c3ba
AC
1046*mips16:
1047// start-sanitize-tx19
1048*tx19:
1049// end-sanitize-tx19
1050{
1051 do_dsll (SD_, 0, TRY, TRX, SHIFT);
16bd5d6e
AC
1052}
1053
f3bdd368
AC
105411110,5.SHAMT_4_0,1.S5,00000 + 00110,3.RX,3.RY,000,01:EXT-SHIFT:16,64::DSLL
1055"dsll r<TRY>, r<TRX>, <SHAMT>"
1056*mips16:
1057// start-sanitize-tx19
1058*tx19:
1059// end-sanitize-tx19
1060{
1061 do_dsll (SD_, 0, TRY, TRX, SHAMT);
1062}
16bd5d6e 1063
f3bdd368
AC
1064
1065
106611101,3.SHAMT,3.RY,01000:SHIFT64:16,64::DSRL
1067"dsrl r<TRY>, <SHIFT>"
1068*mips16:
1069// start-sanitize-tx19
1070*tx19:
1071// end-sanitize-tx19
1072{
1073 do_dsrl (SD_, 0, TRY, TRY, SHIFT);
1074}
1075
107611110,5.SHAMT_4_0,1.S5,00000 + 11101,000,3.RY,01000:EXT-SHIFT64:16,64::DSRL
1077"dsrl r<TRY>, <SHIFT>"
16bd5d6e 1078*mips16:
c0a4c3ba
AC
1079// start-sanitize-tx19
1080*tx19:
1081// end-sanitize-tx19
16bd5d6e 1082{
c0a4c3ba 1083 do_dsrl (SD_, 0, TRY, TRY, SHIFT);
16bd5d6e
AC
1084}
1085
1086
f3bdd368
AC
1087
108811101,3.SHAMT,3.RY,10011:SHIFT64:16,64::DSRA
1089"dsra r<TRY>, <SHIFT>"
1090*mips16:
1091// start-sanitize-tx19
1092*tx19:
1093// end-sanitize-tx19
1094{
1095 do_dsra (SD_, 0, TRY, TRY, SHIFT);
1096}
1097
109811110,5.SHAMT_4_0,1.S5,00000 + 11101,000,3.RY,10011:EXT-SHIFT64:16,64::DSRA
1099"dsra r<TRY>, <SHIFT>"
16bd5d6e 1100*mips16:
c0a4c3ba
AC
1101// start-sanitize-tx19
1102*tx19:
1103// end-sanitize-tx19
16bd5d6e 1104{
c0a4c3ba
AC
1105 do_dsra (SD_, 0, TRY, TRY, SHIFT);
1106}
1107
1108
f3bdd368 1109
c0a4c3ba 111011101,3.RX,3.RY,10100:RR:16,64::DSLLV
f3bdd368 1111"dsra r<TRY>, r<TRX>"
c0a4c3ba
AC
1112*mips16:
1113// start-sanitize-tx19
1114*tx19:
1115// end-sanitize-tx19
1116{
1117 do_dsllv (SD_, TRX, TRY, TRY);
1118}
1119
1120
112111101,3.RX,3.RY,10110:RR:16,64::DSRLV
f3bdd368 1122"dsrlv r<TRY>, r<TRX>"
c0a4c3ba
AC
1123*mips16:
1124// start-sanitize-tx19
1125*tx19:
1126// end-sanitize-tx19
1127{
1128 do_dsrlv (SD_, TRX, TRY, TRY);
1129}
1130
1131
113211101,3.RX,3.RY,10111:RR:16,64::DSRAV
f3bdd368 1133"dsrav r<TRY>, r<TRX>"
c0a4c3ba
AC
1134*mips16:
1135// start-sanitize-tx19
1136*tx19:
1137// end-sanitize-tx19
1138{
1139 do_dsrav (SD_, TRX, TRY, TRY);
16bd5d6e
AC
1140}
1141
1142
1143// Multiply /Divide Instructions
1144
1145
c0a4c3ba 114611101,3.RX,3.RY,11000:RR:16::MULT
f3bdd368 1147"mult r<TRX>, r<TRY>"
16bd5d6e 1148*mips16:
c0a4c3ba
AC
1149// start-sanitize-tx19
1150*tx19:
1151// end-sanitize-tx19
16bd5d6e 1152{
c0a4c3ba 1153 do_mult (SD_, TRX, TRY, 0);
16bd5d6e
AC
1154}
1155
1156
c0a4c3ba 115711101,3.RX,3.RY,11001:RR:16::MULTU
f3bdd368 1158"multu r<TRX>, r<TRY>"
16bd5d6e 1159*mips16:
c0a4c3ba
AC
1160// start-sanitize-tx19
1161*tx19:
1162// end-sanitize-tx19
16bd5d6e 1163{
c0a4c3ba 1164 do_multu (SD_, TRX, TRY, 0);
16bd5d6e
AC
1165}
1166
1167
c0a4c3ba 116811101,3.RX,3.RY,11010:RR:16::DIV
f3bdd368 1169"div r<TRX>, r<TRY>"
16bd5d6e 1170*mips16:
c0a4c3ba
AC
1171// start-sanitize-tx19
1172*tx19:
1173// end-sanitize-tx19
16bd5d6e 1174{
c0a4c3ba 1175 do_div (SD_, TRX, TRY);
16bd5d6e
AC
1176}
1177
1178
c0a4c3ba 117911101,3.RX,3.RY,11011:RR:16::DIVU
f3bdd368 1180"divu r<TRX>, r<TRY>"
16bd5d6e 1181*mips16:
c0a4c3ba
AC
1182// start-sanitize-tx19
1183*tx19:
1184// end-sanitize-tx19
16bd5d6e 1185{
c0a4c3ba 1186 do_divu (SD_, TRX, TRY);
16bd5d6e
AC
1187}
1188
1189
c0a4c3ba 119011101,3.RX,000,10000:RR:16::MFHI
f3bdd368 1191"mfhi r<TRX>"
16bd5d6e 1192*mips16:
c0a4c3ba
AC
1193// start-sanitize-tx19
1194*tx19:
1195// end-sanitize-tx19
16bd5d6e 1196{
c0a4c3ba 1197 do_mfhi (SD_, TRX);
16bd5d6e
AC
1198}
1199
1200
c0a4c3ba 120111101,3.RX,000,10010:RR:16::MFLO
f3bdd368 1202"mflo r<TRX>"
16bd5d6e 1203*mips16:
c0a4c3ba
AC
1204// start-sanitize-tx19
1205*tx19:
1206// end-sanitize-tx19
16bd5d6e 1207{
c0a4c3ba 1208 do_mflo (SD_, TRX);
16bd5d6e
AC
1209}
1210
1211
c0a4c3ba 121211101,3.RX,3.RY,11100:RR:16,64::DMULT
f3bdd368 1213"dmult r<TRX>, r<TRY>"
16bd5d6e 1214*mips16:
c0a4c3ba
AC
1215// start-sanitize-tx19
1216*tx19:
1217// end-sanitize-tx19
16bd5d6e 1218{
c0a4c3ba 1219 do_dmult (SD_, TRX, TRY);
16bd5d6e
AC
1220}
1221
1222
c0a4c3ba 122311101,3.RX,3.RY,11101:RR:16,64::DMULTU
f3bdd368 1224"dmultu r<TRX>, r<TRY>"
16bd5d6e 1225*mips16:
c0a4c3ba
AC
1226// start-sanitize-tx19
1227*tx19:
1228// end-sanitize-tx19
16bd5d6e 1229{
c0a4c3ba 1230 do_dmultu (SD_, TRX, TRY);
16bd5d6e
AC
1231}
1232
1233
c0a4c3ba 123411101,3.RX,3.RY,11110:RR:16,64::DDIV
f3bdd368 1235"ddiv r<TRX>, r<TRY>"
16bd5d6e 1236*mips16:
c0a4c3ba
AC
1237// start-sanitize-tx19
1238*tx19:
1239// end-sanitize-tx19
16bd5d6e 1240{
c0a4c3ba 1241 do_ddiv (SD_, TRX, TRY);
16bd5d6e
AC
1242}
1243
1244
c0a4c3ba 124511101,3.RX,3.RY,11111:RR:16,64::DDIVU
f3bdd368 1246"ddivu r<TRX>, r<TRY>"
16bd5d6e 1247*mips16:
c0a4c3ba
AC
1248// start-sanitize-tx19
1249*tx19:
1250// end-sanitize-tx19
16bd5d6e 1251{
c0a4c3ba 1252 do_ddivu (SD_, TRX, TRY);
16bd5d6e
AC
1253}
1254
1255
1256// Jump and Branch Instructions
1257
1258
c0a4c3ba
AC
1259
1260// Issue instruction in delay slot of branch
f3bdd368 1261:function:::address_word:delayslot16:address_word nia, address_word target
c0a4c3ba
AC
1262{
1263 instruction_word delay_insn;
1264 sim_events_slip (SD, 1);
1265 DSPC = CIA; /* save current PC somewhere */
c0a4c3ba 1266 STATE |= simDELAYSLOT;
f3bdd368
AC
1267 delay_insn = IMEM16 (nia); /* NOTE: mips16 */
1268 idecode_issue (CPU_, delay_insn, (nia));
c0a4c3ba
AC
1269 STATE &= ~simDELAYSLOT;
1270 return target;
1271}
1272
1273// compute basepc dependant on us being in a delay slot
1274:function:::address_word:basepc:
1275{
1276 if (STATE & simDELAYSLOT)
16bd5d6e 1277 {
c0a4c3ba 1278 return DSPC; /* return saved address of preceeding jmp */
16bd5d6e
AC
1279 }
1280 else
1281 {
c0a4c3ba 1282 return CIA;
16bd5d6e 1283 }
16bd5d6e
AC
1284}
1285
1286
c0a4c3ba 1287// JAL
f3bdd368
AC
128800011,0,5.IMM_20_16,5.IMM_25_21 + 16.IMMED_15_0:JAL:16::JAL
1289"jal <IMMEDIATE>"
16bd5d6e 1290*mips16:
c0a4c3ba
AC
1291// start-sanitize-tx19
1292*tx19:
1293// end-sanitize-tx19
16bd5d6e 1294{
f3bdd368
AC
1295 address_word region = (NIA & MASK (63, 28));
1296 RA = NIA + 2; /* skip 16 bit delayslot insn */
1297 NIA = delayslot16 (SD_, NIA, (region | (IMMEDIATE << 2))) | 1;
16bd5d6e
AC
1298}
1299
1300
f3bdd368
AC
1301
1302// JALX - 32 and 16 bit versions.
1303
1304011101,26.IMMED:JALX:32::JALX32
1305"jalx <IMMED>"
1306*r3900:
1307// start-sanitize-tx19
1308*tx19:
1309// end-sanitize-tx19
1310{
1311 address_word region = (NIA & MASK (63, 28));
1312 RA = NIA + 4; /* skip 32 bit delayslot insn */
1313 NIA = delayslot32 (SD_, (region | (IMMED << 2)) | 1);
1314}
1315
131600011,1,5.IMM_20_16,5.IMM_25_21 + 16.IMMED_15_0:JALX:16::JALX16
1317"jalx <IMMEDIATE>"
16bd5d6e 1318*mips16:
c0a4c3ba
AC
1319// start-sanitize-tx19
1320*tx19:
1321// end-sanitize-tx19
16bd5d6e 1322{
f3bdd368
AC
1323 address_word region = (NIA & MASK (63, 28));
1324 RA = NIA + 2; /* 16 bit INSN */
1325 NIA = delayslot16 (SD_, NIA, (region | (IMMEDIATE << 2)) & ~1);
16bd5d6e
AC
1326}
1327
1328
f3bdd368 1329
c0a4c3ba 133011101,3.RX,000,00000:RR:16::JR
f3bdd368 1331"jr r<TRX>"
16bd5d6e 1332*mips16:
c0a4c3ba
AC
1333// start-sanitize-tx19
1334*tx19:
1335// end-sanitize-tx19
16bd5d6e 1336{
f3bdd368 1337 NIA = delayslot16 (SD_, NIA, GPR[TRX]);
16bd5d6e
AC
1338}
1339
1340
c0a4c3ba 134111101,000,001,00000:RR:16::JRRA
f3bdd368 1342"jrra"
16bd5d6e 1343*mips16:
c0a4c3ba
AC
1344// start-sanitize-tx19
1345*tx19:
1346// end-sanitize-tx19
16bd5d6e 1347{
f3bdd368 1348 NIA = delayslot16 (SD_, NIA, RA);
16bd5d6e
AC
1349}
1350
1351
f3bdd368 1352
c0a4c3ba 135311101,3.RX,010,00000:RR:16::JALR
f3bdd368 1354"jalr r<TRX>"
c0a4c3ba
AC
1355*mips16:
1356// start-sanitize-tx19
1357*tx19:
1358// end-sanitize-tx19
1359{
1360 RA = NIA + 2;
f3bdd368 1361 NIA = delayslot16 (SD_, NIA, GPR[TRX]);
c0a4c3ba 1362}
16bd5d6e
AC
1363
1364
f3bdd368 1365
c0a4c3ba 136600100,3.RX,8.IMMED:RI:16::BEQZ
f3bdd368 1367"beqz r<TRX>, <IMMED>"
c0a4c3ba
AC
1368*mips16:
1369// start-sanitize-tx19
1370*tx19:
1371// end-sanitize-tx19
1372{
1373 if (GPR[RX] == 0)
f3bdd368 1374 NIA = (NIA + (EXTEND8 (IMMED) << 1));
c0a4c3ba
AC
1375}
1376
f3bdd368
AC
137711110,6.IMM_10_5,5.IMM_15_11 + 00100,3.RX,000,5.IMM_4_0:EXT-RI:16::BEQZ
1378"beqz r<TRX>, <IMMEDIATE>"
1379*mips16:
1380// start-sanitize-tx19
1381*tx19:
1382// end-sanitize-tx19
1383{
1384 if (GPR[RX] == 0)
1385 NIA = (NIA + EXTEND16 (IMMEDIATE));
1386}
1387
1388
c0a4c3ba
AC
1389
139000101,3.RX,8.IMMED:RI:16::BNEZ
f3bdd368 1391"bnez r<TRX>, <IMMED>"
c0a4c3ba
AC
1392*mips16:
1393// start-sanitize-tx19
1394*tx19:
1395// end-sanitize-tx19
1396{
1397 if (GPR[RX] != 0)
f3bdd368 1398 NIA = (NIA + (EXTEND8 (IMMED) << 1));
c0a4c3ba
AC
1399}
1400
f3bdd368
AC
140111110,6.IMM_10_5,5.IMM_15_11 + 00101,3.RX,000,5.IMM_4_0:EXT-RI:16::BNEZ
1402"bnez r<TRX>, <IMMEDIATE>"
1403*mips16:
1404// start-sanitize-tx19
1405*tx19:
1406// end-sanitize-tx19
1407{
1408 if (GPR[RX] != 0)
1409 NIA = (NIA + EXTEND16 (IMMEDIATE));
1410}
1411
1412
c0a4c3ba
AC
1413
141401100,000,8.IMMED:I8:16::BTEQZ
f3bdd368 1415"bteqz <IMMED>"
c0a4c3ba
AC
1416*mips16:
1417// start-sanitize-tx19
1418*tx19:
1419// end-sanitize-tx19
1420{
1421 if (T8 == 0)
f3bdd368 1422 NIA = (NIA + (EXTEND8 (IMMED) << 1));
c0a4c3ba
AC
1423}
1424
f3bdd368
AC
142511110,6.IMM_10_5,5.IMM_15_11 + 01100,000,000,5.IMM_4_0:EXT-I8:16::BTEQZ
1426"bteqz <IMMEDIATE>"
1427*mips16:
1428// start-sanitize-tx19
1429*tx19:
1430// end-sanitize-tx19
1431{
1432 if (T8 == 0)
1433 NIA = (NIA + EXTEND16 (IMMEDIATE));
1434}
1435
1436
c0a4c3ba
AC
1437
143801100,001,8.IMMED:I8:16::BTNEZ
f3bdd368
AC
1439"btnez <IMMED>"
1440*mips16:
1441// start-sanitize-tx19
1442*tx19:
1443// end-sanitize-tx19
1444{
1445 if (T8 != 0)
1446 NIA = (NIA + (EXTEND8 (IMMED) << 1));
1447}
1448
144911110,6.IMM_10_5,5.IMM_15_11 + 01100,001,000,5.IMM_4_0:EXT-I8:16::BTNEZ
1450"btnez <IMMEDIATE>"
16bd5d6e 1451*mips16:
c0a4c3ba
AC
1452// start-sanitize-tx19
1453*tx19:
1454// end-sanitize-tx19
16bd5d6e 1455{
c0a4c3ba 1456 if (T8 != 0)
f3bdd368 1457 NIA = (NIA + EXTEND16 (IMMEDIATE));
16bd5d6e
AC
1458}
1459
1460
f3bdd368 1461
c0a4c3ba 146200010,11.IMMED:I:16::B
f3bdd368 1463"b <IMMED>"
16bd5d6e 1464*mips16:
c0a4c3ba
AC
1465// start-sanitize-tx19
1466*tx19:
1467// end-sanitize-tx19
16bd5d6e 1468{
f3bdd368 1469 NIA = (NIA + (EXTEND8 (IMMED) << 1));
16bd5d6e
AC
1470}
1471
f3bdd368
AC
147211110,6.IMM_10_5,5.IMM_15_11 + 00010,6.0,5.IMM_4_0:EXT-I:16::B
1473"b <IMMEDIATE>"
1474*mips16:
1475// start-sanitize-tx19
1476*tx19:
1477// end-sanitize-tx19
1478{
1479 NIA = (NIA + EXTEND16 (IMMEDIATE));
1480}
1481
1482
c0a4c3ba
AC
1483
1484// Special Instructions
1485
1486
1487// See the front of the mips16 doc
1488// -> FIXME need this for most instructions
f3bdd368
AC
1489//// 11110,eeeeeeeeeee:I:16::EXTEND
1490//// *mips16:
1491//// // start-sanitize-tx19
1492//// *tx19:
1493//// // end-sanitize-tx19
c0a4c3ba
AC
1494
1495
1496// 11101,3.RX,3.RY,00101:RR:16::BREAK
1497// *mips16:
1498// // start-sanitize-tx19
1499// *tx19:
1500// // end-sanitize-tx19
This page took 0.127198 seconds and 4 git commands to generate.