OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [tags/] [VER_5_3/] [gdb-5.3/] [sim/] [d30v/] [d30v-insns] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1181 sfurman
# OBSOLETE //  -*- C -*-
2
# OBSOLETE //  Mitsubishi Electric Corp. D30V Simulator.
3
# OBSOLETE //  Copyright (C) 1997, Free Software Foundation, Inc.
4
# OBSOLETE //  Contributed by Cygnus Solutions Inc.
5
# OBSOLETE //
6
# OBSOLETE //  This file is part of GDB, the GNU debugger.
7
# OBSOLETE //
8
# OBSOLETE //  This program is free software; you can redistribute it and/or modify
9
# OBSOLETE //  it under the terms of the GNU General Public License as published by
10
# OBSOLETE //  the Free Software Foundation; either version 2 of the License, or
11
# OBSOLETE //  (at your option) any later version.
12
# OBSOLETE //
13
# OBSOLETE //  This program is distributed in the hope that it will be useful,
14
# OBSOLETE //  but WITHOUT ANY WARRANTY; without even the implied warranty of
15
# OBSOLETE //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
# OBSOLETE //  GNU General Public License for more details.
17
# OBSOLETE //
18
# OBSOLETE //  You should have received a copy of the GNU General Public License
19
# OBSOLETE //  along with this program; if not, write to the Free Software
20
# OBSOLETE //  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
21
# OBSOLETE //
22
# OBSOLETE
23
# OBSOLETE
24
# OBSOLETE define( _BRA,  `1.*,CCC,000')
25
# OBSOLETE define( _LOGIC, `1.*,CCC,001')
26
# OBSOLETE define( _IMEM, `1.*,CCC,010')
27
# OBSOLETE define( _IALU1, `1.*,CCC,100')
28
# OBSOLETE define(_IALU2, `1.*,CCC,101')
29
# OBSOLETE
30
# OBSOLETE
31
# OBSOLETE
32
# OBSOLETE define(_IMM6, `6.IMM_6S')
33
# OBSOLETE define(_IMM12, `12.IMM_12S')
34
# OBSOLETE define(_IMM18, `18.IMM_18S')
35
# OBSOLETE define(_IMM32, `6.IMM_6L,*,000,8.IMM_8L,00,18.IMM_18L')
36
# OBSOLETE
37
# OBSOLETE
38
# OBSOLETE
39
# OBSOLETE // The following is called when ever an illegal instruction is
40
# OBSOLETE // encountered
41
# OBSOLETE ::internal::illegal
42
# OBSOLETE      sim_io_eprintf (sd, "illegal instruction at 0x%lx\n", (long) cia);
43
# OBSOLETE      sim_engine_halt (SD, CPU, NULL, cia, sim_signalled, SIM_SIGILL);
44
# OBSOLETE
45
# OBSOLETE // The following is called when ever an instruction in the wrong
46
# OBSOLETE // slot is encountered.
47
# OBSOLETE ::internal::wrong_slot
48
# OBSOLETE      sim_io_eprintf (sd, "wrong slot at 0x%lx\n", (long) cia);
49
# OBSOLETE      sim_engine_halt (SD, CPU, NULL, cia, sim_signalled, SIM_SIGILL);
50
# OBSOLETE
51
# OBSOLETE
52
# OBSOLETE
53
# OBSOLETE // Something illegal that can be used to contact the simulator emul
54
# OBSOLETE // library.
55
# OBSOLETE define(_EMUL, `1.*,CCC,111')
56
# OBSOLETE
57
# OBSOLETE void::function::do_emul:int imm
58
# OBSOLETE      /* temp hack - later replace with real interface */
59
# OBSOLETE      enum {
60
# OBSOLETE        param1 = 2, param2, param3, param4
61
# OBSOLETE      };
62
# OBSOLETE      switch (imm) {
63
# OBSOLETE      case 0:
64
# OBSOLETE        {
65
# OBSOLETE          sim_engine_abort (SD, CPU, cia, "UNIX call emulation unsupported");
66
# OBSOLETE          break;
67
# OBSOLETE        }
68
# OBSOLETE      case 1:
69
# OBSOLETE        /* Trap 1 - prints a string */
70
# OBSOLETE        {
71
# OBSOLETE          address_word str = GPR[param1];
72
# OBSOLETE          char chr;
73
# OBSOLETE          while (1) {
74
# OBSOLETE            chr = MEM (unsigned, str, 1);
75
# OBSOLETE          if (chr == '\0') break;
76
# OBSOLETE            sim_io_write_stdout (sd, &chr, sizeof chr);
77
# OBSOLETE            str++;
78
# OBSOLETE          }
79
# OBSOLETE          break;
80
# OBSOLETE        }
81
# OBSOLETE      case 3:
82
# OBSOLETE        /* Trap 3 - writes a character */
83
# OBSOLETE        {
84
# OBSOLETE          char chr = GPR[param1];
85
# OBSOLETE          sim_io_write_stdout (sd, &chr, sizeof chr);
86
# OBSOLETE          break;
87
# OBSOLETE        }
88
# OBSOLETE      case 4:
89
# OBSOLETE        /* Trap 4 exits with status in [param1] */
90
# OBSOLETE        {
91
# OBSOLETE          sim_engine_halt (SD, CPU, NULL, cia, sim_exited, GPR[param1]);
92
# OBSOLETE          break;
93
# OBSOLETE        }
94
# OBSOLETE      case 5:
95
# OBSOLETE        /* Trap 5 breakpoints.  If the breakpoint system knows about this, it
96
# OBSOLETE           won't return.  Otherwise, we fall through to treat this as an
97
# OBSOLETE           unknown instruction.  */
98
# OBSOLETE        {
99
# OBSOLETE          sim_handle_breakpoint (SD, CPU, cia);
100
# OBSOLETE        /* Fall through to default case.*/
101
# OBSOLETE        }
102
# OBSOLETE      default:
103
# OBSOLETE        sim_engine_abort (SD, CPU, cia, "Unknown monitor call %d", imm);
104
# OBSOLETE      }
105
# OBSOLETE
106
# OBSOLETE _EMUL,00000,00,6.*,6.*,IMM_6S:EMUL:short,emul:iu,mu:EMUL
107
# OBSOLETE "syscall "
108
# OBSOLETE      do_emul (_SD, imm);
109
# OBSOLETE _BRA,00000,00,6.**,6.**,_IMM32:BRA:long:iu,mu:EMUL long
110
# OBSOLETE "syscall "
111
# OBSOLETE      do_emul (_SD, imm);
112
# OBSOLETE
113
# OBSOLETE // ABS
114
# OBSOLETE
115
# OBSOLETE _IALU1,01000,00,6.RA,6.RB,6.**:IALU1:short:iu,mu:ABS
116
# OBSOLETE "abs r, r"
117
# OBSOLETE      WRITE32_QUEUE (Ra, abs(Rb));
118
# OBSOLETE
119
# OBSOLETE
120
# OBSOLETE
121
# OBSOLETE // ADD
122
# OBSOLETE
123
# OBSOLETE void::function::do_add:unsigned32 *ra, unsigned32 rb, unsigned32 imm
124
# OBSOLETE      ALU_BEGIN(rb);
125
# OBSOLETE      ALU_ADDC(imm);
126
# OBSOLETE      ALU_END(ra);
127
# OBSOLETE
128
# OBSOLETE _IALU1,00000,00,6.RA,6.RB,6.RC:IALU1:short:iu,mu:ADD
129
# OBSOLETE "add r, r, r"
130
# OBSOLETE      do_add (_SD, Ra, Rb, Rc);
131
# OBSOLETE _IALU1,00000,10,6.RA,6.RB,_IMM6:IALU1:short:iu,mu:ADD imm
132
# OBSOLETE "add r, r, "
133
# OBSOLETE      do_add (_SD, Ra, Rb, imm);
134
# OBSOLETE _IALU1,00000,10,6.RA,6.RB,_IMM32:IALU1:long:iu,mu:ADD imm long
135
# OBSOLETE "add r, r, "
136
# OBSOLETE      do_add (_SD, Ra, Rb, imm);
137
# OBSOLETE
138
# OBSOLETE
139
# OBSOLETE
140
# OBSOLETE // ADD2H
141
# OBSOLETE
142
# OBSOLETE void::function::do_add2h:signed32 *ra, signed32 rb, signed32 imm
143
# OBSOLETE      unsigned16 ah2 = VH2_4(rb) + VH2_4(imm);
144
# OBSOLETE      unsigned16 al2 = VL2_4(rb) + VL2_4(imm);
145
# OBSOLETE      WRITE32_QUEUE (ra, (ah2 << 16) | al2);
146
# OBSOLETE
147
# OBSOLETE _IALU1,00001,00,6.RA,6.RB,6.RC:IALU1:short:iu,mu:ADD2H
148
# OBSOLETE "add2h r, r, r"
149
# OBSOLETE      do_add2h (_SD, Ra, Rb, Rc);
150
# OBSOLETE _IALU1,00001,10,6.RA,6.RB,_IMM6:IALU1:short:iu,mu:ADD2H imm
151
# OBSOLETE "add2h r, r, "
152
# OBSOLETE      do_add2h (_SD, Ra, Rb, immHL);
153
# OBSOLETE _IALU1,00001,10,6.RA,6.RB,_IMM32:IALU1:long:iu,mu:ADD2H imm long
154
# OBSOLETE "add2h r, r, "
155
# OBSOLETE      do_add2h (_SD, Ra, Rb, imm);
156
# OBSOLETE
157
# OBSOLETE
158
# OBSOLETE
159
# OBSOLETE // ADDC
160
# OBSOLETE
161
# OBSOLETE void::function::do_addc:unsigned32 *ra, unsigned32 rb, unsigned32 imm
162
# OBSOLETE      ALU_BEGIN(rb);
163
# OBSOLETE      ALU_ADDC_C(imm, ALU_CARRY);
164
# OBSOLETE      ALU_END(ra);
165
# OBSOLETE
166
# OBSOLETE _IALU1,00100,00,6.RA,6.RB,6.RC:IALU1:short:iu,mu:ADDC
167
# OBSOLETE "addc r, r, r"
168
# OBSOLETE      do_addc (_SD, Ra, Rb, Rc);
169
# OBSOLETE _IALU1,00100,10,6.RA,6.RB,_IMM6:IALU1:short:iu,mu:ADDC imm
170
# OBSOLETE "addc r, r, "
171
# OBSOLETE      do_addc (_SD, Ra, Rb, imm);
172
# OBSOLETE _IALU1,00100,10,6.RA,6.RB,_IMM32:IALU1:long:iu,mu:ADDC imm long
173
# OBSOLETE "addc r, r, "
174
# OBSOLETE      do_addc (_SD, Ra, Rb, imm);
175
# OBSOLETE
176
# OBSOLETE
177
# OBSOLETE
178
# OBSOLETE // ADDHppp
179
# OBSOLETE
180
# OBSOLETE void::function::do_addh_ppp:int ppp, unsigned32 *ra, unsigned32 rb, unsigned32 src
181
# OBSOLETE      switch (ppp) {
182
# OBSOLETE      case 0x0: /* LLL */
183
# OBSOLETE        {
184
# OBSOLETE        ALU16_BEGIN(VL2_4(rb));
185
# OBSOLETE        ALU16_ADDC(VL2_4(src));
186
# OBSOLETE        ALU16_END(ra, 0);
187
# OBSOLETE        }
188
# OBSOLETE        break;
189
# OBSOLETE      case 0x1: /* LLH */
190
# OBSOLETE        {
191
# OBSOLETE        ALU16_BEGIN(VL2_4(rb));
192
# OBSOLETE        ALU16_ADDC(VH2_4(src));
193
# OBSOLETE        ALU16_END(ra, 0);
194
# OBSOLETE        }
195
# OBSOLETE        break;
196
# OBSOLETE      case 0x2: /* LHL */
197
# OBSOLETE        {
198
# OBSOLETE        ALU16_BEGIN(VH2_4(rb));
199
# OBSOLETE        ALU16_ADDC(VL2_4(src));
200
# OBSOLETE        ALU16_END(ra, 0);
201
# OBSOLETE        }
202
# OBSOLETE        break;
203
# OBSOLETE      case 0x3: /* LHH */
204
# OBSOLETE        {
205
# OBSOLETE        ALU16_BEGIN(VH2_4(rb));
206
# OBSOLETE        ALU16_ADDC(VH2_4(src));
207
# OBSOLETE        ALU16_END(ra, 0);
208
# OBSOLETE        }
209
# OBSOLETE        break;
210
# OBSOLETE      case 0x4: /* HLL */
211
# OBSOLETE        {
212
# OBSOLETE        ALU16_BEGIN(VL2_4(rb));
213
# OBSOLETE        ALU16_ADDC(VL2_4(src));
214
# OBSOLETE        ALU16_END(ra, 1);
215
# OBSOLETE        }
216
# OBSOLETE        break;
217
# OBSOLETE      case 0x5: /* HLH */
218
# OBSOLETE        {
219
# OBSOLETE        ALU16_BEGIN(VL2_4(rb));
220
# OBSOLETE        ALU16_ADDC(VH2_4(src));
221
# OBSOLETE        ALU16_END(ra, 1);
222
# OBSOLETE        }
223
# OBSOLETE        break;
224
# OBSOLETE      case 0x6: /* HHL */
225
# OBSOLETE        {
226
# OBSOLETE        ALU16_BEGIN(VH2_4(rb));
227
# OBSOLETE        ALU16_ADDC(VL2_4(src));
228
# OBSOLETE        ALU16_END(ra, 1);
229
# OBSOLETE        }
230
# OBSOLETE        break;
231
# OBSOLETE      case 0x7: /* HHH */
232
# OBSOLETE        {
233
# OBSOLETE        ALU16_BEGIN(VH2_4(rb));
234
# OBSOLETE        ALU16_ADDC(VH2_4(src));
235
# OBSOLETE        ALU16_END(ra, 1);
236
# OBSOLETE        }
237
# OBSOLETE        break;
238
# OBSOLETE      default:
239
# OBSOLETE        sim_engine_abort (SD, CPU, cia, "do_addh_ppp - internal error - bad switch");
240
# OBSOLETE      }
241
# OBSOLETE ::%s::ppp:int ppp
242
# OBSOLETE      switch (ppp)
243
# OBSOLETE        {
244
# OBSOLETE        case 0x0: return "lll";
245
# OBSOLETE        case 0x1: return "llh";
246
# OBSOLETE        case 0x2: return "lhl";
247
# OBSOLETE        case 0x3: return "lhh";
248
# OBSOLETE        case 0x4: return "hll";
249
# OBSOLETE        case 0x5: return "hlh";
250
# OBSOLETE        case 0x6: return "hhl";
251
# OBSOLETE        case 0x7: return "hhh";
252
# OBSOLETE        default: return "?";
253
# OBSOLETE        }
254
# OBSOLETE
255
# OBSOLETE _IALU1,10,ppp,00,6.RA,6.RB,6.RC:IALU1:short:iu,mu:ADDHppp
256
# OBSOLETE "addh%s r, r, r"
257
# OBSOLETE      do_addh_ppp(_SD, ppp, Ra, Rb, Rc);
258
# OBSOLETE _IALU1,10,ppp,10,6.RA,6.RB,_IMM6:IALU1:short:iu,mu:ADDHppp imm
259
# OBSOLETE "addh%s r, r, "
260
# OBSOLETE      do_addh_ppp(_SD, ppp, Ra, Rb, immHL);
261
# OBSOLETE _IALU1,10,ppp,10,6.RA,6.RB,_IMM32:IALU1:long:iu,mu:ADDHppp imm long
262
# OBSOLETE "addh%s r, r, "
263
# OBSOLETE      do_addh_ppp(_SD, ppp, Ra, Rb, imm);
264
# OBSOLETE
265
# OBSOLETE
266
# OBSOLETE
267
# OBSOLETE // ADDS
268
# OBSOLETE
269
# OBSOLETE void::function::do_adds:unsigned32 *ra, unsigned32 rb, unsigned32 imm
270
# OBSOLETE      ALU_BEGIN(rb);
271
# OBSOLETE      ALU_ADDC(EXTRACTED32(imm, 0, 0));
272
# OBSOLETE      ALU_END(ra);
273
# OBSOLETE
274
# OBSOLETE _IALU1,00110,00,6.RA,6.RB,6.RC:IALU1:short:iu,mu:ADDS
275
# OBSOLETE "adds r, r, r"
276
# OBSOLETE      do_adds (_SD, Ra, Rb, Rc);
277
# OBSOLETE _IALU1,00110,10,6.RA,6.RB,_IMM6:IALU1:short:iu,mu:ADDS imm
278
# OBSOLETE "adds r, r, "
279
# OBSOLETE      do_adds (_SD, Ra, Rb, imm);
280
# OBSOLETE _IALU1,00110,10,6.RA,6.RB,_IMM32:IALU1:long:iu,mu:ADDS imm long
281
# OBSOLETE "adds r, r, "
282
# OBSOLETE      do_adds (_SD, Ra, Rb, imm);
283
# OBSOLETE
284
# OBSOLETE
285
# OBSOLETE
286
# OBSOLETE // ADDS2H
287
# OBSOLETE
288
# OBSOLETE void::function::do_adds2h:unsigned32 *ra, unsigned32 rb, unsigned32 immHL
289
# OBSOLETE      unsigned16 high = VH2_4(rb) + EXTRACTED32(immHL, 0, 0);
290
# OBSOLETE      unsigned16 low = VL2_4(rb) + EXTRACTED32(immHL, 16, 16);
291
# OBSOLETE      WRITE32_QUEUE (ra, (high << 16) | low);
292
# OBSOLETE
293
# OBSOLETE _IALU1,00111,00,6.RA,6.RB,6.RC:IALU1:short:iu,mu:ADDS2H
294
# OBSOLETE "adds2h r, r, r"
295
# OBSOLETE      do_adds2h (_SD, Ra, Rb, Rc);
296
# OBSOLETE _IALU1,00111,10,6.RA,6.RB,_IMM6:IALU1:short:iu,mu:ADDS2H imm
297
# OBSOLETE "adds2h r, r, "
298
# OBSOLETE      do_adds2h (_SD, Ra, Rb, immHL);
299
# OBSOLETE _IALU1,00111,10,6.RA,6.RB,_IMM32:IALU1:long:iu,mu:ADDS2H imm long
300
# OBSOLETE "adds2h r, r, "
301
# OBSOLETE      do_adds2h (_SD, Ra, Rb, imm);
302
# OBSOLETE
303
# OBSOLETE
304
# OBSOLETE
305
# OBSOLETE // AND
306
# OBSOLETE
307
# OBSOLETE _LOGIC,11000,00,6.RA,6.RB,6.RC:LOGIC:short:iu,mu:AND
308
# OBSOLETE "and r, r, r"
309
# OBSOLETE      WRITE32_QUEUE (Ra, Rb & Rc);
310
# OBSOLETE _LOGIC,11000,10,6.RA,6.RB,_IMM6:LOGIC:short:iu,mu:AND imm
311
# OBSOLETE "and r, r, "
312
# OBSOLETE      WRITE32_QUEUE (Ra, Rb & imm);
313
# OBSOLETE _LOGIC,11000,10,6.RA,6.RB,_IMM32:LOGIC:long:iu,mu:AND imm long
314
# OBSOLETE "and r, r, "
315
# OBSOLETE      WRITE32_QUEUE (Ra, Rb & imm);
316
# OBSOLETE
317
# OBSOLETE
318
# OBSOLETE // ANDFG
319
# OBSOLETE
320
# OBSOLETE _LOGIC,01000,00,***,3.FA,***,3.FB,***,3.FC:LOGIC:short:iu,mu:Logical AND Flags
321
# OBSOLETE "andfg f, f, f"
322
# OBSOLETE      PSW_FLAG_SET_QUEUE(FA, PSW_FLAG_VAL(FB) & PSW_FLAG_VAL(FC));
323
# OBSOLETE _LOGIC,01000,10,***,3.FA,***,3.FB,_IMM6:LOGIC:short:iu,mu:Logical AND Flags imm
324
# OBSOLETE "andfg f, f, "
325
# OBSOLETE      PSW_FLAG_SET_QUEUE(FA, PSW_FLAG_VAL(FB) & (imm_6 & 1));
326
# OBSOLETE
327
# OBSOLETE
328
# OBSOLETE
329
# OBSOLETE // AVG
330
# OBSOLETE
331
# OBSOLETE void::function::do_avg:unsigned32 *ra, unsigned32 rb, unsigned32 imm
332
# OBSOLETE      WRITE32_QUEUE (ra, ((signed64)(signed32)rb + (signed64)(signed32)imm + 1) >> 1);
333
# OBSOLETE
334
# OBSOLETE _IALU1,01010,00,6.RA,6.RB,6.RC:IALU1:short:iu,mu:AVG
335
# OBSOLETE "avg r, r, r"
336
# OBSOLETE      do_avg (_SD, Ra, Rb, Rc);
337
# OBSOLETE _IALU1,01010,10,6.RA,6.RB,_IMM6:IALU1:short:iu,mu:AVG imm
338
# OBSOLETE "avg r, r, "
339
# OBSOLETE      do_avg (_SD, Ra, Rb, imm);
340
# OBSOLETE _IALU1,01010,10,6.RA,6.RB,_IMM32:IALU1:long:iu,mu:AVG imm long
341
# OBSOLETE "avg r, r, "
342
# OBSOLETE      do_avg (_SD, Ra, Rb, imm);
343
# OBSOLETE
344
# OBSOLETE
345
# OBSOLETE
346
# OBSOLETE // AVG2H
347
# OBSOLETE
348
# OBSOLETE void::function::do_avg2h:unsigned32 *ra, unsigned32 rb, unsigned32 imm
349
# OBSOLETE      unsigned16 high = ((signed32)(signed16)VH2_4(rb) + (signed32)(signed16)VH2_4(imm) + 1) >> 1;
350
# OBSOLETE      unsigned16 low  = ((signed32)(signed16)VL2_4(rb) + (signed32)(signed16)VL2_4(imm) + 1) >> 1;
351
# OBSOLETE      WRITE32_QUEUE (ra, (high << 16) | low);
352
# OBSOLETE
353
# OBSOLETE _IALU1,01011,00,6.RA,6.RB,6.RC:IALU1:short:iu,mu:AVG2H
354
# OBSOLETE "avg2h r, r, r"
355
# OBSOLETE      do_avg2h (_SD, Ra, Rb, Rc);
356
# OBSOLETE _IALU1,01011,10,6.RA,6.RB,_IMM6:IALU1:short:iu,mu:AVG2H imm
357
# OBSOLETE "avg2h r, r, "
358
# OBSOLETE      do_avg2h (_SD, Ra, Rb, immHL);
359
# OBSOLETE _IALU1,01011,10,6.RA,6.RB,_IMM32:IALU1:long:iu,mu:AVG2H imm long
360
# OBSOLETE "avg2h r, r, "
361
# OBSOLETE      do_avg2h (_SD, Ra, Rb, imm);
362
# OBSOLETE
363
# OBSOLETE
364
# OBSOLETE
365
# OBSOLETE // BCLR
366
# OBSOLETE
367
# OBSOLETE _LOGIC,00011,00,6.RA,6.RB,6.RC:LOGIC:short:iu,mu:BCLR
368
# OBSOLETE "bclr r, r, r"
369
# OBSOLETE      WRITE32_QUEUE(Ra, Rb & ~BIT32((Rc) % 32));
370
# OBSOLETE _LOGIC,00011,10,6.RA,6.RB,_IMM6:LOGIC:short:iu,mu:BCLR imm
371
# OBSOLETE "bclr r, r, "
372
# OBSOLETE      WRITE32_QUEUE(Ra, Rb & ~BIT32((imm) % 32));
373
# OBSOLETE
374
# OBSOLETE
375
# OBSOLETE
376
# OBSOLETE // BNOT
377
# OBSOLETE
378
# OBSOLETE _LOGIC,00001,00,6.RA,6.RB,6.RC:LOGIC:short:iu,mu:BNOT
379
# OBSOLETE "bnot r, r, r"
380
# OBSOLETE      WRITE32_QUEUE (Ra, Rb ^ BIT32((Rc) % 32));
381
# OBSOLETE _LOGIC,00001,10,6.RA,6.RB,_IMM6:LOGIC:short:iu,mu:BNOT imm
382
# OBSOLETE "bnot r, r, "
383
# OBSOLETE      WRITE32_QUEUE (Ra, Rb ^ BIT32((imm) % 32));
384
# OBSOLETE
385
# OBSOLETE
386
# OBSOLETE
387
# OBSOLETE // BRA
388
# OBSOLETE
389
# OBSOLETE _BRA,00000,00,6.**,6.**,6.RC:BRA:short:mu:BRA
390
# OBSOLETE "bra r"
391
# OBSOLETE      nia = cia + pcdisp;
392
# OBSOLETE _BRA,00000,10,_IMM18:BRA:short:mu:BRA imm
393
# OBSOLETE "bra "
394
# OBSOLETE      nia = cia + pcdisp;
395
# OBSOLETE _BRA,00000,10,6.**,6.**,_IMM32:BRA:long:mu:BRA imm long
396
# OBSOLETE "bra "
397
# OBSOLETE      nia = cia + pcdisp;
398
# OBSOLETE
399
# OBSOLETE
400
# OBSOLETE
401
# OBSOLETE // BRATNZ
402
# OBSOLETE
403
# OBSOLETE _BRA,00100,01,6.RA,6.**,6.RC:BRA:short:mu:BRATNZ
404
# OBSOLETE "bratnz r"
405
# OBSOLETE      if (*Ra != 0)
406
# OBSOLETE        nia = cia + pcdisp;
407
# OBSOLETE _BRA,00100,11,6.RA,_IMM12:BRA:short:mu:BRATNZ imm
408
# OBSOLETE "bratnz "
409
# OBSOLETE      if (*Ra != 0)
410
# OBSOLETE        nia = cia + pcdisp;
411
# OBSOLETE _BRA,00100,11,6.RA,6.**,_IMM32:BRA:long:mu:BRATNZ imm long
412
# OBSOLETE "bratnz "
413
# OBSOLETE      if (*Ra != 0)
414
# OBSOLETE        nia = cia + pcdisp;
415
# OBSOLETE
416
# OBSOLETE
417
# OBSOLETE
418
# OBSOLETE // BRATZR
419
# OBSOLETE
420
# OBSOLETE _BRA,00100,00,6.RA,6.**,6.RC:BRA:short:mu:BRATZR
421
# OBSOLETE "bratzr r"
422
# OBSOLETE      if (val_Ra == 0)
423
# OBSOLETE        nia = cia + pcdisp;
424
# OBSOLETE _BRA,00100,10,6.RA,_IMM12:BRA:short:mu:BRATZR imm
425
# OBSOLETE "bratzr "
426
# OBSOLETE      if (val_Ra == 0)
427
# OBSOLETE        nia = cia + pcdisp;
428
# OBSOLETE _BRA,00100,10,6.RA,6.**,_IMM32:BRA:long:mu:BRATZR imm long
429
# OBSOLETE "bratzr "
430
# OBSOLETE      if (val_Ra == 0)
431
# OBSOLETE        nia = cia + pcdisp;
432
# OBSOLETE
433
# OBSOLETE
434
# OBSOLETE
435
# OBSOLETE // BSET
436
# OBSOLETE
437
# OBSOLETE _LOGIC,00010,00,6.RA,6.RB,6.RC:LOGIC:short:iu,mu:BSET
438
# OBSOLETE "bset r, r, r"
439
# OBSOLETE      WRITE32_QUEUE (Ra, Rb | BIT32((Rc) % 32));
440
# OBSOLETE _LOGIC,00010,10,6.RA,6.RB,_IMM6:LOGIC:short:iu,mu:BSET imm
441
# OBSOLETE "bset r, r, "
442
# OBSOLETE      WRITE32_QUEUE (Ra, Rb | BIT32((imm) % 32));
443
# OBSOLETE
444
# OBSOLETE
445
# OBSOLETE
446
# OBSOLETE // BSR
447
# OBSOLETE
448
# OBSOLETE _BRA,00010,00,6.**,6.**,6.RC:BRA:short:mu:BSR
449
# OBSOLETE "bsr r"
450
# OBSOLETE      if (cia == RPT_E && PSW_VAL (PSW_RP))
451
# OBSOLETE        WRITE32_QUEUE (&GPR[62], RPT_S);
452
# OBSOLETE      else
453
# OBSOLETE        WRITE32_QUEUE (&GPR[62], cia + 8);
454
# OBSOLETE      nia = cia + pcdisp;
455
# OBSOLETE      if (TRACE_CALL_P)
456
# OBSOLETE        TRACE_ACTION |= TRACE_ACTION_CALL;
457
# OBSOLETE _BRA,00010,10,_IMM18:BRA:short:mu:BSR imm
458
# OBSOLETE "bsr "
459
# OBSOLETE      if (cia == RPT_E && PSW_VAL (PSW_RP))
460
# OBSOLETE        WRITE32_QUEUE (&GPR[62], RPT_S);
461
# OBSOLETE      else
462
# OBSOLETE        WRITE32_QUEUE (&GPR[62], cia + 8);
463
# OBSOLETE      nia = cia + pcdisp;
464
# OBSOLETE      if (TRACE_CALL_P)
465
# OBSOLETE        TRACE_ACTION |= TRACE_ACTION_CALL;
466
# OBSOLETE _BRA,00010,10,6.**,6.**,_IMM32:BRA:long:mu:BSR imm long
467
# OBSOLETE "bsr "
468
# OBSOLETE      if (cia == RPT_E && PSW_VAL (PSW_RP))
469
# OBSOLETE        WRITE32_QUEUE (&GPR[62], RPT_S);
470
# OBSOLETE      else
471
# OBSOLETE        WRITE32_QUEUE (&GPR[62], cia + 8);
472
# OBSOLETE      nia = cia + pcdisp;
473
# OBSOLETE      if (TRACE_CALL_P)
474
# OBSOLETE        TRACE_ACTION |= TRACE_ACTION_CALL;
475
# OBSOLETE
476
# OBSOLETE
477
# OBSOLETE // BSRTNZ
478
# OBSOLETE
479
# OBSOLETE _BRA,00110,01,6.RA,6.**,6.RC:BRA:short:mu:BSRTNZ
480
# OBSOLETE "bsrtnz r"
481
# OBSOLETE      if (val_Ra != 0) {
482
# OBSOLETE        if (cia == RPT_E && PSW_VAL (PSW_RP))
483
# OBSOLETE          WRITE32_QUEUE (&GPR[62], RPT_S);
484
# OBSOLETE        else
485
# OBSOLETE          WRITE32_QUEUE (&GPR[62], cia + 8);
486
# OBSOLETE        nia = cia + pcdisp;
487
# OBSOLETE        if (TRACE_CALL_P)
488
# OBSOLETE          TRACE_ACTION |= TRACE_ACTION_CALL;
489
# OBSOLETE      }
490
# OBSOLETE
491
# OBSOLETE _BRA,00110,11,6.RA,_IMM12:BRA:short:mu:BSRTNZ imm
492
# OBSOLETE "bsrtnz "
493
# OBSOLETE      if (val_Ra != 0) {
494
# OBSOLETE        if (cia == RPT_E && PSW_VAL (PSW_RP))
495
# OBSOLETE          WRITE32_QUEUE (&GPR[62], RPT_S);
496
# OBSOLETE        else
497
# OBSOLETE          WRITE32_QUEUE (&GPR[62], cia + 8);
498
# OBSOLETE        nia = cia + pcdisp;
499
# OBSOLETE        if (TRACE_CALL_P)
500
# OBSOLETE          TRACE_ACTION |= TRACE_ACTION_CALL;
501
# OBSOLETE      }
502
# OBSOLETE
503
# OBSOLETE _BRA,00110,11,6.RA,6.**,_IMM32:BRA:long:mu:BSRTNZ imm long
504
# OBSOLETE "bsrtnz "
505
# OBSOLETE      if (val_Ra != 0) {
506
# OBSOLETE        if (cia == RPT_E && PSW_VAL (PSW_RP))
507
# OBSOLETE          WRITE32_QUEUE (&GPR[62], RPT_S);
508
# OBSOLETE        else
509
# OBSOLETE          WRITE32_QUEUE (&GPR[62], cia + 8);
510
# OBSOLETE        nia = cia + pcdisp;
511
# OBSOLETE        if (TRACE_CALL_P)
512
# OBSOLETE          TRACE_ACTION |= TRACE_ACTION_CALL;
513
# OBSOLETE      }
514
# OBSOLETE
515
# OBSOLETE
516
# OBSOLETE // BSRTZR
517
# OBSOLETE
518
# OBSOLETE _BRA,00110,00,6.RA,6.**,6.RC:BRA:short:mu:BSRTZR
519
# OBSOLETE "bsrtzr r"
520
# OBSOLETE      if (val_Ra == 0) {
521
# OBSOLETE        if (cia == RPT_E && PSW_VAL (PSW_RP))
522
# OBSOLETE          WRITE32_QUEUE (&GPR[62], RPT_S);
523
# OBSOLETE        else
524
# OBSOLETE          WRITE32_QUEUE (&GPR[62], cia + 8);
525
# OBSOLETE        nia = cia + pcdisp;
526
# OBSOLETE        if (TRACE_CALL_P)
527
# OBSOLETE          TRACE_ACTION |= TRACE_ACTION_CALL;
528
# OBSOLETE      }
529
# OBSOLETE
530
# OBSOLETE _BRA,00110,10,6.RA,_IMM12:BRA:short:mu:BSRTZR imm
531
# OBSOLETE "bsrtzr "
532
# OBSOLETE      if (val_Ra == 0) {
533
# OBSOLETE        if (cia == RPT_E && PSW_VAL (PSW_RP))
534
# OBSOLETE          WRITE32_QUEUE (&GPR[62], RPT_S);
535
# OBSOLETE        else
536
# OBSOLETE          WRITE32_QUEUE (&GPR[62], cia + 8);
537
# OBSOLETE        nia = cia + pcdisp;
538
# OBSOLETE        if (TRACE_CALL_P)
539
# OBSOLETE          TRACE_ACTION |= TRACE_ACTION_CALL;
540
# OBSOLETE      }
541
# OBSOLETE
542
# OBSOLETE _BRA,00110,10,6.RA,6.**,_IMM32:BRA:long:mu:BSRTZR imm long
543
# OBSOLETE "bsrtzr "
544
# OBSOLETE      if (val_Ra == 0) {
545
# OBSOLETE        if (cia == RPT_E && PSW_VAL (PSW_RP))
546
# OBSOLETE          WRITE32_QUEUE (&GPR[62], RPT_S);
547
# OBSOLETE        else
548
# OBSOLETE          WRITE32_QUEUE (&GPR[62], cia + 8);
549
# OBSOLETE        nia = cia + pcdisp;
550
# OBSOLETE        if (TRACE_CALL_P)
551
# OBSOLETE          TRACE_ACTION |= TRACE_ACTION_CALL;
552
# OBSOLETE      }
553
# OBSOLETE
554
# OBSOLETE
555
# OBSOLETE // BTST
556
# OBSOLETE
557
# OBSOLETE _LOGIC,00000,00,***,3.FA,6.RB,6.RC:LOGIC:short:iu,mu:BTST
558
# OBSOLETE "btst f, r, r"
559
# OBSOLETE      int bit = (Rc) % 32;
560
# OBSOLETE      PSW_FLAG_SET_QUEUE(FA, MASKED32(Rb, bit, bit));
561
# OBSOLETE _LOGIC,00000,10,***,3.FA,6.RB,_IMM6:LOGIC:short:iu,mu:BTST imm
562
# OBSOLETE "btst f, r, "
563
# OBSOLETE      int bit = imm % 32;
564
# OBSOLETE      PSW_FLAG_SET_QUEUE(FA, MASKED32(Rb, bit, bit));
565
# OBSOLETE
566
# OBSOLETE
567
# OBSOLETE
568
# OBSOLETE // CMPcc
569
# OBSOLETE
570
# OBSOLETE void::function::do_cmp_cc:int cc, int fa, signed32 rb, signed32 rc
571
# OBSOLETE      int value = 0;
572
# OBSOLETE      switch (cc) {
573
# OBSOLETE      case 0: /* EQ */
574
# OBSOLETE        value = (rb == rc);
575
# OBSOLETE        break;
576
# OBSOLETE      case 1: /* NE */
577
# OBSOLETE        value = (rb != rc);
578
# OBSOLETE        break;
579
# OBSOLETE      case 2: /* GT */
580
# OBSOLETE        value = (rb > rc);
581
# OBSOLETE        break;
582
# OBSOLETE      case 3: /* GE */
583
# OBSOLETE        value = (rb >= rc);
584
# OBSOLETE        break;
585
# OBSOLETE      case 4: /* LT */
586
# OBSOLETE        value = (rb < rc);
587
# OBSOLETE        break;
588
# OBSOLETE      case 5: /* LE */
589
# OBSOLETE        value = (rb <= rc);
590
# OBSOLETE        break;
591
# OBSOLETE      case 6: /* PS */
592
# OBSOLETE        value = ((rb >= 0) && (rc >= 0));
593
# OBSOLETE        break;
594
# OBSOLETE      case 7: /* NG */
595
# OBSOLETE        value = ((rb < 0) && (rc < 0));
596
# OBSOLETE        break;
597
# OBSOLETE      default:
598
# OBSOLETE        sim_engine_abort (SD, CPU, cia, "do_cmp_cc - internal error - bad switch (%d)", cc);
599
# OBSOLETE      }
600
# OBSOLETE      PSW_FLAG_SET_QUEUE(fa, value);
601
# OBSOLETE
602
# OBSOLETE ::%s::ccc:int ccc
603
# OBSOLETE      switch (ccc)
604
# OBSOLETE        {
605
# OBSOLETE        case 0: return "eq";
606
# OBSOLETE        case 1: return "ne";
607
# OBSOLETE        case 2: return "gt";
608
# OBSOLETE        case 3: return "ge";
609
# OBSOLETE        case 4: return "lt";
610
# OBSOLETE        case 5: return "le";
611
# OBSOLETE        case 6: return "ps";
612
# OBSOLETE        case 7: return "ng";
613
# OBSOLETE        default: return "?";
614
# OBSOLETE        }
615
# OBSOLETE
616
# OBSOLETE _LOGIC,01100,00,ccc,3.FA,6.RB,6.RC:LOGIC:short:iu,mu:CMPcc
617
# OBSOLETE "cmp%s f, r, r"
618
# OBSOLETE      do_cmp_cc(_SD, ccc, FA, Rb, Rc);
619
# OBSOLETE _LOGIC,01100,10,ccc,3.FA,6.RB,_IMM6:LOGIC:short:iu,mu:CMPcc imm
620
# OBSOLETE "cmp%s f, r, "
621
# OBSOLETE      do_cmp_cc(_SD, ccc, FA, Rb, imm);
622
# OBSOLETE _LOGIC,01100,10,ccc,3.FA,6.RB,_IMM32:LOGIC:long:iu,mu:CMPcc imm long
623
# OBSOLETE "cmp%s f, r, "
624
# OBSOLETE      do_cmp_cc(_SD, ccc, FA, Rb, imm);
625
# OBSOLETE
626
# OBSOLETE
627
# OBSOLETE
628
# OBSOLETE // CMPUcc
629
# OBSOLETE
630
# OBSOLETE void::function::do_cmpu_cc:int cc, int fa, unsigned32 rb, unsigned32 rc
631
# OBSOLETE      int value = 0;
632
# OBSOLETE      switch (cc) {
633
# OBSOLETE      case 2: /* GT */
634
# OBSOLETE        value = (rb > rc);
635
# OBSOLETE        break;
636
# OBSOLETE      case 3: /* GE */
637
# OBSOLETE        value = (rb >= rc);
638
# OBSOLETE        break;
639
# OBSOLETE      case 4: /* LT */
640
# OBSOLETE        value = (rb < rc);
641
# OBSOLETE        break;
642
# OBSOLETE      case 5: /* LE */
643
# OBSOLETE        value = (rb <= rc);
644
# OBSOLETE        break;
645
# OBSOLETE      default:
646
# OBSOLETE        sim_engine_abort (SD, CPU, cia, "do_cmpu_cc - internal error - bad switch (%d)", cc);
647
# OBSOLETE      }
648
# OBSOLETE      PSW_FLAG_SET_QUEUE(fa, value);
649
# OBSOLETE
650
# OBSOLETE _LOGIC,01101,00,ccc,3.FA,6.RB,6.RC:LOGIC:short:iu,mu:CMPUcc
651
# OBSOLETE "cmpu%s f, r, r"
652
# OBSOLETE      do_cmpu_cc(_SD, ccc, FA, Rb, Rc);
653
# OBSOLETE _LOGIC,01101,10,ccc,3.FA,6.RB,_IMM6:LOGIC:short:iu,mu:CMPUcc imm
654
# OBSOLETE "cmpu%s f, r, "
655
# OBSOLETE      do_cmpu_cc(_SD, ccc, FA, Rb, imm_6u);
656
# OBSOLETE _LOGIC,01101,10,ccc,3.FA,6.RB,_IMM32:LOGIC:long:iu,mu:CMPUcc imm long
657
# OBSOLETE "cmpu%s f, r, "
658
# OBSOLETE      do_cmpu_cc(_SD, ccc, FA, Rb, imm);
659
# OBSOLETE
660
# OBSOLETE
661
# OBSOLETE
662
# OBSOLETE // DBRA
663
# OBSOLETE
664
# OBSOLETE void::function::do_dbra:address_word pcdisp, unsigned32 ra
665
# OBSOLETE      PSW_SET_QUEUE (PSW_RP, 1);
666
# OBSOLETE      WRITE32_QUEUE (&RPT_C, 1);
667
# OBSOLETE      WRITE32_QUEUE (&RPT_S, cia + pcdisp);
668
# OBSOLETE      WRITE32_QUEUE (&RPT_E, cia + (ra & ~0x7));
669
# OBSOLETE
670
# OBSOLETE _BRA,10000,00,6.RA,6.**,6.RC:BRA:short:mu:DBRA
671
# OBSOLETE "dbra r, r"
672
# OBSOLETE      do_dbra(_SD, pcdisp, val_Ra);
673
# OBSOLETE _BRA,10000,10,6.RA,_IMM12:BRA:short:mu:DBRA imm
674
# OBSOLETE "dbra r, "
675
# OBSOLETE      do_dbra(_SD, pcdisp, val_Ra);
676
# OBSOLETE _BRA,10000,10,6.RA,6.**,_IMM32:BRA:long:mu:DBRA imm long
677
# OBSOLETE "dbra r, "
678
# OBSOLETE      do_dbra(_SD, pcdisp, val_Ra);
679
# OBSOLETE
680
# OBSOLETE
681
# OBSOLETE
682
# OBSOLETE // DBRAI
683
# OBSOLETE
684
# OBSOLETE void::function::do_dbrai:address_word pcdisp, unsigned32 imm
685
# OBSOLETE      PSW_SET_QUEUE (PSW_RP, 1);
686
# OBSOLETE      WRITE32_QUEUE (&RPT_C, 1);
687
# OBSOLETE      WRITE32_QUEUE (&RPT_S, cia + pcdisp);
688
# OBSOLETE      WRITE32_QUEUE (&RPT_E, cia + (imm << 3));
689
# OBSOLETE
690
# OBSOLETE _BRA,10100,00,6.IMM_6,6.**,6.RC:BRA:short:mu:DBRAI
691
# OBSOLETE "dbrai , r"
692
# OBSOLETE      do_dbrai(_SD, pcdisp, IMM_6);
693
# OBSOLETE _BRA,10100,10,6.IMM_6,_IMM12:BRA:short:mu:DBRAI imm
694
# OBSOLETE "dbrai , "
695
# OBSOLETE      do_dbrai(_SD, pcdisp, IMM_6);
696
# OBSOLETE _BRA,10100,10,6.IMM_6,6.**,_IMM32:BRA:long:mu:DBRAI imm long
697
# OBSOLETE "dbrai , "
698
# OBSOLETE      do_dbrai(_SD, pcdisp, IMM_6);
699
# OBSOLETE
700
# OBSOLETE
701
# OBSOLETE
702
# OBSOLETE // DBSR
703
# OBSOLETE
704
# OBSOLETE void::function::do_dbsr:address_word pcdisp, unsigned32 ra
705
# OBSOLETE      PSW_SET_QUEUE (PSW_RP, 1);
706
# OBSOLETE      WRITE32_QUEUE (&RPT_C, 1);
707
# OBSOLETE      WRITE32_QUEUE (&RPT_S, cia + pcdisp);
708
# OBSOLETE      WRITE32_QUEUE (&RPT_E, cia + ra);
709
# OBSOLETE      WRITE32_QUEUE (&GPR[62], cia + ra + 8);
710
# OBSOLETE
711
# OBSOLETE _BRA,10010,00,6.RA,6.**,6.RC:BRA:short:mu:DBSR
712
# OBSOLETE "dbsr r, r"
713
# OBSOLETE      do_dbsr(_SD, pcdisp, val_Ra);
714
# OBSOLETE _BRA,10010,10,6.RA,_IMM12:BRA:short:mu:DBSR imm
715
# OBSOLETE "dbsr r, "
716
# OBSOLETE      do_dbsr(_SD, pcdisp, val_Ra);
717
# OBSOLETE _BRA,10010,10,6.RA,6.**,_IMM32:BRA:long:mu:DBSR imm long
718
# OBSOLETE "dbsr r, "
719
# OBSOLETE      do_dbsr(_SD, pcdisp, val_Ra);
720
# OBSOLETE
721
# OBSOLETE
722
# OBSOLETE
723
# OBSOLETE // DBSRI
724
# OBSOLETE
725
# OBSOLETE void::function::do_dbsri:address_word pcdisp, unsigned32 imm
726
# OBSOLETE      PSW_SET_QUEUE (PSW_RP, 1);
727
# OBSOLETE      WRITE32_QUEUE (&RPT_C, 1);
728
# OBSOLETE      WRITE32_QUEUE (&RPT_S, cia + pcdisp);
729
# OBSOLETE      WRITE32_QUEUE (&RPT_E, cia + (imm << 3));
730
# OBSOLETE      WRITE32_QUEUE (&GPR[62], cia + (imm << 3) + 8);
731
# OBSOLETE
732
# OBSOLETE _BRA,10110,00,6.IMM_6,6.**,6.RC:BRA:short:mu:DBSRI
733
# OBSOLETE "dbsri , r"
734
# OBSOLETE      do_dbsri(_SD, pcdisp, IMM_6);
735
# OBSOLETE _BRA,10110,10,6.IMM_6,_IMM12:BRA:short:mu:DBSRI imm
736
# OBSOLETE "dbsri , "
737
# OBSOLETE      do_dbsri(_SD, pcdisp, IMM_6);
738
# OBSOLETE _BRA,10110,10,6.IMM_6,6.**,_IMM32:BRA:long:mu:DBSRI imm long
739
# OBSOLETE "dbsri , "
740
# OBSOLETE      do_dbsri(_SD, pcdisp, IMM_6);
741
# OBSOLETE
742
# OBSOLETE
743
# OBSOLETE
744
# OBSOLETE // DBT
745
# OBSOLETE
746
# OBSOLETE
747
# OBSOLETE _BRA,01011,00,6.**,6.**,6.**:BRA:short:mu:DBT
748
# OBSOLETE "dbt"
749
# OBSOLETE      if (cia == RPT_E && PSW_VAL (PSW_RP))
750
# OBSOLETE        {
751
# OBSOLETE          WRITE32_QUEUE (&DPC, RPT_S);
752
# OBSOLETE          if (RPT_C == 0)
753
# OBSOLETE            PSW_SET (PSW_RP, 0);
754
# OBSOLETE        }
755
# OBSOLETE      else
756
# OBSOLETE        WRITE32_QUEUE (&DPC, cia + 8);
757
# OBSOLETE      DID_TRAP = 2;
758
# OBSOLETE      nia = 0xfffff120; /* debug_trap_address */
759
# OBSOLETE
760
# OBSOLETE // DJMP
761
# OBSOLETE
762
# OBSOLETE void::function::do_djmp:address_word pcdisp, unsigned32 ra
763
# OBSOLETE      PSW_SET_QUEUE (PSW_RP, 1);
764
# OBSOLETE      WRITE32_QUEUE (&RPT_C, 1);
765
# OBSOLETE      WRITE32_QUEUE (&RPT_S, pcdisp);
766
# OBSOLETE      WRITE32_QUEUE (&RPT_E, cia + (ra & ~0x7));
767
# OBSOLETE
768
# OBSOLETE _BRA,10001,00,6.RA,6.**,6.RC:BRA:short:mu:DJMP
769
# OBSOLETE "djmp r, r"
770
# OBSOLETE      do_djmp(_SD, pcdisp, val_Ra);
771
# OBSOLETE _BRA,10001,10,6.RA,_IMM12:BRA:short:mu:DJMP imm
772
# OBSOLETE "djmp r, "
773
# OBSOLETE      do_djmp(_SD, pcdisp, val_Ra);
774
# OBSOLETE _BRA,10001,10,6.RA,6.**,_IMM32:BRA:long:mu:DJMP imm long
775
# OBSOLETE "djmp r, "
776
# OBSOLETE      do_djmp(_SD, pcdisp, val_Ra);
777
# OBSOLETE
778
# OBSOLETE
779
# OBSOLETE
780
# OBSOLETE // DJMPI
781
# OBSOLETE
782
# OBSOLETE void::function::do_djmpi:address_word pcdisp, unsigned32 imm
783
# OBSOLETE      PSW_SET_QUEUE (PSW_RP, 1);
784
# OBSOLETE      WRITE32_QUEUE (&RPT_C, 1);
785
# OBSOLETE      WRITE32_QUEUE (&RPT_S, pcdisp);
786
# OBSOLETE      WRITE32_QUEUE (&RPT_E, cia + (imm << 3));
787
# OBSOLETE
788
# OBSOLETE _BRA,10101,00,6.IMM_6,6.**,6.RC:BRA:short:mu:DJMPI
789
# OBSOLETE "djmpi , r"
790
# OBSOLETE      do_djmpi(_SD, pcdisp, IMM_6);
791
# OBSOLETE _BRA,10101,10,6.IMM_6,_IMM12:BRA:short:mu:DJMPI imm
792
# OBSOLETE "djmpi , "
793
# OBSOLETE      do_djmpi(_SD, pcdisp, IMM_6);
794
# OBSOLETE _BRA,10101,10,6.IMM_6,6.**,_IMM32:BRA:long:mu:DJMPI imm long
795
# OBSOLETE "djmpi , "
796
# OBSOLETE      do_djmpi(_SD, pcdisp, IMM_6);
797
# OBSOLETE
798
# OBSOLETE
799
# OBSOLETE
800
# OBSOLETE // DJSR
801
# OBSOLETE
802
# OBSOLETE void::function::do_djsr:address_word pcdisp, unsigned32 ra
803
# OBSOLETE      PSW_SET_QUEUE (PSW_RP, 1);
804
# OBSOLETE      WRITE32_QUEUE (&RPT_C, 1);
805
# OBSOLETE      WRITE32_QUEUE (&RPT_S, pcdisp);
806
# OBSOLETE      WRITE32_QUEUE (&RPT_E, cia + (ra & ~0x7));
807
# OBSOLETE      WRITE32_QUEUE (&GPR[62], cia + (ra & ~0x7) + 8);
808
# OBSOLETE
809
# OBSOLETE _BRA,10011,00,6.RA,6.**,6.RC:BRA:short:mu:DJSR
810
# OBSOLETE "djsr r, r"
811
# OBSOLETE      do_djsr(_SD, pcdisp, val_Ra);
812
# OBSOLETE _BRA,10011,10,6.RA,_IMM12:BRA:short:mu:DJSR imm
813
# OBSOLETE "djsr r, "
814
# OBSOLETE      do_djsr(_SD, pcdisp, val_Ra);
815
# OBSOLETE _BRA,10011,10,6.RA,6.**,_IMM32:BRA:long:mu:DJSR imm long
816
# OBSOLETE "djsr r, "
817
# OBSOLETE      do_djsr(_SD, pcdisp, val_Ra);
818
# OBSOLETE
819
# OBSOLETE
820
# OBSOLETE
821
# OBSOLETE // DJSRI
822
# OBSOLETE
823
# OBSOLETE void::function::do_djsri:address_word pcdisp, unsigned32 imm
824
# OBSOLETE      PSW_SET_QUEUE (PSW_RP, 1);
825
# OBSOLETE      WRITE32_QUEUE (&RPT_C, 1);
826
# OBSOLETE      WRITE32_QUEUE (&RPT_S, pcdisp);
827
# OBSOLETE      WRITE32_QUEUE (&RPT_E, cia + (imm << 3));
828
# OBSOLETE      WRITE32_QUEUE (&GPR[62], cia + (imm << 3) + 8);
829
# OBSOLETE
830
# OBSOLETE _BRA,10111,00,6.IMM_6,6.**,6.RC:BRA:short:mu:DJSRI
831
# OBSOLETE "djsri , r"
832
# OBSOLETE      do_djsri(_SD, pcdisp, IMM_6);
833
# OBSOLETE _BRA,10111,10,6.IMM_6,_IMM12:BRA:short:mu:DJSRI imm
834
# OBSOLETE "djsri , "
835
# OBSOLETE      do_djsri(_SD, pcdisp, IMM_6);
836
# OBSOLETE _BRA,10111,10,6.IMM_6,6.**,_IMM32:BRA:long:mu:DJSRI imm long
837
# OBSOLETE "djsri , "
838
# OBSOLETE      do_djsri(_SD, pcdisp, IMM_6);
839
# OBSOLETE
840
# OBSOLETE
841
# OBSOLETE
842
# OBSOLETE // JMP
843
# OBSOLETE
844
# OBSOLETE _BRA,00001,00,6.**,6.**,6.RC:BRA:short:mu:JMP
845
# OBSOLETE "jmp r"
846
# OBSOLETE      nia = pcaddr;
847
# OBSOLETE      if (RC == 62 && TRACE_CALL_P)
848
# OBSOLETE        TRACE_ACTION |= TRACE_ACTION_RETURN;
849
# OBSOLETE _BRA,00001,10,_IMM18:BRA:short:mu:JMP imm
850
# OBSOLETE "jmp "
851
# OBSOLETE      nia = pcaddr;
852
# OBSOLETE _BRA,00001,10,6.**,6.**,_IMM32:BRA:long:mu:JMP imm long
853
# OBSOLETE "jmp "
854
# OBSOLETE      nia = pcaddr;
855
# OBSOLETE
856
# OBSOLETE
857
# OBSOLETE
858
# OBSOLETE // JMPTNZ
859
# OBSOLETE
860
# OBSOLETE _BRA,00101,01,6.RA,6.**,6.RC:BRA:short:mu:JMPTNZ
861
# OBSOLETE "jmptnz r"
862
# OBSOLETE      if (val_Ra != 0)
863
# OBSOLETE        nia = pcaddr;
864
# OBSOLETE _BRA,00101,11,6.RA,_IMM12:BRA:short:mu:JMPTNZ imm
865
# OBSOLETE "jmptnz "
866
# OBSOLETE      if (val_Ra != 0)
867
# OBSOLETE        nia = pcaddr;
868
# OBSOLETE _BRA,00101,11,6.RA,6.**,_IMM32:BRA:long:mu:JMPTNZ imm long
869
# OBSOLETE "jmptnz "
870
# OBSOLETE      if (val_Ra != 0)
871
# OBSOLETE        nia = pcaddr;
872
# OBSOLETE
873
# OBSOLETE
874
# OBSOLETE
875
# OBSOLETE // JMPTZR
876
# OBSOLETE
877
# OBSOLETE _BRA,00101,00,6.RA,6.**,6.RC:BRA:short:mu:JMPTZR
878
# OBSOLETE "jmptzr r"
879
# OBSOLETE      if (val_Ra == 0)
880
# OBSOLETE        nia = pcaddr;
881
# OBSOLETE _BRA,00101,10,6.RA,_IMM12:BRA:short:mu:JMPTZR imm
882
# OBSOLETE "jmptzr "
883
# OBSOLETE      if (val_Ra == 0)
884
# OBSOLETE        nia = pcaddr;
885
# OBSOLETE _BRA,00101,10,6.RA,6.**,_IMM32:BRA:long:mu:JMPTZR imm long
886
# OBSOLETE "jmptzr "
887
# OBSOLETE      if (val_Ra == 0)
888
# OBSOLETE        nia = pcaddr;
889
# OBSOLETE
890
# OBSOLETE
891
# OBSOLETE
892
# OBSOLETE // JOINpp
893
# OBSOLETE
894
# OBSOLETE void::function::do_join_pp:int pp, unsigned32 *ra, unsigned32 rb, unsigned32 src
895
# OBSOLETE      switch (pp) {
896
# OBSOLETE      case 0x0: /* LL */
897
# OBSOLETE        WRITE32_QUEUE (ra, ((unsigned32)VL2_4(rb) << 16) | VL2_4(src));
898
# OBSOLETE        break;
899
# OBSOLETE      case 0x1: /* LH */
900
# OBSOLETE        WRITE32_QUEUE (ra, ((unsigned32)VL2_4(rb) << 16) | VH2_4(src));
901
# OBSOLETE        break;
902
# OBSOLETE      case 0x2: /* HL */
903
# OBSOLETE        WRITE32_QUEUE (ra, ((unsigned32)VH2_4(rb) << 16) | VL2_4(src));
904
# OBSOLETE        break;
905
# OBSOLETE      case 0x3: /* HH */
906
# OBSOLETE        WRITE32_QUEUE (ra, ((unsigned32)VH2_4(rb) << 16) | VH2_4(src));
907
# OBSOLETE        break;
908
# OBSOLETE      }
909
# OBSOLETE
910
# OBSOLETE ::%s::pp:int pp
911
# OBSOLETE      switch (pp)
912
# OBSOLETE        {
913
# OBSOLETE        case 0x0: return "ll";
914
# OBSOLETE        case 0x1: return "lh";
915
# OBSOLETE        case 0x2: return "hl";
916
# OBSOLETE        case 0x3: return "hh";
917
# OBSOLETE        default: return "?";
918
# OBSOLETE        }
919
# OBSOLETE
920
# OBSOLETE _IALU1,011,pp,00,6.RA,6.RB,6.RC:IALU1:short:iu,mu:JOINpp
921
# OBSOLETE "join%s r, r, r"
922
# OBSOLETE      do_join_pp(_SD, pp, Ra, Rb, Rc);
923
# OBSOLETE _IALU1,011,pp,10,6.RA,6.RB,_IMM6:IALU1:short:iu,mu:JOINpp imm
924
# OBSOLETE "join%s r, r, "
925
# OBSOLETE      do_join_pp(_SD, pp, Ra, Rb, immHL);
926
# OBSOLETE _IALU1,011,pp,10,6.RA,6.RB,_IMM32:IALU1:long:iu,mu:JOINpp imm long
927
# OBSOLETE "join%s r, r, "
928
# OBSOLETE      do_join_pp(_SD, pp, Ra, Rb, immHL);
929
# OBSOLETE
930
# OBSOLETE
931
# OBSOLETE
932
# OBSOLETE // JSR
933
# OBSOLETE
934
# OBSOLETE _BRA,00011,00,6.**,6.**,6.RC:BRA:short:mu:JSR
935
# OBSOLETE "jsr r"
936
# OBSOLETE      if (cia == RPT_E && PSW_VAL (PSW_RP))
937
# OBSOLETE        WRITE32_QUEUE (&GPR[62], RPT_S);
938
# OBSOLETE      else
939
# OBSOLETE        WRITE32_QUEUE (&GPR[62], cia + 8);
940
# OBSOLETE      if (TRACE_CALL_P)
941
# OBSOLETE        TRACE_ACTION |= TRACE_ACTION_CALL;
942
# OBSOLETE      return pcaddr;
943
# OBSOLETE _BRA,00011,10,_IMM18:BRA:short:mu:JSR imm
944
# OBSOLETE "jsr "
945
# OBSOLETE      if (cia == RPT_E && PSW_VAL (PSW_RP))
946
# OBSOLETE        WRITE32_QUEUE (&GPR[62], RPT_S);
947
# OBSOLETE      else
948
# OBSOLETE        WRITE32_QUEUE (&GPR[62], cia + 8);
949
# OBSOLETE      if (TRACE_CALL_P)
950
# OBSOLETE        TRACE_ACTION |= TRACE_ACTION_CALL;
951
# OBSOLETE      return pcaddr;
952
# OBSOLETE _BRA,00011,10,6.**,6.**,_IMM32:BRA:long:mu:JSR imm long
953
# OBSOLETE "jsr "
954
# OBSOLETE      if (cia == RPT_E && PSW_VAL (PSW_RP))
955
# OBSOLETE        WRITE32_QUEUE (&GPR[62], RPT_S);
956
# OBSOLETE      else
957
# OBSOLETE        WRITE32_QUEUE (&GPR[62], cia + 8);
958
# OBSOLETE      if (TRACE_CALL_P)
959
# OBSOLETE        TRACE_ACTION |= TRACE_ACTION_CALL;
960
# OBSOLETE      return pcaddr;
961
# OBSOLETE
962
# OBSOLETE
963
# OBSOLETE // JSRTNZ
964
# OBSOLETE
965
# OBSOLETE _BRA,00111,01,6.RA,6.**,6.RC:BRA:short:mu:JSRTNZ
966
# OBSOLETE "jsrtnz r"
967
# OBSOLETE      if (val_Ra != 0) {
968
# OBSOLETE        if (cia == RPT_E && PSW_VAL (PSW_RP))
969
# OBSOLETE          WRITE32_QUEUE (&GPR[62], RPT_S);
970
# OBSOLETE        else
971
# OBSOLETE          WRITE32_QUEUE (&GPR[62], cia + 8);
972
# OBSOLETE        nia = pcaddr;
973
# OBSOLETE        if (TRACE_CALL_P)
974
# OBSOLETE          TRACE_ACTION |= TRACE_ACTION_CALL;
975
# OBSOLETE      }
976
# OBSOLETE _BRA,00111,11,6.RA,_IMM12:BRA:short:mu:JSRTNZ imm
977
# OBSOLETE "jsrtnz "
978
# OBSOLETE      if (val_Ra != 0) {
979
# OBSOLETE        if (cia == RPT_E && PSW_VAL (PSW_RP))
980
# OBSOLETE          WRITE32_QUEUE (&GPR[62], RPT_S);
981
# OBSOLETE        else
982
# OBSOLETE          WRITE32_QUEUE (&GPR[62], cia + 8);
983
# OBSOLETE        nia = pcaddr;
984
# OBSOLETE        if (TRACE_CALL_P)
985
# OBSOLETE          TRACE_ACTION |= TRACE_ACTION_CALL;
986
# OBSOLETE      }
987
# OBSOLETE _BRA,00111,11,6.RA,6.**,_IMM32:BRA:long:mu:JSRTNZ imm long
988
# OBSOLETE "jsrtnz "
989
# OBSOLETE      if (val_Ra != 0) {
990
# OBSOLETE        if (cia == RPT_E && PSW_VAL (PSW_RP))
991
# OBSOLETE          WRITE32_QUEUE (&GPR[62], RPT_S);
992
# OBSOLETE        else
993
# OBSOLETE          WRITE32_QUEUE (&GPR[62], cia + 8);
994
# OBSOLETE        nia = pcaddr;
995
# OBSOLETE        if (TRACE_CALL_P)
996
# OBSOLETE          TRACE_ACTION |= TRACE_ACTION_CALL;
997
# OBSOLETE      }
998
# OBSOLETE
999
# OBSOLETE
1000
# OBSOLETE
1001
# OBSOLETE // JSRTZR
1002
# OBSOLETE
1003
# OBSOLETE _BRA,00111,00,6.RA,6.**,6.RC:BRA:short:mu:JSRTZR
1004
# OBSOLETE "jsrtzr r"
1005
# OBSOLETE      if (val_Ra == 0) {
1006
# OBSOLETE        if (cia == RPT_E && PSW_VAL (PSW_RP))
1007
# OBSOLETE          WRITE32_QUEUE (&GPR[62], RPT_S);
1008
# OBSOLETE        else
1009
# OBSOLETE          WRITE32_QUEUE (&GPR[62], cia + 8);
1010
# OBSOLETE        nia = pcaddr;
1011
# OBSOLETE        if (TRACE_CALL_P)
1012
# OBSOLETE          TRACE_ACTION |= TRACE_ACTION_CALL;
1013
# OBSOLETE      }
1014
# OBSOLETE _BRA,00111,10,6.RA,_IMM12:BRA:short:mu:JSRTZR imm
1015
# OBSOLETE "jsrtzr "
1016
# OBSOLETE      if (val_Ra == 0) {
1017
# OBSOLETE        if (cia == RPT_E && PSW_VAL (PSW_RP))
1018
# OBSOLETE          WRITE32_QUEUE (&GPR[62], RPT_S);
1019
# OBSOLETE        else
1020
# OBSOLETE          WRITE32_QUEUE (&GPR[62], cia + 8);
1021
# OBSOLETE        nia = pcaddr;
1022
# OBSOLETE        if (TRACE_CALL_P)
1023
# OBSOLETE          TRACE_ACTION |= TRACE_ACTION_CALL;
1024
# OBSOLETE      }
1025
# OBSOLETE _BRA,00111,10,6.RA,6.**,_IMM32:BRA:long:mu:JSRTZR imm long
1026
# OBSOLETE "jsrtzr "
1027
# OBSOLETE      if (val_Ra == 0) {
1028
# OBSOLETE        if (cia == RPT_E && PSW_VAL (PSW_RP))
1029
# OBSOLETE          WRITE32_QUEUE (&GPR[62], RPT_S);
1030
# OBSOLETE        else
1031
# OBSOLETE          WRITE32_QUEUE (&GPR[62], cia + 8);
1032
# OBSOLETE        nia = pcaddr;
1033
# OBSOLETE        if (TRACE_CALL_P)
1034
# OBSOLETE          TRACE_ACTION |= TRACE_ACTION_CALL;
1035
# OBSOLETE      }
1036
# OBSOLETE
1037
# OBSOLETE
1038
# OBSOLETE
1039
# OBSOLETE // Post increment
1040
# OBSOLETE
1041
# OBSOLETE void::function::do_incr:int x, unsigned32 *rb, int delta
1042
# OBSOLETE      unsigned32 next_rb;
1043
# OBSOLETE      if (x == 1)
1044
# OBSOLETE        next_rb = *rb + delta;
1045
# OBSOLETE      else if (x == 3)
1046
# OBSOLETE        next_rb = *rb - delta;
1047
# OBSOLETE      else
1048
# OBSOLETE        next_rb = *rb; /* value not used */
1049
# OBSOLETE      /* HW erratum: check value after incrementing */
1050
# OBSOLETE      if (next_rb == MOD_E
1051
# OBSOLETE          && (x == 1 || x == 3)
1052
# OBSOLETE          && (PSW_VAL(PSW_MD))) {
1053
# OBSOLETE        WRITE32_QUEUE (rb, MOD_S);
1054
# OBSOLETE      }
1055
# OBSOLETE      else if (x == 1 || x == 3)
1056
# OBSOLETE        WRITE32_QUEUE (rb, next_rb);
1057
# OBSOLETE
1058
# OBSOLETE // LD2H
1059
# OBSOLETE
1060
# OBSOLETE int::function::make_even_reg:int reg, const char *name
1061
# OBSOLETE      if (reg & 1)
1062
# OBSOLETE        sim_engine_abort (SD, CPU, cia,
1063
# OBSOLETE                          "0x%lx:%s odd register (r%d) used in multi-word load/mulx2h",
1064
# OBSOLETE                          (long) cia, name, reg);
1065
# OBSOLETE      return reg;
1066
# OBSOLETE
1067
# OBSOLETE void::function::do_ld2h:int ra, unsigned32 rb, unsigned32 src
1068
# OBSOLETE      signed32 mem;
1069
# OBSOLETE      ra = make_even_reg(_SD, ra, "LD2H");
1070
# OBSOLETE      mem = MEM(signed, rb + src, 4);
1071
# OBSOLETE      if (ra != 0)
1072
# OBSOLETE      {
1073
# OBSOLETE        WRITE32_QUEUE (&GPR[ra + 0], SEXT32(EXTRACTED32(mem, 0, 15), 16));
1074
# OBSOLETE        WRITE32_QUEUE (&GPR[ra + 1], SEXT32(EXTRACTED32(mem, 16, 31), 16));
1075
# OBSOLETE      }
1076
# OBSOLETE
1077
# OBSOLETE ::%s::XX:int XX
1078
# OBSOLETE      switch (XX)
1079
# OBSOLETE        {
1080
# OBSOLETE        case 0: return "";
1081
# OBSOLETE        case 1: return "+";
1082
# OBSOLETE        case 3: return "-";
1083
# OBSOLETE        default: return "?";
1084
# OBSOLETE        }
1085
# OBSOLETE
1086
# OBSOLETE _IMEM,00011,XX,6.RA,6.RB,6.SRC_6:IMEM:short:mu:LD2H
1087
# OBSOLETE "ld2h r, @(r, )":XX == 0
1088
# OBSOLETE "ld2h r, @(r%s, r)"
1089
# OBSOLETE      do_ld2h(_SD, RA, Rb, src);
1090
# OBSOLETE      do_incr(_SD, XX, &GPR[RB], 4);
1091
# OBSOLETE _IMEM,00011,10,6.RA,6.RB,_IMM32:IMEM:long:mu:LD2H long
1092
# OBSOLETE "ld2h r, @(r, )"
1093
# OBSOLETE      do_ld2h(_SD, RA, Rb, imm);
1094
# OBSOLETE
1095
# OBSOLETE
1096
# OBSOLETE
1097
# OBSOLETE // LD2W
1098
# OBSOLETE
1099
# OBSOLETE void::function::do_ld2w:int ra, unsigned32 rb, unsigned32 src
1100
# OBSOLETE      unsigned64 mem;
1101
# OBSOLETE      ra = make_even_reg(_SD, ra, "LD2W");
1102
# OBSOLETE      mem = MEM(unsigned, rb + src, 8);
1103
# OBSOLETE      if (ra != 0)
1104
# OBSOLETE      {
1105
# OBSOLETE        WRITE32_QUEUE (&GPR[ra + 0], EXTRACTED64 (mem, 0, 31));
1106
# OBSOLETE        WRITE32_QUEUE (&GPR[ra + 1], EXTRACTED64 (mem, 32, 63));
1107
# OBSOLETE      }
1108
# OBSOLETE
1109
# OBSOLETE _IMEM,00110,XX,6.RA,6.RB,6.SRC_6:IMEM:short:mu:L2W
1110
# OBSOLETE "ld2w r, @(r, )":XX == 0
1111
# OBSOLETE "ld2w r, @(r%s, r)"
1112
# OBSOLETE      do_ld2w(_SD, RA, Rb, src);
1113
# OBSOLETE      do_incr(_SD, XX, &GPR[RB], 8);
1114
# OBSOLETE _IMEM,00110,10,6.RA,6.RB,_IMM32:IMEM:long:mu:L2W long
1115
# OBSOLETE "ld2w r, @(r, )"
1116
# OBSOLETE      do_ld2w(_SD, RA, Rb, imm);
1117
# OBSOLETE
1118
# OBSOLETE
1119
# OBSOLETE
1120
# OBSOLETE // LD4BH
1121
# OBSOLETE
1122
# OBSOLETE void::function::do_ld4bh:unsigned32 ra, unsigned32 rb, unsigned32 src
1123
# OBSOLETE      unsigned16 l1, l2, h1, h2;
1124
# OBSOLETE      unsigned32 mem;
1125
# OBSOLETE      ra = make_even_reg(_SD, ra, "LD4BH");
1126
# OBSOLETE      mem = MEM(unsigned, rb + src, 4);
1127
# OBSOLETE      h1 = SEXT16(EXTRACTED32(mem, 0, 7), 8);
1128
# OBSOLETE      l1 = SEXT16(EXTRACTED32(mem, 8, 15), 8);
1129
# OBSOLETE      h2 = SEXT16(EXTRACTED32(mem, 16, 23), 8);
1130
# OBSOLETE      l2 = SEXT16(EXTRACTED32(mem, 24, 31), 8);
1131
# OBSOLETE      if (ra != 0)
1132
# OBSOLETE      {
1133
# OBSOLETE        WRITE32_QUEUE (&GPR[ra + 0], (h1 << 16) | l1);
1134
# OBSOLETE        WRITE32_QUEUE (&GPR[ra + 1], (h2 << 16) | l2);
1135
# OBSOLETE      }
1136
# OBSOLETE
1137
# OBSOLETE _IMEM,00101,XX,6.RA,6.RB,6.SRC_6:IMEM:short:mu:LD4BH
1138
# OBSOLETE "ld4bh r, @(r, )":XX == 0
1139
# OBSOLETE "ld4bh r, @(r%s, r)"
1140
# OBSOLETE      do_ld4bh(_SD, RA, Rb, src);
1141
# OBSOLETE      do_incr(_SD, XX, &GPR[RB], 4);
1142
# OBSOLETE _IMEM,00101,10,6.RA,6.RB,_IMM32:IMEM:long:mu:LD4BH long
1143
# OBSOLETE "ld4bh r, @(r, )"
1144
# OBSOLETE      do_ld4bh(_SD, RA, Rb, imm);
1145
# OBSOLETE
1146
# OBSOLETE
1147
# OBSOLETE
1148
# OBSOLETE // LD4BHU
1149
# OBSOLETE
1150
# OBSOLETE void::function::do_ld4bhu:unsigned32 ra, unsigned32 rb, unsigned32 src
1151
# OBSOLETE      unsigned16 l1, l2, h1, h2;
1152
# OBSOLETE      unsigned32 mem;
1153
# OBSOLETE      ra = make_even_reg(_SD, ra, "LD4BH");
1154
# OBSOLETE      mem = MEM(signed, rb + src, 4);
1155
# OBSOLETE      h1 = EXTRACTED32(mem, 0, 7);
1156
# OBSOLETE      l1 = EXTRACTED32(mem, 8, 15);
1157
# OBSOLETE      h2 = EXTRACTED32(mem, 16, 23);
1158
# OBSOLETE      l2 = EXTRACTED32(mem, 24, 31);
1159
# OBSOLETE      if (ra != 0)
1160
# OBSOLETE      {
1161
# OBSOLETE        WRITE32_QUEUE (&GPR[ra + 0], (h1 << 16) | l1);
1162
# OBSOLETE        WRITE32_QUEUE (&GPR[ra + 1], (h2 << 16) | l2);
1163
# OBSOLETE      }
1164
# OBSOLETE
1165
# OBSOLETE _IMEM,01101,XX,6.RA,6.RB,6.SRC_6:IMEM:short:mu:LD4BHU
1166
# OBSOLETE "ld4hbu r, @(r, )":XX == 0
1167
# OBSOLETE "ld4hbu r, @(r%s, r)"
1168
# OBSOLETE      do_ld4bhu(_SD, RA, Rb, src);
1169
# OBSOLETE      do_incr(_SD, XX, &GPR[RB], 4);
1170
# OBSOLETE _IMEM,01101,10,6.RA,6.RB,_IMM32:IMEM:long:mu:LD4BHU long
1171
# OBSOLETE "ld4hbu r, @(r, )"
1172
# OBSOLETE      do_ld4bhu(_SD, RA, Rb, imm);
1173
# OBSOLETE
1174
# OBSOLETE
1175
# OBSOLETE
1176
# OBSOLETE // LDB
1177
# OBSOLETE
1178
# OBSOLETE void::function::do_ldb:unsigned32 *ra, unsigned32 rb, unsigned32 src
1179
# OBSOLETE      WRITE32_QUEUE (ra, MEM(signed, rb + src, 1));
1180
# OBSOLETE
1181
# OBSOLETE _IMEM,00000,XX,6.RA,6.RB,6.SRC_6:IMEM:short:mu:LDB
1182
# OBSOLETE "ldb r, @(r, )":XX == 0
1183
# OBSOLETE "ldb r, @(r%s, r)"
1184
# OBSOLETE      do_ldb(_SD, Ra, Rb, src);
1185
# OBSOLETE      do_incr(_SD, XX, &GPR[RB], 1);
1186
# OBSOLETE _IMEM,00000,10,6.RA,6.RB,_IMM32:IMEM:long:mu:LDB long
1187
# OBSOLETE "ldb r, @(r, )"
1188
# OBSOLETE      do_ldb(_SD, Ra, Rb, imm);
1189
# OBSOLETE
1190
# OBSOLETE
1191
# OBSOLETE
1192
# OBSOLETE // LDBU
1193
# OBSOLETE
1194
# OBSOLETE void::function::do_ldbu:unsigned32 *ra, unsigned32 rb, unsigned32 src
1195
# OBSOLETE      WRITE32_QUEUE (ra, MEM(unsigned, rb + src, 1));
1196
# OBSOLETE
1197
# OBSOLETE _IMEM,01001,XX,6.RA,6.RB,6.SRC_6:IMEM:short:mu:LDBU
1198
# OBSOLETE "ldbu r, @(r, )":XX == 0
1199
# OBSOLETE "ldbu r, @(r%s, r)"
1200
# OBSOLETE      do_ldbu(_SD, Ra, Rb, src);
1201
# OBSOLETE      do_incr(_SD, XX, &GPR[RB], 1);
1202
# OBSOLETE _IMEM,01001,10,6.RA,6.RB,_IMM32:IMEM:long:mu:LDBU long
1203
# OBSOLETE "ldbu r, @(r, )"
1204
# OBSOLETE      do_ldbu(_SD, Ra, Rb, imm);
1205
# OBSOLETE
1206
# OBSOLETE
1207
# OBSOLETE
1208
# OBSOLETE // LDH
1209
# OBSOLETE
1210
# OBSOLETE void::function::do_ldh:unsigned32 *ra, unsigned32 rb, unsigned32 src
1211
# OBSOLETE      WRITE32_QUEUE (ra, MEM(signed, rb + src, 2));
1212
# OBSOLETE
1213
# OBSOLETE _IMEM,00010,XX,6.RA,6.RB,6.SRC_6:IMEM:short:mu:LDH
1214
# OBSOLETE "ldh r, @(r, )":XX == 0
1215
# OBSOLETE "ldh r, @(r%s, r)"
1216
# OBSOLETE      do_ldh(_SD, Ra, Rb, src);
1217
# OBSOLETE      do_incr(_SD, XX, &GPR[RB], 2);
1218
# OBSOLETE _IMEM,00010,10,6.RA,6.RB,_IMM32:IMEM:long:mu:LDH long
1219
# OBSOLETE "ldh r, @(r, )"
1220
# OBSOLETE      do_ldh(_SD, Ra, Rb, imm);
1221
# OBSOLETE
1222
# OBSOLETE
1223
# OBSOLETE
1224
# OBSOLETE // LDHH
1225
# OBSOLETE
1226
# OBSOLETE void::function::do_ldhh:unsigned32 *ra, unsigned32 rb, unsigned32 src
1227
# OBSOLETE      WRITE32_QUEUE (ra, MEM(signed, rb + src, 2) << 16);
1228
# OBSOLETE
1229
# OBSOLETE _IMEM,00001,XX,6.RA,6.RB,6.SRC_6:IMEM:short:mu:LDHH
1230
# OBSOLETE "ldhh r, @(r, )":XX == 0
1231
# OBSOLETE "ldhh r, @(r%s, r)"
1232
# OBSOLETE      do_ldhh(_SD, Ra, Rb, src);
1233
# OBSOLETE      do_incr(_SD, XX, &GPR[RB], 2);
1234
# OBSOLETE _IMEM,00001,10,6.RA,6.RB,_IMM32:IMEM:long:mu:LDHH long
1235
# OBSOLETE "ldhh r, @(r, )"
1236
# OBSOLETE      do_ldhh(_SD, Ra, Rb, imm);
1237
# OBSOLETE
1238
# OBSOLETE
1239
# OBSOLETE
1240
# OBSOLETE // LDHU
1241
# OBSOLETE
1242
# OBSOLETE void::function::do_ldhu:unsigned32 *ra, unsigned32 rb, unsigned32 src
1243
# OBSOLETE      WRITE32_QUEUE (ra, MEM(unsigned, rb + src, 2));
1244
# OBSOLETE
1245
# OBSOLETE _IMEM,01010,XX,6.RA,6.RB,6.SRC_6:IMEM:short:mu:LDHU
1246
# OBSOLETE "ldhu r, @(r, )":XX == 0
1247
# OBSOLETE "ldhu r, @(r%s, r)"
1248
# OBSOLETE      do_ldhu(_SD, Ra, Rb, src);
1249
# OBSOLETE      do_incr(_SD, XX, &GPR[RB], 2);
1250
# OBSOLETE _IMEM,01010,10,6.RA,6.RB,_IMM32:IMEM:long:mu:LDHU long
1251
# OBSOLETE "ldhu r, @(r, )"
1252
# OBSOLETE      do_ldhu(_SD, Ra, Rb, imm);
1253
# OBSOLETE
1254
# OBSOLETE
1255
# OBSOLETE
1256
# OBSOLETE // LDW
1257
# OBSOLETE
1258
# OBSOLETE void::function::do_ldw:unsigned32 *ra, unsigned32 rb, unsigned32 src
1259
# OBSOLETE      WRITE32_QUEUE (ra, MEM(signed, rb + src, 4));
1260
# OBSOLETE
1261
# OBSOLETE _IMEM,00100,XX,6.RA,6.RB,6.SRC_6:IMEM:short:mu:LDW
1262
# OBSOLETE "ldw r, @(r, )":XX == 0
1263
# OBSOLETE "ldw r, @(r%s, r)"
1264
# OBSOLETE      do_ldw(_SD, Ra, Rb, src);
1265
# OBSOLETE      do_incr(_SD, XX, &GPR[RB], 4);
1266
# OBSOLETE _IMEM,00100,10,6.RA,6.RB,_IMM32:IMEM:long:mu:LDW long
1267
# OBSOLETE "ldw r, @(r, )"
1268
# OBSOLETE      do_ldw(_SD, Ra, Rb, imm);
1269
# OBSOLETE
1270
# OBSOLETE
1271
# OBSOLETE
1272
# OBSOLETE // MACa
1273
# OBSOLETE
1274
# OBSOLETE void::function::do_mac:unsigned64 *aa, unsigned32 *ra, signed32 rb, signed32 src
1275
# OBSOLETE      unsigned64 accum = *aa;
1276
# OBSOLETE      accum += (signed64) (rb) * (signed64) (src);
1277
# OBSOLETE      WRITE64_QUEUE (aa, accum);
1278
# OBSOLETE      WRITE32_QUEUE (ra, EXTRACTED64(accum, 32, 63));
1279
# OBSOLETE
1280
# OBSOLETE _IALU2,10100,0,1.AA,6.RA,6.RB,6.RC:IALU2:short:iu:MACa
1281
# OBSOLETE "mac r, r, r"
1282
# OBSOLETE      do_mac(_SD, Aa, Ra, Rb, Rc);
1283
# OBSOLETE _IALU2,10100,1,1.AA,6.RA,6.RB,_IMM6:IALU2:short:iu:MACa imm
1284
# OBSOLETE "mac r, r, "
1285
# OBSOLETE      do_mac(_SD, Aa, Ra, Rb, imm);
1286
# OBSOLETE
1287
# OBSOLETE
1288
# OBSOLETE
1289
# OBSOLETE // MACSa
1290
# OBSOLETE
1291
# OBSOLETE void::function::do_macs:unsigned64 *aa, unsigned32 *ra, signed32 rb, signed32 src
1292
# OBSOLETE      unsigned64 accum = *aa;
1293
# OBSOLETE      accum += ((signed64) (rb) * (signed64) (src)) << 1;
1294
# OBSOLETE      WRITE64_QUEUE (aa, accum);
1295
# OBSOLETE      WRITE32_QUEUE (ra, EXTRACTED64(accum, 0, 31));
1296
# OBSOLETE
1297
# OBSOLETE _IALU2,10101,0,1.AA,6.RA,6.RB,6.RC:IALU2:short:iu:MACSa
1298
# OBSOLETE "macs r, r, r"
1299
# OBSOLETE      do_macs(_SD, Aa, Ra, Rb, Rc);
1300
# OBSOLETE _IALU2,10101,1,1.AA,6.RA,6.RB,_IMM6:IALU2:short:iu:MACSa imm
1301
# OBSOLETE "macs r, r, "
1302
# OBSOLETE      do_macs(_SD, Aa, Ra, Rb, imm);
1303
# OBSOLETE
1304
# OBSOLETE
1305
# OBSOLETE
1306
# OBSOLETE // MODDEC | MODINC
1307
# OBSOLETE
1308
# OBSOLETE _IMEM,00111,11,6.**,6.RB,_IMM6:IMEM:short:mu:MODDEC
1309
# OBSOLETE "moddec r, "
1310
# OBSOLETE      do_incr(_SD, 3/*0b11*/, &GPR[RB], imm_5);
1311
# OBSOLETE _IMEM,00111,01,6.**,6.RB,_IMM6:IMEM:short:mu:MODINC
1312
# OBSOLETE "modinc r, "
1313
# OBSOLETE      do_incr(_SD, 1/*0b01*/, &GPR[RB], imm_5);
1314
# OBSOLETE
1315
# OBSOLETE
1316
# OBSOLETE
1317
# OBSOLETE // MSUBa
1318
# OBSOLETE
1319
# OBSOLETE void::function::do_msub:unsigned64 *aa, unsigned32 *ra, signed32 rb, signed32 src
1320
# OBSOLETE      unsigned64 accum = *aa;
1321
# OBSOLETE      accum -= (signed64) (rb) * (signed64) (src);
1322
# OBSOLETE      WRITE64_QUEUE (aa, accum);
1323
# OBSOLETE      WRITE32_QUEUE (ra, EXTRACTED64(accum, 32, 63));
1324
# OBSOLETE
1325
# OBSOLETE _IALU2,10110,0,1.AA,6.RA,6.RB,6.RC:IALU2:short:iu:MSUBa
1326
# OBSOLETE "msub r, r, r"
1327
# OBSOLETE      do_msub(_SD, Aa, Ra, Rb, Rc);
1328
# OBSOLETE _IALU2,10110,1,1.AA,6.RA,6.RB,_IMM6:IALU2:short:iu:MSUBa imm
1329
# OBSOLETE "msub r, r, "
1330
# OBSOLETE      do_msub(_SD, Aa, Ra, Rb, imm);
1331
# OBSOLETE
1332
# OBSOLETE
1333
# OBSOLETE
1334
# OBSOLETE // MSUBSa
1335
# OBSOLETE
1336
# OBSOLETE void::function::do_msubs:unsigned64 *aa, unsigned32 *ra, signed32 rb, signed32 src
1337
# OBSOLETE      unsigned64 accum = *aa;
1338
# OBSOLETE      accum -= ((signed64) (rb) * (signed64) (src)) << 1;
1339
# OBSOLETE      WRITE64_QUEUE (aa, accum);
1340
# OBSOLETE      WRITE32_QUEUE (ra, EXTRACTED64(accum, 0, 31));
1341
# OBSOLETE
1342
# OBSOLETE _IALU2,10111,0,1.AA,6.RA,6.RB,6.RC:IALU2:short:iu:MSUBSa
1343
# OBSOLETE "msubs r, r, r"
1344
# OBSOLETE      do_msubs(_SD, Aa, Ra, Rb, Rc);
1345
# OBSOLETE _IALU2,10111,1,1.AA,6.RA,6.RB,_IMM6:IALU2:short:iu:MSUBSa imm
1346
# OBSOLETE "msubs r, r, "
1347
# OBSOLETE      do_msubs(_SD, Aa, Ra, Rb, imm);
1348
# OBSOLETE
1349
# OBSOLETE
1350
# OBSOLETE
1351
# OBSOLETE // MUL
1352
# OBSOLETE
1353
# OBSOLETE void::function::do_mul:unsigned32 *ra, unsigned32 rb, unsigned32 src
1354
# OBSOLETE      WRITE32_QUEUE (ra, rb * src);
1355
# OBSOLETE
1356
# OBSOLETE _IALU2,10000,00,6.RA,6.RB,6.RC:IALU2:short:iu:MUL
1357
# OBSOLETE "mul r, r, r"
1358
# OBSOLETE      do_mul(_SD, Ra, Rb, Rc);
1359
# OBSOLETE _IALU2,10000,10,6.RA,6.RB,_IMM6:IALU2:short:iu:MUL imm
1360
# OBSOLETE "mul r, r, "
1361
# OBSOLETE      do_mul(_SD, Ra, Rb, imm);
1362
# OBSOLETE
1363
# OBSOLETE
1364
# OBSOLETE
1365
# OBSOLETE // MUL2H
1366
# OBSOLETE
1367
# OBSOLETE void::function::do_mul2h:unsigned32 *ra, unsigned32 rb, unsigned32 src
1368
# OBSOLETE      unsigned16 high = VH2_4(rb) * VH2_4(src);
1369
# OBSOLETE      unsigned16 low  = VL2_4(rb) * VL2_4(src);
1370
# OBSOLETE      WRITE32_QUEUE (ra, (high << 16) | low);
1371
# OBSOLETE
1372
# OBSOLETE _IALU2,00000,00,6.RA,6.RB,6.RC:IALU2:short:iu:MUL2H
1373
# OBSOLETE "mul2h r, r, r"
1374
# OBSOLETE      do_mul2h(_SD, Ra, Rb, Rc);
1375
# OBSOLETE _IALU2,00000,10,6.RA,6.RB,_IMM6:IALU2:short:iu:MUL2H imm
1376
# OBSOLETE "mul2h r, r, "
1377
# OBSOLETE      do_mul2h(_SD, Ra, Rb, immHL);
1378
# OBSOLETE
1379
# OBSOLETE
1380
# OBSOLETE
1381
# OBSOLETE // MULX
1382
# OBSOLETE
1383
# OBSOLETE void::function::do_mulx:unsigned64 *aa, signed32 rb, signed32 src
1384
# OBSOLETE      WRITE64_QUEUE (aa, (signed64) (rb) * (signed64) (src));
1385
# OBSOLETE
1386
# OBSOLETE _IALU2,11000,00,5.*,1.AA,6.RB,6.RC:IALU2:short:iu:MULX
1387
# OBSOLETE "mulx a, r, r"
1388
# OBSOLETE      do_mulx(_SD, Aa, Rb, Rc);
1389
# OBSOLETE _IALU2,11000,10,5.*,1.AA,6.RB,_IMM6:IALU2:short:iu:MULX imm
1390
# OBSOLETE "mulx a, r, "
1391
# OBSOLETE      do_mulx(_SD, Aa, Rb, imm);
1392
# OBSOLETE
1393
# OBSOLETE
1394
# OBSOLETE // MULX2H
1395
# OBSOLETE
1396
# OBSOLETE void::function::do_mulx2h:int ra, signed32 rb, signed32 src, int high
1397
# OBSOLETE      signed32 result = rb * src;
1398
# OBSOLETE      if (!high)
1399
# OBSOLETE        {
1400
# OBSOLETE          ra = make_even_reg(_SD, ra, "MULX2H");
1401
# OBSOLETE          if (ra != 0)
1402
# OBSOLETE            WRITE32_QUEUE (&GPR[ra+1], result);
1403
# OBSOLETE        }
1404
# OBSOLETE      else if (ra != 0)
1405
# OBSOLETE        {
1406
# OBSOLETE            WRITE32_QUEUE (&GPR[ra+0], result);
1407
# OBSOLETE        }
1408
# OBSOLETE
1409
# OBSOLETE _IALU2,00001,00,6.RA,6.RB,6.RC:IALU2:short:iu:MULX2H
1410
# OBSOLETE "mul2h r, r, r"
1411
# OBSOLETE      do_mulx2h(_SD, RA, RbH, RcH, 1);
1412
# OBSOLETE      do_mulx2h(_SD, RA, RbL, RcL, 0);
1413
# OBSOLETE _IALU2,00001,10,6.RA,6.RB,_IMM6:IALU2:short:iu:MULX2H imm
1414
# OBSOLETE "mul2h r, r, "
1415
# OBSOLETE      do_mulx2h(_SD, RA, RbH, imm, 1);
1416
# OBSOLETE      do_mulx2h(_SD, RA, RbL, imm, 0);
1417
# OBSOLETE
1418
# OBSOLETE // MULHXpp
1419
# OBSOLETE
1420
# OBSOLETE void::function::do_mulhx:int pp, unsigned32 *ra, unsigned32 rb, unsigned32 src
1421
# OBSOLETE      signed32 value = 0;
1422
# OBSOLETE      switch (pp) {
1423
# OBSOLETE      case 0: /* LL */
1424
# OBSOLETE        value = SEXT32(VL2_4(rb), 16) * SEXT32(VL2_4(src), 16);
1425
# OBSOLETE        break;
1426
# OBSOLETE      case 1: /* LH */
1427
# OBSOLETE        value = SEXT32(VL2_4(rb), 16) * SEXT32(VH2_4(src), 16);
1428
# OBSOLETE        break;
1429
# OBSOLETE      case 2: /* HL */
1430
# OBSOLETE        value = SEXT32(VH2_4(rb), 16) * SEXT32(VL2_4(src), 16);
1431
# OBSOLETE        break;
1432
# OBSOLETE      case 3: /* HH */
1433
# OBSOLETE        value = SEXT32(VH2_4(rb), 16) * SEXT32(VH2_4(src), 16);
1434
# OBSOLETE        break;
1435
# OBSOLETE      default:
1436
# OBSOLETE        sim_engine_abort (SD, CPU, cia, "do_mulhx - internal error - bad switch");
1437
# OBSOLETE      }
1438
# OBSOLETE      WRITE32_QUEUE (ra, value);
1439
# OBSOLETE
1440
# OBSOLETE _IALU2,001,pp,00,6.RA,6.RB,6.RC:IALU2:short:iu:MULHXpp
1441
# OBSOLETE "mulhx%s r, r, r"
1442
# OBSOLETE      do_mulhx(_SD, pp, Ra, Rb, Rc);
1443
# OBSOLETE _IALU2,001,pp,10,6.RA,6.RB,_IMM6:IALU2:short:iu:MULHXpp imm
1444
# OBSOLETE "mulhx%s r, r, "
1445
# OBSOLETE      do_mulhx(_SD, pp, Ra, Rb, immHL);
1446
# OBSOLETE
1447
# OBSOLETE
1448
# OBSOLETE
1449
# OBSOLETE // MULXS
1450
# OBSOLETE
1451
# OBSOLETE void::function::do_mulxs:unsigned64 *aa, signed32 rb, signed32 src
1452
# OBSOLETE      WRITE64_QUEUE (aa, ((signed64) (rb) * (signed64) (src)) << 1);
1453
# OBSOLETE
1454
# OBSOLETE _IALU2,11001,00,5.*,1.AA,6.RB,6.RC:IALU2:short:iu:MULXS
1455
# OBSOLETE "mulxs a, r, r"
1456
# OBSOLETE      do_mulxs(_SD, Aa, Rb, Rc);
1457
# OBSOLETE _IALU2,11001,10,5.*,1.AA,6.RB,_IMM6:IALU2:short:iu:MULXS imm
1458
# OBSOLETE "mulxs a, r, "
1459
# OBSOLETE      do_mulxs(_SD, Aa, Rb, imm);
1460
# OBSOLETE
1461
# OBSOLETE
1462
# OBSOLETE
1463
# OBSOLETE // MVFACC
1464
# OBSOLETE
1465
# OBSOLETE void::function::do_mvfacc:unsigned32 *ra, unsigned64 ab, unsigned32 src
1466
# OBSOLETE      while (src > 63) src -= 64;
1467
# OBSOLETE      WRITE32_QUEUE (ra, ((signed64)ab) >> src);
1468
# OBSOLETE
1469
# OBSOLETE _IALU2,11111,00,6.RA,5.*,1.AB,6.RC:IALU2:short:iu:MVFACC
1470
# OBSOLETE "mvfacc r, a, r"
1471
# OBSOLETE      do_mvfacc(_SD, Ra, *Ab, Rc);
1472
# OBSOLETE _IALU2,11111,10,6.RA,5.*,1.AB,_IMM6:IALU2:short:iu:MVFACC imm
1473
# OBSOLETE "mvfacc r, a, "
1474
# OBSOLETE      do_mvfacc(_SD, Ra, *Ab, imm_6u);
1475
# OBSOLETE
1476
# OBSOLETE
1477
# OBSOLETE
1478
# OBSOLETE // MVFSYS
1479
# OBSOLETE
1480
# OBSOLETE _BRA,11110,00,6.RA,6.CR,6.ID:BRA:short:mu:MVFSYS
1481
# OBSOLETE "mvfsys r, cr"
1482
# OBSOLETE      switch (ID) {
1483
# OBSOLETE      case 0:
1484
# OBSOLETE        if (CR >= NR_CONTROL_REGISTERS)
1485
# OBSOLETE          sim_engine_abort (SD, CPU, cia, "FIXME - illegal CR");
1486
# OBSOLETE        else
1487
# OBSOLETE          WRITE32_QUEUE (Ra, (CPU)->regs.control[CR]);
1488
# OBSOLETE        break;
1489
# OBSOLETE      case 1:
1490
# OBSOLETE        WRITE32_QUEUE (Ra, PSWL);
1491
# OBSOLETE        break;
1492
# OBSOLETE      case 2:
1493
# OBSOLETE        WRITE32_QUEUE (Ra, EXTRACTED32(PSWH, 16, 31));
1494
# OBSOLETE        break;
1495
# OBSOLETE      case 3:
1496
# OBSOLETE        WRITE32_QUEUE (Ra, PSW_FLAG_VAL(CR));
1497
# OBSOLETE        break;
1498
# OBSOLETE      default:
1499
# OBSOLETE        sim_engine_abort (SD, CPU, cia, "FIXME - illegal ID");
1500
# OBSOLETE      }
1501
# OBSOLETE
1502
# OBSOLETE
1503
# OBSOLETE
1504
# OBSOLETE // MVTACC
1505
# OBSOLETE
1506
# OBSOLETE _IALU2,01111,00,5.*,1.AA,6.RB,6.RC:IALU2:short:iu:MVTACC
1507
# OBSOLETE "mvtacc a, r, r"
1508
# OBSOLETE      WRITE64_QUEUE (Aa, INSERTED64(RbU, 0, 31) | (RcU));
1509
# OBSOLETE
1510
# OBSOLETE
1511
# OBSOLETE
1512
# OBSOLETE // MVTSYS
1513
# OBSOLETE
1514
# OBSOLETE _BRA,01110,00,6.CR,6.RB,6.ID:BRA:short:mu:MVTSYS
1515
# OBSOLETE "mvtsys cr, r"
1516
# OBSOLETE      switch (ID) {
1517
# OBSOLETE      case 0:                 /* control register */
1518
# OBSOLETE        if (CR >= NR_CONTROL_REGISTERS)
1519
# OBSOLETE          sim_engine_abort (SD, CPU, cia, "FIXME - illegal CR");
1520
# OBSOLETE        else
1521
# OBSOLETE          {
1522
# OBSOLETE            unsigned32 value = Rb;
1523
# OBSOLETE            CPU->mvtsys_left_p = 1;
1524
# OBSOLETE            if (CR == processor_status_word_cr)
1525
# OBSOLETE              {
1526
# OBSOLETE                unsigned32 ds = PSW & BIT32 (PSW_DS); /* preserve ds */
1527
# OBSOLETE                value = ds | (value & PSW_VALID);
1528
# OBSOLETE              }
1529
# OBSOLETE            else if (CR == backup_processor_status_word_cr
1530
# OBSOLETE                     || CR == debug_backup_processor_status_word_cr)
1531
# OBSOLETE              value &= DPSW_VALID;
1532
# OBSOLETE            else if (CR == eit_vector_base_cr)
1533
# OBSOLETE              value &= EIT_VALID;
1534
# OBSOLETE            WRITE32_QUEUE (&(CPU)->regs.control[CR], value);
1535
# OBSOLETE          }
1536
# OBSOLETE        break;
1537
# OBSOLETE      case 1:                 /* PSWL */
1538
# OBSOLETE        WRITE32_QUEUE_MASK (&PSW, EXTRACTED32(Rb, 16, 31),
1539
# OBSOLETE                            PSW_VALID & 0x0000ffff);
1540
# OBSOLETE        break;
1541
# OBSOLETE      case 2:                 /* PSWH */
1542
# OBSOLETE        {
1543
# OBSOLETE          unsigned32 ds = PSW & BIT32 (PSW_DS);       /* preserve ds */
1544
# OBSOLETE          WRITE32_QUEUE_MASK (&PSW, (EXTRACTED32(Rb, 16, 31) << 16) | ds,
1545
# OBSOLETE                              (PSW_VALID | ds) & 0xffff0000);
1546
# OBSOLETE        }
1547
# OBSOLETE        break;
1548
# OBSOLETE      case 3:                 /* FLAG */
1549
# OBSOLETE        PSW_FLAG_SET_QUEUE(CR, Rb & 1);
1550
# OBSOLETE        break;
1551
# OBSOLETE      default:
1552
# OBSOLETE        sim_engine_abort (SD, CPU, cia, "FIXME - illegal ID");
1553
# OBSOLETE      }
1554
# OBSOLETE
1555
# OBSOLETE
1556
# OBSOLETE
1557
# OBSOLETE // NOP
1558
# OBSOLETE
1559
# OBSOLETE _BRA,01111,00,6.**,6.**,6.**:BRA:short:iu,mu:NOP
1560
# OBSOLETE "nop"
1561
# OBSOLETE      /* NOP */;
1562
# OBSOLETE
1563
# OBSOLETE
1564
# OBSOLETE // NOT
1565
# OBSOLETE
1566
# OBSOLETE _LOGIC,11001,00,6.RA,6.RB,6.*:LOGIC:short:iu,mu:NOT
1567
# OBSOLETE "not r, r"
1568
# OBSOLETE      WRITE32_QUEUE (Ra, ~Rb);
1569
# OBSOLETE
1570
# OBSOLETE
1571
# OBSOLETE
1572
# OBSOLETE // NOTFG
1573
# OBSOLETE
1574
# OBSOLETE _LOGIC,01001,00,***,3.FA,***,3.FB,***,3.FC:LOGIC:short:iu,mu:NOTFG
1575
# OBSOLETE "notfg f, f"
1576
# OBSOLETE      PSW_FLAG_SET_QUEUE(FA, !PSW_FLAG_VAL(FB));
1577
# OBSOLETE
1578
# OBSOLETE
1579
# OBSOLETE // OR
1580
# OBSOLETE
1581
# OBSOLETE _LOGIC,11010,00,6.RA,6.RB,6.RC:LOGIC:short:iu,mu:OR
1582
# OBSOLETE "or r, r, r"
1583
# OBSOLETE      WRITE32_QUEUE (Ra, Rb | Rc);
1584
# OBSOLETE _LOGIC,11010,10,6.RA,6.RB,_IMM6:LOGIC:short:iu,mu:OR imm
1585
# OBSOLETE "or r, r, "
1586
# OBSOLETE      WRITE32_QUEUE (Ra, Rb | imm);
1587
# OBSOLETE _LOGIC,11010,10,6.RA,6.RB,_IMM32:LOGIC:long:iu,mu:OR imm long
1588
# OBSOLETE "or r, r, "
1589
# OBSOLETE      WRITE32_QUEUE (Ra, Rb | imm);
1590
# OBSOLETE
1591
# OBSOLETE
1592
# OBSOLETE
1593
# OBSOLETE // ORFG
1594
# OBSOLETE
1595
# OBSOLETE _LOGIC,01010,00,***,3.FA,***,3.FB,***,3.FC:LOGIC:short:iu,mu:ORFG
1596
# OBSOLETE "orfg f, f, f"
1597
# OBSOLETE      PSW_FLAG_SET_QUEUE(FA, PSW_FLAG_VAL(FB) | PSW_FLAG_VAL(FC));
1598
# OBSOLETE _LOGIC,01010,10,***,3.FA,***,3.FB,_IMM6:LOGIC:short:iu,mu:ORFG imm
1599
# OBSOLETE "orfg f, f, "
1600
# OBSOLETE      PSW_FLAG_SET_QUEUE(FA, PSW_FLAG_VAL(FB) | (imm_6 & 1));
1601
# OBSOLETE
1602
# OBSOLETE
1603
# OBSOLETE
1604
# OBSOLETE // REIT
1605
# OBSOLETE
1606
# OBSOLETE _BRA,01000,00,6.**,6.**,6.**:BRA:short:mu:REIT
1607
# OBSOLETE "reit"
1608
# OBSOLETE      WRITE32_QUEUE (&PSW, bPSW);
1609
# OBSOLETE      nia = bPC;
1610
# OBSOLETE
1611
# OBSOLETE
1612
# OBSOLETE
1613
# OBSOLETE
1614
# OBSOLETE // REPEAT
1615
# OBSOLETE
1616
# OBSOLETE void::function::do_repeat:unsigned32 count, address_word pcaddr
1617
# OBSOLETE      address_word rpt_s = cia + 8;
1618
# OBSOLETE      address_word rpt_e = cia + pcaddr;
1619
# OBSOLETE
1620
# OBSOLETE      if (count == 0)
1621
# OBSOLETE        sim_engine_abort (SD, CPU, cia, "REPEAT with ra=0 and REPEATI with imm = 0 is forbidden.");
1622
# OBSOLETE      if (count > 1)
1623
# OBSOLETE        PSW_SET_QUEUE (PSW_RP, 1);
1624
# OBSOLETE      if (rpt_e  < rpt_s + 0x10)
1625
# OBSOLETE        sim_io_eprintf (sd, "warning: 0x%lx: REPEAT or REPEATI loop is too small\n", (long) cia);
1626
# OBSOLETE      WRITE32_QUEUE (&RPT_C, count - 1);
1627
# OBSOLETE      WRITE32_QUEUE (&RPT_S, rpt_s);
1628
# OBSOLETE      WRITE32_QUEUE (&RPT_E, rpt_e);
1629
# OBSOLETE
1630
# OBSOLETE _BRA,11000,00,6.RA,6.**,6.RC:BRA:short:mu:REPEAT
1631
# OBSOLETE "repeat r, r"
1632
# OBSOLETE      do_repeat(_SD, val_Ra, pcaddr);
1633
# OBSOLETE _BRA,11000,10,6.RA,_IMM12:BRA:short:mu:REPEAT imm
1634
# OBSOLETE "repeat r, "
1635
# OBSOLETE      do_repeat(_SD, val_Ra, pcaddr);
1636
# OBSOLETE _BRA,11000,10,6.RA,6.**,_IMM32:BRA:long:mu:REPEAT imm long
1637
# OBSOLETE "repeat r, "
1638
# OBSOLETE      do_repeat(_SD, val_Ra, pcaddr);
1639
# OBSOLETE
1640
# OBSOLETE
1641
# OBSOLETE
1642
# OBSOLETE
1643
# OBSOLETE // REPEATI
1644
# OBSOLETE
1645
# OBSOLETE _BRA,11010,00,6.IMM_6,6.**,6.RC:BRA:short:mu:REPEATI
1646
# OBSOLETE "repeati , r"
1647
# OBSOLETE      do_repeat(_SD, IMM_6, pcaddr);
1648
# OBSOLETE _BRA,11010,10,6.IMM_6,_IMM12:BRA:short:mu:REPEATI imm
1649
# OBSOLETE "repeati , "
1650
# OBSOLETE      do_repeat(_SD, IMM_6, pcaddr);
1651
# OBSOLETE _BRA,11010,10,6.IMM_6,6.**,_IMM32:BRA:long:mu:REPEATI imm long
1652
# OBSOLETE "repeati , "
1653
# OBSOLETE      do_repeat(_SD, IMM_6, pcaddr);
1654
# OBSOLETE
1655
# OBSOLETE
1656
# OBSOLETE
1657
# OBSOLETE
1658
# OBSOLETE // RTD
1659
# OBSOLETE
1660
# OBSOLETE _BRA,01010,00,6.*,6.*,6.*:BRA:short:mu:RTD
1661
# OBSOLETE "rtd"
1662
# OBSOLETE      WRITE32_QUEUE (&PSW, DPSW);
1663
# OBSOLETE      nia = DPC;
1664
# OBSOLETE
1665
# OBSOLETE
1666
# OBSOLETE
1667
# OBSOLETE
1668
# OBSOLETE // ROT
1669
# OBSOLETE
1670
# OBSOLETE _LOGIC,10100,00,6.RA,6.RB,6.RC:LOGIC:short:iu,mu:ROT
1671
# OBSOLETE "rot r, r, r"
1672
# OBSOLETE      WRITE32_QUEUE (Ra, ROT32(Rb, Rc & 0x1f));
1673
# OBSOLETE _LOGIC,10100,10,6.RA,6.RB,_IMM6:LOGIC:short:iu,mu:ROT imm
1674
# OBSOLETE "rot r, r, "
1675
# OBSOLETE      WRITE32_QUEUE (Ra, ROT32(Rb, imm & 0x1f));
1676
# OBSOLETE
1677
# OBSOLETE
1678
# OBSOLETE
1679
# OBSOLETE
1680
# OBSOLETE // ROT2H
1681
# OBSOLETE
1682
# OBSOLETE void::function::do_rot2h:unsigned32 *ra, unsigned32 rb, signed32 src
1683
# OBSOLETE      unsigned16 high = ROTR16(VH2_4(rb), VH2_4(src) & 0xf);
1684
# OBSOLETE      unsigned16 low  = ROTR16(VL2_4(rb), VL2_4(src) & 0xf);
1685
# OBSOLETE      WRITE32_QUEUE (ra, (high << 16) | low);
1686
# OBSOLETE
1687
# OBSOLETE _LOGIC,10101,00,6.RA,6.RB,6.RC:LOGIC:short:iu,mu:ROT2H
1688
# OBSOLETE "rot2h r, r, r"
1689
# OBSOLETE      do_rot2h(_SD, Ra, Rb, Rc);
1690
# OBSOLETE _LOGIC,10101,10,6.RA,6.RB,_IMM6:LOGIC:short:iu,mu:ROT2H imm
1691
# OBSOLETE "rot2h r, r, "
1692
# OBSOLETE      do_rot2h(_SD, Ra, Rb, immHL);
1693
# OBSOLETE
1694
# OBSOLETE
1695
# OBSOLETE
1696
# OBSOLETE
1697
# OBSOLETE // SAT
1698
# OBSOLETE
1699
# OBSOLETE void::function::do_sat:signed32 *ra, signed32 rb, signed32 src
1700
# OBSOLETE      int bits = LSMASKED32(src, 4, 0); /* 5 */
1701
# OBSOLETE      signed32 sat = LSMASK32(bits, 0) >> 2;
1702
# OBSOLETE      signed32 nsat = ~sat;
1703
# OBSOLETE      signed32 value;
1704
# OBSOLETE      if (bits != src)
1705
# OBSOLETE        sim_io_eprintf (sd, "warning: 0x%lx:SAT bit overflow\n", (long) cia);
1706
# OBSOLETE      if (bits == 0)
1707
# OBSOLETE        value = rb;
1708
# OBSOLETE      else if (rb >= sat)
1709
# OBSOLETE        value = sat;
1710
# OBSOLETE      else if (rb <= nsat)
1711
# OBSOLETE        value = nsat;
1712
# OBSOLETE      else
1713
# OBSOLETE        value = rb;
1714
# OBSOLETE      WRITE32_QUEUE (ra, value);
1715
# OBSOLETE
1716
# OBSOLETE _IALU2,01000,00,6.RA,6.RB,6.RC:IALU2:short:iu:SAT
1717
# OBSOLETE "sat r, r, r"
1718
# OBSOLETE      do_sat(_SD, Ra, Rb, Rc);
1719
# OBSOLETE _IALU2,01000,10,6.RA,6.RB,_IMM6:IALU2:short:iu:SAT imm
1720
# OBSOLETE "sat r, r, "
1721
# OBSOLETE      do_sat(_SD, Ra, Rb, imm_5);
1722
# OBSOLETE
1723
# OBSOLETE
1724
# OBSOLETE
1725
# OBSOLETE
1726
# OBSOLETE // SAT2H
1727
# OBSOLETE
1728
# OBSOLETE void::function::do_sath:signed32 *ra, signed32 rb, signed32 src, int high, int updates_f4
1729
# OBSOLETE      int bits = LSMASKED32(src, 4, 0); /* 5 */
1730
# OBSOLETE      signed32 sat = LSMASK32(bits, 0) >> 2;
1731
# OBSOLETE      signed32 nsat = ~sat;
1732
# OBSOLETE      signed32 value;
1733
# OBSOLETE      if (bits != src)
1734
# OBSOLETE        sim_io_eprintf (sd, "warning: 0x%lx:SAT bit overflow\n", (long) cia);
1735
# OBSOLETE      if (bits == 0)
1736
# OBSOLETE        value = rb;
1737
# OBSOLETE      else if (rb >= sat)
1738
# OBSOLETE        value = sat;
1739
# OBSOLETE      else if (rb <= nsat)
1740
# OBSOLETE        value = nsat;
1741
# OBSOLETE      else
1742
# OBSOLETE        value = rb;
1743
# OBSOLETE      if (high)
1744
# OBSOLETE        WRITE32_QUEUE_MASK (ra, value << 16, 0xffff0000);
1745
# OBSOLETE      else
1746
# OBSOLETE        WRITE32_QUEUE_MASK (ra, value, 0x0000ffff);
1747
# OBSOLETE      if (updates_f4)
1748
# OBSOLETE        {
1749
# OBSOLETE          /* if MU instruction was a MVTSYS (lkr), unqueue register writes now */
1750
# OBSOLETE          if(STATE_CPU (sd, 0)->mvtsys_left_p)
1751
# OBSOLETE            unqueue_writes (sd, STATE_CPU (sd, 0), cia);
1752
# OBSOLETE          PSW_FLAG_SET_QUEUE(PSW_S_FLAG, PSW_FLAG_VAL(PSW_S_FLAG) ^ (value & 1));
1753
# OBSOLETE        }
1754
# OBSOLETE
1755
# OBSOLETE _IALU2,01001,00,6.RA,6.RB,6.RC:IALU2:short:iu:SAT2H
1756
# OBSOLETE "sat2h r, r, r"
1757
# OBSOLETE      do_sath(_SD, Ra, RbH, RcH, 1, 0);
1758
# OBSOLETE      do_sath(_SD, Ra, RbL, RcL, 0, 0);
1759
# OBSOLETE _IALU2,01001,10,6.RA,6.RB,_IMM6:IALU2:short:iu:SAT2H imm
1760
# OBSOLETE "sat2h r, r, "
1761
# OBSOLETE      do_sath(_SD, Ra, RbH, imm_5, 1, 0);
1762
# OBSOLETE      do_sath(_SD, Ra, RbL, imm_5, 0, 0);
1763
# OBSOLETE
1764
# OBSOLETE
1765
# OBSOLETE
1766
# OBSOLETE
1767
# OBSOLETE // SATHp
1768
# OBSOLETE
1769
# OBSOLETE ::%s::p:int p
1770
# OBSOLETE      switch (p)
1771
# OBSOLETE        {
1772
# OBSOLETE        case 0: return "l";
1773
# OBSOLETE        case 1: return "h";
1774
# OBSOLETE        default: return "?";
1775
# OBSOLETE        }
1776
# OBSOLETE
1777
# OBSOLETE _IALU2,1110,p,00,6.RA,6.RB,6.RC:IALU2:short:iu:SATHP
1778
# OBSOLETE "sath%s

r, r, r"

1779
# OBSOLETE      do_sath(_SD, Ra, Rb, Rc, p, 1);
1780
# OBSOLETE _IALU2,1110,p,10,6.RA,6.RB,_IMM6:IALU2:short:iu:SATHP imm
1781
# OBSOLETE "sath%s

r, r, "

1782
# OBSOLETE      do_sath(_SD, Ra, Rb, imm_5, p, 1);
1783
# OBSOLETE
1784
# OBSOLETE
1785
# OBSOLETE
1786
# OBSOLETE // SATZ
1787
# OBSOLETE
1788
# OBSOLETE void::function::do_satz:signed32 *ra, signed32 rb, signed32 src
1789
# OBSOLETE      if (rb < 0)
1790
# OBSOLETE        WRITE32_QUEUE (ra, 0);
1791
# OBSOLETE      else
1792
# OBSOLETE        do_sat (_SD, ra, rb, src);
1793
# OBSOLETE
1794
# OBSOLETE _IALU2,01010,00,6.RA,6.RB,6.RC:IALU2:short:iu:SATZ
1795
# OBSOLETE "satz r, r, r"
1796
# OBSOLETE      do_satz(_SD, Ra, Rb, Rc);
1797
# OBSOLETE _IALU2,01010,10,6.RA,6.RB,_IMM6:IALU2:short:iu:SATZ imm
1798
# OBSOLETE "satz r, r, "
1799
# OBSOLETE      do_satz(_SD, Ra, Rb, imm_5);
1800
# OBSOLETE
1801
# OBSOLETE
1802
# OBSOLETE
1803
# OBSOLETE
1804
# OBSOLETE // SATZ2H
1805
# OBSOLETE
1806
# OBSOLETE void::function::do_satzh:signed32 *ra, signed16 rb, signed32 src, int high
1807
# OBSOLETE      int bits = LSMASKED32(src, 3, 0); /*4*/
1808
# OBSOLETE      signed16 sat = LSMASK16(bits, 0) >> 2;
1809
# OBSOLETE      signed16 nsat = 0;
1810
# OBSOLETE      signed16 value;
1811
# OBSOLETE      if (bits != src)
1812
# OBSOLETE        sim_io_eprintf (sd, "warning: 0x%lx:SATZ2H bit overflow\n", (long) cia);
1813
# OBSOLETE      if (bits == 0 && rb > sat)
1814
# OBSOLETE        value = rb;
1815
# OBSOLETE      else if (rb > sat)
1816
# OBSOLETE        value = sat;
1817
# OBSOLETE      else if (rb < nsat)
1818
# OBSOLETE        value = nsat;
1819
# OBSOLETE      else
1820
# OBSOLETE        value = rb;
1821
# OBSOLETE      if (high)
1822
# OBSOLETE        WRITE32_QUEUE_MASK (ra, value << 16, 0xffff0000);
1823
# OBSOLETE      else
1824
# OBSOLETE        WRITE32_QUEUE_MASK (ra, value, 0x0000ffff);
1825
# OBSOLETE
1826
# OBSOLETE
1827
# OBSOLETE _IALU2,01011,00,6.RA,6.RB,6.RC:IALU2:short:iu:SATZ2H
1828
# OBSOLETE "satz2h r, r, r"
1829
# OBSOLETE      do_satzh(_SD, Ra, RbH, RcH, 1);
1830
# OBSOLETE      do_satzh(_SD, Ra, RbL, RcL, 0);
1831
# OBSOLETE _IALU2,01011,10,6.RA,6.RB,_IMM6:IALU2:short:iu:SATZ2H imm
1832
# OBSOLETE "satz2h r, r, "
1833
# OBSOLETE      do_satzh(_SD, Ra, RbH, imm, 1);
1834
# OBSOLETE      do_satzh(_SD, Ra, RbL, imm, 0);
1835
# OBSOLETE
1836
# OBSOLETE
1837
# OBSOLETE
1838
# OBSOLETE
1839
# OBSOLETE // SRA
1840
# OBSOLETE
1841
# OBSOLETE void::function::do_sra:unsigned32 *ra, unsigned32 rb, signed32 src
1842
# OBSOLETE      unsigned32 value;
1843
# OBSOLETE      while (src > 31) src -= 32;
1844
# OBSOLETE      while (src < -32) src += 32;
1845
# OBSOLETE      if (src >= 0)
1846
# OBSOLETE        value = (signed32)rb >> src;
1847
# OBSOLETE      else if (src == -32)
1848
# OBSOLETE        value = 0;
1849
# OBSOLETE      else
1850
# OBSOLETE        value = rb << -src;
1851
# OBSOLETE      WRITE32_QUEUE (ra, value);
1852
# OBSOLETE
1853
# OBSOLETE _LOGIC,10000,00,6.RA,6.RB,6.RC:LOGIC:short:iu,mu:SRA
1854
# OBSOLETE "sra r, r, r"
1855
# OBSOLETE      do_sra(_SD, Ra, Rb, Rc);
1856
# OBSOLETE _LOGIC,10000,10,6.RA,6.RB,_IMM6:LOGIC:short:iu,mu:SRA imm
1857
# OBSOLETE "sra r, r, "
1858
# OBSOLETE      do_sra(_SD, Ra, Rb, imm);
1859
# OBSOLETE
1860
# OBSOLETE
1861
# OBSOLETE
1862
# OBSOLETE
1863
# OBSOLETE // SRAHp
1864
# OBSOLETE
1865
# OBSOLETE void::function::do_srah:unsigned32 *ra, unsigned32 rb, int src, int high
1866
# OBSOLETE      unsigned32 value;
1867
# OBSOLETE      while (src > 31) src -= 32;
1868
# OBSOLETE      while (src < -32) src += 32;
1869
# OBSOLETE      if (src >= 0)
1870
# OBSOLETE        value = (signed32)rb >> src;
1871
# OBSOLETE      else if (src == -32)
1872
# OBSOLETE        value = 0;
1873
# OBSOLETE      else
1874
# OBSOLETE        value = rb << -src;
1875
# OBSOLETE      if (high)
1876
# OBSOLETE        WRITE32_QUEUE_MASK (ra, value << 16, 0xffff0000);
1877
# OBSOLETE      else
1878
# OBSOLETE        WRITE32_QUEUE_MASK (ra, value, 0x0000ffff);
1879
# OBSOLETE
1880
# OBSOLETE _LOGIC,0010,p,00,6.RA,6.RB,6.RC:LOGIC:short:iu,mu:SRAHP
1881
# OBSOLETE "srah%s

r, r, r"

1882
# OBSOLETE      do_srah(_SD, Ra, Rb, Rc, p);
1883
# OBSOLETE _LOGIC,0010,p,10,6.RA,6.RB,_IMM6:LOGIC:short:iu,mu:SRAHP imm
1884
# OBSOLETE "srah%s

r, r, "

1885
# OBSOLETE      do_srah(_SD, Ra, Rb, imm, p);
1886
# OBSOLETE
1887
# OBSOLETE
1888
# OBSOLETE
1889
# OBSOLETE
1890
# OBSOLETE // SRA2H
1891
# OBSOLETE
1892
# OBSOLETE _LOGIC,10001,00,6.RA,6.RB,6.RC:LOGIC:short:iu,mu:SRA2H
1893
# OBSOLETE "sra2h r, r, r"
1894
# OBSOLETE      signed32 srcH = RcH;
1895
# OBSOLETE      signed32 srcL = RcL;
1896
# OBSOLETE      while (srcH > 15) srcH -= 16;
1897
# OBSOLETE      while (srcH < -16) srcH += 16;
1898
# OBSOLETE      while (srcL > 15) srcL -= 16;
1899
# OBSOLETE      while (srcL < -16) srcL += 16;
1900
# OBSOLETE      do_srah(_SD, Ra, RbH, srcH, 1);
1901
# OBSOLETE      do_srah(_SD, Ra, RbL, srcL, 0);
1902
# OBSOLETE _LOGIC,10001,10,6.RA,6.RB,_IMM6:LOGIC:short:iu,mu:SRA2H imm
1903
# OBSOLETE "sra2h r, r, "
1904
# OBSOLETE      signed32 src = imm;
1905
# OBSOLETE      while (src > 15) src -= 16;
1906
# OBSOLETE      while (src < -16) src += 16;
1907
# OBSOLETE      do_srah(_SD, Ra, RbH, src, 1);
1908
# OBSOLETE      do_srah(_SD, Ra, RbL, src, 0);
1909
# OBSOLETE
1910
# OBSOLETE
1911
# OBSOLETE
1912
# OBSOLETE
1913
# OBSOLETE // SRC
1914
# OBSOLETE
1915
# OBSOLETE void::function::do_src:unsigned32 *ra, unsigned32 rb, int src
1916
# OBSOLETE      unsigned32 value;
1917
# OBSOLETE      unsigned64 operand;
1918
# OBSOLETE      unsigned64 shifted;
1919
# OBSOLETE      while (src > 31) src -= 32;
1920
# OBSOLETE      while (src < -32) src += 32;
1921
# OBSOLETE      if (src >= 0)
1922
# OBSOLETE        {
1923
# OBSOLETE          operand = (INSERTED64(rb, 0, 31) | INSERTED64(*ra, 32, 63));
1924
# OBSOLETE          shifted = operand >> src;
1925
# OBSOLETE          value = EXTRACTED64(shifted, 32, 63);
1926
# OBSOLETE        }
1927
# OBSOLETE      else
1928
# OBSOLETE        {
1929
# OBSOLETE          operand = (INSERTED64(*ra, 0, 31) | INSERTED64(rb, 32, 63));
1930
# OBSOLETE          shifted = operand << -src;
1931
# OBSOLETE          value = EXTRACTED64(shifted, 0, 31);
1932
# OBSOLETE        }
1933
# OBSOLETE      WRITE32_QUEUE (ra, value);
1934
# OBSOLETE
1935
# OBSOLETE _LOGIC,10110,00,6.RA,6.RB,6.RC:LOGIC:short:iu,mu:SRC
1936
# OBSOLETE "src r, r, r"
1937
# OBSOLETE      do_src(_SD, Ra, Rb, Rc);
1938
# OBSOLETE _LOGIC,10110,10,6.RA,6.RB,_IMM6:LOGIC:short:iu,mu:SRC imm
1939
# OBSOLETE "src r, r, "
1940
# OBSOLETE      do_src(_SD, Ra, Rb, imm);
1941
# OBSOLETE
1942
# OBSOLETE
1943
# OBSOLETE
1944
# OBSOLETE
1945
# OBSOLETE // SRL
1946
# OBSOLETE
1947
# OBSOLETE void::function::do_srl:unsigned32 *ra, unsigned32 rb, int src
1948
# OBSOLETE      unsigned32 value;
1949
# OBSOLETE      while (src > 31) src -= 32;
1950
# OBSOLETE      while (src < -32) src += 32;
1951
# OBSOLETE      if (src >= 0)
1952
# OBSOLETE        value = (unsigned32)rb >> src;
1953
# OBSOLETE      else if (src == -32)
1954
# OBSOLETE        value = 0;
1955
# OBSOLETE      else
1956
# OBSOLETE        value = (unsigned32)rb << -src;
1957
# OBSOLETE      WRITE32_QUEUE (ra, value);
1958
# OBSOLETE
1959
# OBSOLETE _LOGIC,10010,00,6.RA,6.RB,6.RC:LOGIC:short:iu,mu:SRL
1960
# OBSOLETE "srl r, r, r"
1961
# OBSOLETE      do_srl(_SD, Ra, Rb, Rc);
1962
# OBSOLETE _LOGIC,10010,10,6.RA,6.RB,_IMM6:LOGIC:short:iu,mu:SRL imm
1963
# OBSOLETE "srl r, r, "
1964
# OBSOLETE      do_srl(_SD, Ra, Rb, imm);
1965
# OBSOLETE
1966
# OBSOLETE
1967
# OBSOLETE
1968
# OBSOLETE
1969
# OBSOLETE // SRLHp
1970
# OBSOLETE
1971
# OBSOLETE void::function::do_srlh:unsigned32 *ra, unsigned32 rb, int src, int high
1972
# OBSOLETE      unsigned32 value;
1973
# OBSOLETE      while (src > 31) src -= 32;
1974
# OBSOLETE      while (src < -32) src += 32;
1975
# OBSOLETE      if (src >= 0)
1976
# OBSOLETE        value = rb >> src;
1977
# OBSOLETE      else if (src == -32)
1978
# OBSOLETE        value = 0;
1979
# OBSOLETE      else
1980
# OBSOLETE        value = rb << -src;
1981
# OBSOLETE      if (high)
1982
# OBSOLETE        WRITE32_QUEUE_MASK (ra, value << 16, 0xffff0000);
1983
# OBSOLETE      else
1984
# OBSOLETE        WRITE32_QUEUE_MASK (ra, value, 0x0000ffff);
1985
# OBSOLETE
1986
# OBSOLETE _LOGIC,0011,p,00,6.RA,6.RB,6.RC:LOGIC:short:iu,mu:SRLHP
1987
# OBSOLETE "srlh%s

r, r, r"

1988
# OBSOLETE      do_srlh(_SD, Ra, Rb, Rc, p);
1989
# OBSOLETE _LOGIC,0011,p,10,6.RA,6.RB,_IMM6:LOGIC:short:iu,mu:SRLHP imm
1990
# OBSOLETE "srlh%s

r, r, "

1991
# OBSOLETE      do_srlh(_SD, Ra, Rb, imm, p);
1992
# OBSOLETE
1993
# OBSOLETE
1994
# OBSOLETE // SRL2H
1995
# OBSOLETE
1996
# OBSOLETE _LOGIC,10011,00,6.RA,6.RB,6.RC:LOGIC:short:iu,mu:SRL2H
1997
# OBSOLETE "srl2h r, r, r"
1998
# OBSOLETE      signed32 srcH = RcH;
1999
# OBSOLETE      signed32 srcL = RcL;
2000
# OBSOLETE      while (srcH > 15) srcH -= 16;
2001
# OBSOLETE      while (srcH < -16) srcH += 16;
2002
# OBSOLETE      while (srcL > 15) srcL -= 16;
2003
# OBSOLETE      while (srcL < -16) srcL += 16;
2004
# OBSOLETE      do_srlh(_SD, Ra, RbHU, srcH, 1);
2005
# OBSOLETE      do_srlh(_SD, Ra, RbLU, srcL, 0);
2006
# OBSOLETE _LOGIC,10011,10,6.RA,6.RB,_IMM6:LOGIC:short:iu,mu:SRL2H imm
2007
# OBSOLETE "srl2h r, r, "
2008
# OBSOLETE      signed32 src = imm;
2009
# OBSOLETE      while (src > 15) src -= 16;
2010
# OBSOLETE      while (src < -16) src += 16;
2011
# OBSOLETE      do_srlh(_SD, Ra, RbHU, src, 1);
2012
# OBSOLETE      do_srlh(_SD, Ra, RbLU, src, 0);
2013
# OBSOLETE
2014
# OBSOLETE
2015
# OBSOLETE
2016
# OBSOLETE
2017
# OBSOLETE // ST2H
2018
# OBSOLETE
2019
# OBSOLETE void::function::get_even_reg:int *reg, unsigned32 *r0, const char *name
2020
# OBSOLETE      if (*reg & 1)
2021
# OBSOLETE        sim_engine_abort (SD, CPU, cia,
2022
# OBSOLETE                          "0x%lx:%s odd register (r%d) used in multi-word store",
2023
# OBSOLETE                          (long) cia, name, *reg);
2024
# OBSOLETE      if (*reg == 0)
2025
# OBSOLETE        *r0 = 0;
2026
# OBSOLETE      else
2027
# OBSOLETE        *r0 = GPR[*reg];
2028
# OBSOLETE
2029
# OBSOLETE void::function::do_st2h:int ra, unsigned32 rb, unsigned32 src
2030
# OBSOLETE      unsigned32 val_ra;
2031
# OBSOLETE      unsigned32 mem;
2032
# OBSOLETE      get_even_reg(_SD, &ra, &val_ra, "ST2H");
2033
# OBSOLETE      mem = INSERTED32(val_ra, 0, 15) |
2034
# OBSOLETE            INSERTED32(GPR[ra + 1], 16, 31);
2035
# OBSOLETE      STORE(rb + src, 4, mem);
2036
# OBSOLETE
2037
# OBSOLETE _IMEM,10011,XX,6.RA,6.RB,6.SRC_6:IMEM:short:mu:ST2H
2038
# OBSOLETE "st2h r, @(r, )":XX == 0
2039
# OBSOLETE "st2h r, @(r%s, r)"
2040
# OBSOLETE      do_st2h(_SD, RA, Rb, src);
2041
# OBSOLETE      do_incr(_SD, XX, &GPR[RB], 4);
2042
# OBSOLETE _IMEM,10011,10,6.RA,6.RB,_IMM32:IMEM:long:mu:ST2H long
2043
# OBSOLETE "st2h r, @(r, )"
2044
# OBSOLETE      do_st2h(_SD, RA, Rb, imm);
2045
# OBSOLETE
2046
# OBSOLETE
2047
# OBSOLETE
2048
# OBSOLETE // ST2W
2049
# OBSOLETE
2050
# OBSOLETE void::function::do_st2w:int ra, unsigned32 rb, unsigned32 src
2051
# OBSOLETE      unsigned32 val_ra;
2052
# OBSOLETE      unsigned64 mem;
2053
# OBSOLETE      get_even_reg(_SD, &ra, &val_ra, "ST2W");
2054
# OBSOLETE      mem = INSERTED64(val_ra, 0, 31) | INSERTED64(GPR[ra + 1], 32, 63);
2055
# OBSOLETE      STORE(rb + src, 8, mem);
2056
# OBSOLETE
2057
# OBSOLETE _IMEM,10110,XX,6.RA,6.RB,6.SRC_6:IMEM:short:mu:ST2W
2058
# OBSOLETE "st2w r, @(r, )":XX == 0
2059
# OBSOLETE "st2w r, @(r%s, r)"
2060
# OBSOLETE      do_st2w(_SD, RA, Rb, src);
2061
# OBSOLETE      do_incr(_SD, XX, &GPR[RB], 8);
2062
# OBSOLETE _IMEM,10110,10,6.RA,6.RB,_IMM32:IMEM:long:mu:ST2W long
2063
# OBSOLETE "st2w r, @(r, )"
2064
# OBSOLETE      do_st2w(_SD, RA, Rb, imm);
2065
# OBSOLETE
2066
# OBSOLETE
2067
# OBSOLETE
2068
# OBSOLETE // ST4HB
2069
# OBSOLETE
2070
# OBSOLETE void::function::do_st4hb:int ra, unsigned32 rb, unsigned32 src
2071
# OBSOLETE      unsigned32 val_ra;
2072
# OBSOLETE      unsigned32 mem;
2073
# OBSOLETE      get_even_reg(_SD, &ra, &val_ra, "ST4HB");
2074
# OBSOLETE      mem = INSERTED32(EXTRACTED32(val_ra, 8, 15), 0, 7) |
2075
# OBSOLETE            INSERTED32(EXTRACTED32(val_ra, 24, 31), 8, 15) |
2076
# OBSOLETE            INSERTED32(EXTRACTED32(GPR[ra + 1], 8, 15), 16, 23) |
2077
# OBSOLETE            INSERTED32(EXTRACTED32(GPR[ra + 1], 24, 31), 24, 31);
2078
# OBSOLETE      STORE(rb + src, 4, mem);
2079
# OBSOLETE
2080
# OBSOLETE _IMEM,10101,XX,6.RA,6.RB,6.SRC_6:IMEM:short:mu:ST4HB
2081
# OBSOLETE "st4hb r, @(r, )":XX == 0
2082
# OBSOLETE "st4hb r, @(r%s, r)"
2083
# OBSOLETE      do_st4hb(_SD, RA, Rb, src);
2084
# OBSOLETE      do_incr(_SD, XX, &GPR[RB], 4);
2085
# OBSOLETE _IMEM,10101,10,6.RA,6.RB,_IMM32:IMEM:long:mu:ST4HB long
2086
# OBSOLETE "st4hb r, @(r, )"
2087
# OBSOLETE      do_st4hb(_SD, RA, Rb, imm);
2088
# OBSOLETE
2089
# OBSOLETE
2090
# OBSOLETE
2091
# OBSOLETE // STB
2092
# OBSOLETE
2093
# OBSOLETE void::function::do_stb:unsigned32 ra, unsigned32 rb, unsigned32 src
2094
# OBSOLETE      STORE(rb + src, 1, EXTRACTED32(ra, 24, 31));
2095
# OBSOLETE
2096
# OBSOLETE _IMEM,10000,XX,6.RA,6.RB,6.SRC_6:IMEM:short:mu:STB
2097
# OBSOLETE "stb r, @(r, )":XX == 0
2098
# OBSOLETE "stb r, @(r%s, r)"
2099
# OBSOLETE      do_stb(_SD, val_Ra, Rb, src);
2100
# OBSOLETE      do_incr(_SD, XX, &GPR[RB], 1);
2101
# OBSOLETE _IMEM,10000,10,6.RA,6.RB,_IMM32:IMEM:long:mu:STB long
2102
# OBSOLETE "stb r, @(r, )"
2103
# OBSOLETE      do_stb(_SD, val_Ra, Rb, imm);
2104
# OBSOLETE
2105
# OBSOLETE
2106
# OBSOLETE
2107
# OBSOLETE // STH
2108
# OBSOLETE
2109
# OBSOLETE void::function::do_sth:unsigned32 ra, unsigned32 rb, unsigned32 src
2110
# OBSOLETE      STORE(rb + src, 2, EXTRACTED32(ra, 16, 31));
2111
# OBSOLETE
2112
# OBSOLETE _IMEM,10010,XX,6.RA,6.RB,6.SRC_6:IMEM:short:mu:STH
2113
# OBSOLETE "sth r, @(r, )":XX == 0
2114
# OBSOLETE "sth r, @(r%s, r)"
2115
# OBSOLETE      do_sth(_SD, val_Ra, Rb, src);
2116
# OBSOLETE      do_incr(_SD, XX, &GPR[RB], 2);
2117
# OBSOLETE _IMEM,10010,10,6.RA,6.RB,_IMM32:IMEM:long:mu:STH long
2118
# OBSOLETE "sth r, @(r, )"
2119
# OBSOLETE      do_sth(_SD, val_Ra, Rb, imm);
2120
# OBSOLETE
2121
# OBSOLETE
2122
# OBSOLETE
2123
# OBSOLETE // STHH
2124
# OBSOLETE
2125
# OBSOLETE void::function::do_sthh:unsigned32 ra, unsigned32 rb, unsigned32 src
2126
# OBSOLETE      STORE(rb + src, 2, EXTRACTED32(ra, 0, 15));
2127
# OBSOLETE
2128
# OBSOLETE _IMEM,10001,XX,6.RA,6.RB,6.SRC_6:IMEM:short:mu:STHH
2129
# OBSOLETE "sthh r, @(r, )":XX == 0
2130
# OBSOLETE "sthh r, @(r%s, r)"
2131
# OBSOLETE      do_sthh(_SD, val_Ra, Rb, src);
2132
# OBSOLETE      do_incr(_SD, XX, &GPR[RB], 2);
2133
# OBSOLETE _IMEM,10001,10,6.RA,6.RB,_IMM32:IMEM:long:mu:STHH long
2134
# OBSOLETE "sthh r, @(r, )"
2135
# OBSOLETE      do_sthh(_SD, val_Ra, Rb, imm);
2136
# OBSOLETE
2137
# OBSOLETE
2138
# OBSOLETE
2139
# OBSOLETE // STW
2140
# OBSOLETE
2141
# OBSOLETE void::function::do_stw:unsigned32 ra, unsigned32 rb, unsigned32 src
2142
# OBSOLETE      STORE(rb + src, 4, ra);
2143
# OBSOLETE
2144
# OBSOLETE _IMEM,10100,XX,6.RA,6.RB,6.SRC_6:IMEM:short:mu:STW
2145
# OBSOLETE "stw r, @(r, )":XX == 0
2146
# OBSOLETE "stw r, @(r%s, r)"
2147
# OBSOLETE      do_stw(_SD, val_Ra, Rb, src);
2148
# OBSOLETE      do_incr(_SD, XX, &GPR[RB], 4);
2149
# OBSOLETE _IMEM,10100,10,6.RA,6.RB,_IMM32:IMEM:long:mu:STW long
2150
# OBSOLETE "stw r, @(r, )"
2151
# OBSOLETE      do_stw(_SD, val_Ra, Rb, imm);
2152
# OBSOLETE
2153
# OBSOLETE
2154
# OBSOLETE
2155
# OBSOLETE // SUB
2156
# OBSOLETE
2157
# OBSOLETE void::function::do_sub:unsigned32 *ra, unsigned32 rb, unsigned32 imm
2158
# OBSOLETE      ALU_BEGIN(rb);
2159
# OBSOLETE      ALU_SUBB(imm);
2160
# OBSOLETE      ALU_END(ra);
2161
# OBSOLETE
2162
# OBSOLETE _IALU1,00010,00,6.RA,6.RB,6.RC:IALU1:short:iu,mu:SUB
2163
# OBSOLETE "sub r, r, r"
2164
# OBSOLETE      do_sub (_SD, Ra, Rb, Rc);
2165
# OBSOLETE _IALU1,00010,10,6.RA,6.RB,_IMM6:IALU1:short:iu,mu:SUB imm
2166
# OBSOLETE "sub r, r, "
2167
# OBSOLETE      do_sub (_SD, Ra, Rb, imm);
2168
# OBSOLETE _IALU1,00010,10,6.RA,6.RB,_IMM32:IALU1:long:iu,mu:SUB imm long
2169
# OBSOLETE "sub r, r, "
2170
# OBSOLETE      do_sub (_SD, Ra, Rb, imm);
2171
# OBSOLETE
2172
# OBSOLETE
2173
# OBSOLETE
2174
# OBSOLETE // SUB2H
2175
# OBSOLETE
2176
# OBSOLETE void::function::do_sub2h:unsigned32 *ra, unsigned32 rb, unsigned32 imm
2177
# OBSOLETE      unsigned16 high = VH2_4(rb) - VH2_4(imm);
2178
# OBSOLETE      unsigned16 low  = VL2_4(rb) - VL2_4(imm);
2179
# OBSOLETE      WRITE32_QUEUE (ra, (high << 16) | low);
2180
# OBSOLETE
2181
# OBSOLETE _IALU1,00011,00,6.RA,6.RB,6.RC:IALU1:short:iu,mu:SUB2H
2182
# OBSOLETE "sub2h r, r, r"
2183
# OBSOLETE      do_sub2h (_SD, Ra, Rb, Rc);
2184
# OBSOLETE _IALU1,00011,10,6.RA,6.RB,_IMM6:IALU1:short:iu,mu:SUB2H imm
2185
# OBSOLETE "sub2h r, r, "
2186
# OBSOLETE      do_sub2h (_SD, Ra, Rb, immHL);
2187
# OBSOLETE _IALU1,00011,10,6.RA,6.RB,_IMM32:IALU1:long:iu,mu:SUB2H imm long
2188
# OBSOLETE "sub2h r, r, "
2189
# OBSOLETE      do_sub2h (_SD, Ra, Rb, imm);
2190
# OBSOLETE
2191
# OBSOLETE
2192
# OBSOLETE
2193
# OBSOLETE // SUBB
2194
# OBSOLETE
2195
# OBSOLETE void::function::do_subb:unsigned32 *ra, unsigned32 rb, unsigned32 imm
2196
# OBSOLETE      ALU_BEGIN(rb);
2197
# OBSOLETE      ALU_SUBB_B(imm, ALU_CARRY);
2198
# OBSOLETE      ALU_END(ra);
2199
# OBSOLETE
2200
# OBSOLETE _IALU1,00101,00,6.RA,6.RB,6.RC:IALU1:short:iu,mu:SUBB
2201
# OBSOLETE "subb r, r, r"
2202
# OBSOLETE      do_subb (_SD, Ra, Rb, Rc);
2203
# OBSOLETE _IALU1,00101,10,6.RA,6.RB,_IMM6:IALU1:short:iu,mu:SUBB imm
2204
# OBSOLETE "subb r, r, "
2205
# OBSOLETE      do_subb (_SD, Ra, Rb, imm);
2206
# OBSOLETE _IALU1,00101,10,6.RA,6.RB,_IMM32:IALU1:long:iu,mu:SUBB imm long
2207
# OBSOLETE "subb r, r, "
2208
# OBSOLETE      do_subb (_SD, Ra, Rb, imm);
2209
# OBSOLETE
2210
# OBSOLETE
2211
# OBSOLETE
2212
# OBSOLETE // SUBHppp
2213
# OBSOLETE
2214
# OBSOLETE void::function::do_subh_ppp:int ppp, unsigned32 *ra, unsigned32 rb, unsigned32 src
2215
# OBSOLETE      switch (ppp) {
2216
# OBSOLETE      case 0x0: /* LLL */
2217
# OBSOLETE        {
2218
# OBSOLETE        ALU16_BEGIN(VL2_4(rb));
2219
# OBSOLETE        ALU16_SUBB(VL2_4(src));
2220
# OBSOLETE        ALU16_END(ra, 0);
2221
# OBSOLETE        }
2222
# OBSOLETE        break;
2223
# OBSOLETE      case 0x1: /* LLH */
2224
# OBSOLETE        {
2225
# OBSOLETE        ALU16_BEGIN(VL2_4(rb));
2226
# OBSOLETE        ALU16_SUBB(VH2_4(src));
2227
# OBSOLETE        ALU16_END(ra, 0);
2228
# OBSOLETE        }
2229
# OBSOLETE        break;
2230
# OBSOLETE      case 0x2: /* LHL */
2231
# OBSOLETE        {
2232
# OBSOLETE        ALU16_BEGIN(VH2_4(rb));
2233
# OBSOLETE        ALU16_SUBB(VL2_4(src));
2234
# OBSOLETE        ALU16_END(ra, 0);
2235
# OBSOLETE        }
2236
# OBSOLETE        break;
2237
# OBSOLETE      case 0x3: /* LHH */
2238
# OBSOLETE        {
2239
# OBSOLETE        ALU16_BEGIN(VH2_4(rb));
2240
# OBSOLETE        ALU16_SUBB(VH2_4(src));
2241
# OBSOLETE        ALU16_END(ra, 0);
2242
# OBSOLETE        }
2243
# OBSOLETE        break;
2244
# OBSOLETE      case 0x4: /* HLL */
2245
# OBSOLETE        {
2246
# OBSOLETE        ALU16_BEGIN(VL2_4(rb));
2247
# OBSOLETE        ALU16_SUBB(VL2_4(src));
2248
# OBSOLETE        ALU16_END(ra, 1);
2249
# OBSOLETE        }
2250
# OBSOLETE        break;
2251
# OBSOLETE      case 0x5: /* HLH */
2252
# OBSOLETE        {
2253
# OBSOLETE        ALU16_BEGIN(VL2_4(rb));
2254
# OBSOLETE        ALU16_SUBB(VH2_4(src));
2255
# OBSOLETE        ALU16_END(ra, 1);
2256
# OBSOLETE        }
2257
# OBSOLETE        break;
2258
# OBSOLETE      case 0x6: /* HHL */
2259
# OBSOLETE        {
2260
# OBSOLETE        ALU16_BEGIN(VH2_4(rb));
2261
# OBSOLETE        ALU16_SUBB(VL2_4(src));
2262
# OBSOLETE        ALU16_END(ra, 1);
2263
# OBSOLETE        }
2264
# OBSOLETE        break;
2265
# OBSOLETE      case 0x7: /* HHH */
2266
# OBSOLETE        {
2267
# OBSOLETE        ALU16_BEGIN(VH2_4(rb));
2268
# OBSOLETE        ALU16_SUBB(VH2_4(src));
2269
# OBSOLETE        ALU16_END(ra, 1);
2270
# OBSOLETE        }
2271
# OBSOLETE        break;
2272
# OBSOLETE      default:
2273
# OBSOLETE        sim_engine_abort (SD, CPU, cia, "do_subh_ppp - internal error - bad switch");
2274
# OBSOLETE      }
2275
# OBSOLETE
2276
# OBSOLETE _IALU1,11,ppp,00,6.RA,6.RB,6.RC:IALU1:short:iu,mu:SUBHppp
2277
# OBSOLETE "subh%s r, r, r"
2278
# OBSOLETE      do_subh_ppp(_SD, ppp, Ra, Rb, Rc);
2279
# OBSOLETE _IALU1,11,ppp,10,6.RA,6.RB,_IMM6:IALU1:short:iu,mu:SUBHppp imm
2280
# OBSOLETE "subh%s r, r, "
2281
# OBSOLETE      do_subh_ppp(_SD, ppp, Ra, Rb, immHL);
2282
# OBSOLETE _IALU1,11,ppp,10,6.RA,6.RB,_IMM32:IALU1:long:iu,mu:SUBHppp imm long
2283
# OBSOLETE "subh%s r, r, "
2284
# OBSOLETE      do_subh_ppp(_SD, ppp, Ra, Rb, imm);
2285
# OBSOLETE
2286
# OBSOLETE
2287
# OBSOLETE
2288
# OBSOLETE // TRAP
2289
# OBSOLETE
2290
# OBSOLETE address_word::function::do_trap:address_word trap_vector, address_word nia
2291
# OBSOLETE      /* Steal trap 31 for doing system calls */
2292
# OBSOLETE      /* System calls are defined in libgloss/d30v/syscall.h.  */
2293
# OBSOLETE      if (trap_vector == EIT_VB + 0x20 + (31 << 3))
2294
# OBSOLETE        {
2295
# OBSOLETE          enum { PARM1 = 2, PARM2, PARM3, PARM4, FUNC };
2296
# OBSOLETE          if (GPR[FUNC] == 1)         /* exit */
2297
# OBSOLETE            {
2298
# OBSOLETE              sim_engine_halt (sd, STATE_CPU (sd, 0), NULL, cia, sim_exited,
2299
# OBSOLETE                               GPR[PARM1]);
2300
# OBSOLETE              return -1; /* dummy */
2301
# OBSOLETE            }
2302
# OBSOLETE          else
2303
# OBSOLETE            {
2304
# OBSOLETE              CB_SYSCALL syscall;
2305
# OBSOLETE
2306
# OBSOLETE              CB_SYSCALL_INIT (&syscall);
2307
# OBSOLETE              syscall.arg1 = GPR[PARM1];
2308
# OBSOLETE              syscall.arg2 = GPR[PARM2];
2309
# OBSOLETE              syscall.arg3 = GPR[PARM3];
2310
# OBSOLETE              syscall.arg4 = GPR[PARM4];
2311
# OBSOLETE              syscall.func = GPR[FUNC];
2312
# OBSOLETE              syscall.p1 = (PTR) SD;
2313
# OBSOLETE              syscall.read_mem = d30v_read_mem;
2314
# OBSOLETE              syscall.write_mem = d30v_write_mem;
2315
# OBSOLETE
2316
# OBSOLETE              WRITE32_QUEUE (&GPR[PARM1],
2317
# OBSOLETE                             ((cb_syscall (STATE_CALLBACK (SD), &syscall)
2318
# OBSOLETE                               == CB_RC_OK)
2319
# OBSOLETE                              ? syscall.result
2320
# OBSOLETE                              : -syscall.errcode));
2321
# OBSOLETE              return nia;
2322
# OBSOLETE            }
2323
# OBSOLETE        }
2324
# OBSOLETE      else if (TRACE_TRAP_P)
2325
# OBSOLETE        {
2326
# OBSOLETE          int reg, i;
2327
# OBSOLETE          sim_io_eprintf (sd, "\nTrap %ld:\n", (long) ((trap_vector - (EIT_VB + 0x20)) >> 3));
2328
# OBSOLETE          for (reg = 0; reg < NR_GENERAL_PURPOSE_REGISTERS; reg += 8)
2329
# OBSOLETE            {
2330
# OBSOLETE              sim_io_eprintf (sd, "r%.2d  - r%.2d: ", reg, reg+7);
2331
# OBSOLETE              for (i = 0; i < 8; i++)
2332
# OBSOLETE                sim_io_eprintf (sd, " 0x%.8lx", (long) GPR[reg+i]);
2333
# OBSOLETE              sim_io_eprintf (sd, "\n");
2334
# OBSOLETE            }
2335
# OBSOLETE
2336
# OBSOLETE          for (reg = 0; reg < 16; reg += 8)
2337
# OBSOLETE            {
2338
# OBSOLETE              sim_io_eprintf (sd, "cr%.2d - cr%.2d:", reg, reg+7);
2339
# OBSOLETE              for (i = 0; i < 8; i++)
2340
# OBSOLETE                sim_io_eprintf (sd, " 0x%.8lx", (long) CREG[reg+i]);
2341
# OBSOLETE              sim_io_eprintf (sd, "\n");
2342
# OBSOLETE            }
2343
# OBSOLETE
2344
# OBSOLETE          sim_io_eprintf (sd, "a0   - a1:  ");
2345
# OBSOLETE          for (reg = 0; reg < NR_ACCUMULATORS; reg++)
2346
# OBSOLETE            sim_io_eprintf (sd, " 0x%.8lx 0x%.8lx",
2347
# OBSOLETE                            (long)EXTRACTED64(ACC[reg], 0, 31),
2348
# OBSOLETE                            (long)EXTRACTED64(ACC[reg], 32, 63));
2349
# OBSOLETE          sim_io_eprintf (sd, "\n");
2350
# OBSOLETE
2351
# OBSOLETE          sim_io_eprintf (sd, "f0   - f7:  ");
2352
# OBSOLETE          sim_io_eprintf (sd, "     (f0) %d", (int) PSW_VAL(PSW_F0));
2353
# OBSOLETE          sim_io_eprintf (sd, "     (f1) %d", (int) PSW_VAL(PSW_F1));
2354
# OBSOLETE          sim_io_eprintf (sd, "     (f2) %d", (int) PSW_VAL(PSW_F2));
2355
# OBSOLETE          sim_io_eprintf (sd, "     (f3) %d", (int) PSW_VAL(PSW_F3));
2356
# OBSOLETE          sim_io_eprintf (sd, "      (s) %d", (int) PSW_VAL(PSW_S));
2357
# OBSOLETE          sim_io_eprintf (sd, "      (v) %d", (int) PSW_VAL(PSW_V));
2358
# OBSOLETE          sim_io_eprintf (sd, "     (va) %d", (int) PSW_VAL(PSW_VA));
2359
# OBSOLETE          sim_io_eprintf (sd, "      (c) %d\n", (int) PSW_VAL(PSW_C));
2360
# OBSOLETE
2361
# OBSOLETE          sim_io_eprintf (sd, "pswh:       ");
2362
# OBSOLETE          sim_io_eprintf (sd, "     (sm) %d", (int) PSW_VAL(PSW_SM));
2363
# OBSOLETE          sim_io_eprintf (sd, "     (ea) %d", (int) PSW_VAL(PSW_EA));
2364
# OBSOLETE          sim_io_eprintf (sd, "     (ie) %d", (int) PSW_VAL(PSW_IE));
2365
# OBSOLETE          sim_io_eprintf (sd, "     (rp) %d", (int) PSW_VAL(PSW_RP));
2366
# OBSOLETE          sim_io_eprintf (sd, "     (md) %d", (int) PSW_VAL(PSW_MD));
2367
# OBSOLETE
2368
# OBSOLETE          if (PSW_VAL(PSW_DB))
2369
# OBSOLETE            sim_io_eprintf (sd, "     (db) %d", (int) PSW_VAL(PSW_DB));
2370
# OBSOLETE
2371
# OBSOLETE          if (PSW_VAL(PSW_DS))
2372
# OBSOLETE            sim_io_eprintf (sd, "     (ds) %d", (int) PSW_VAL(PSW_DS));
2373
# OBSOLETE
2374
# OBSOLETE          sim_io_eprintf (sd, "\n");
2375
# OBSOLETE          return nia;
2376
# OBSOLETE        }
2377
# OBSOLETE      else
2378
# OBSOLETE        {
2379
# OBSOLETE          if(PSW_VAL(PSW_RP) && RPT_E == cia)
2380
# OBSOLETE            {
2381
# OBSOLETE              WRITE32_QUEUE (&bPC, RPT_S);
2382
# OBSOLETE              if (RPT_C == 0)
2383
# OBSOLETE                PSW_SET (PSW_RP, 0);
2384
# OBSOLETE            }
2385
# OBSOLETE          else
2386
# OBSOLETE            WRITE32_QUEUE (&bPC, cia + 8);
2387
# OBSOLETE          DID_TRAP = 1;
2388
# OBSOLETE          return trap_vector;
2389
# OBSOLETE        }
2390
# OBSOLETE
2391
# OBSOLETE _BRA,01001,00,6.**,6.**,6.RC:BRA:short:mu:TRAP
2392
# OBSOLETE "trap r"
2393
# OBSOLETE      nia = do_trap (_SD, EIT_VB + 0x20 + MASKED32(Rc, 24, 28), nia);
2394
# OBSOLETE _BRA,01001,10,6.**,6.**,_IMM6:BRA:short:mu:TRAP imm
2395
# OBSOLETE "trap "
2396
# OBSOLETE      nia = do_trap (_SD, EIT_VB + 0x20 + (imm_5 << 3), nia);
2397
# OBSOLETE
2398
# OBSOLETE
2399
# OBSOLETE
2400
# OBSOLETE // XOR
2401
# OBSOLETE
2402
# OBSOLETE _LOGIC,11011,00,6.RA,6.RB,6.RC:LOGIC:short:iu,mu:XOR
2403
# OBSOLETE "xor r, r, r"
2404
# OBSOLETE      WRITE32_QUEUE (Ra, Rb ^ Rc);
2405
# OBSOLETE _LOGIC,11011,10,6.RA,6.RB,_IMM6:LOGIC:short:iu,mu:XOR imm
2406
# OBSOLETE "xor r, r, "
2407
# OBSOLETE      WRITE32_QUEUE (Ra, Rb ^ imm);
2408
# OBSOLETE _LOGIC,11011,10,6.RA,6.RB,_IMM32:LOGIC:long:iu,mu:XOR imm long
2409
# OBSOLETE "xor r, r, "
2410
# OBSOLETE      WRITE32_QUEUE (Ra, Rb ^ imm);
2411
# OBSOLETE
2412
# OBSOLETE
2413
# OBSOLETE
2414
# OBSOLETE // XORFG
2415
# OBSOLETE
2416
# OBSOLETE _LOGIC,01011,00,***,3.FA,***,3.FB,***,3.FC:LOGIC:short:iu,mu:XORFG
2417
# OBSOLETE "xorfg f, f, f"
2418
# OBSOLETE      PSW_FLAG_SET_QUEUE(FA, PSW_FLAG_VAL(FB) ^ PSW_FLAG_VAL(FC));
2419
# OBSOLETE _LOGIC,01011,10,***,3.FA,***,3.FB,_IMM6:LOGIC:short:iu,mu:XORFG imm
2420
# OBSOLETE "xorfg f, f, "
2421
# OBSOLETE      PSW_FLAG_SET_QUEUE(FA, PSW_FLAG_VAL(FB) ^ (imm_6 & 1));

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.