Revision e37e863f

b/target-mips/cpu.h
240 240
    EXCP_FLUSH         = 0x109,
241 241
};
242 242

  
243
/* MIPS opcodes */
244
#define EXT_SPECIAL  0x100
245
#define EXT_SPECIAL2 0x200
246
#define EXT_REGIMM   0x300
247
#define EXT_CP0      0x400
248
#define EXT_CP1      0x500
249
#define EXT_CP2      0x600
250
#define EXT_CP3      0x700
251

  
252
enum {
253
    /* indirect opcode tables */
254
    OPC_SPECIAL  = 0x00,
255
    OPC_BREGIMM  = 0x01,
256
    OPC_CP0      = 0x10,
257
    OPC_CP1      = 0x11,
258
    OPC_CP2      = 0x12,
259
    OPC_CP3      = 0x13,
260
    OPC_SPECIAL2 = 0x1C,
261
    /* arithmetic with immediate */
262
    OPC_ADDI     = 0x08,
263
    OPC_ADDIU    = 0x09,
264
    OPC_SLTI     = 0x0A,
265
    OPC_SLTIU    = 0x0B,
266
    OPC_ANDI     = 0x0C,
267
    OPC_ORI      = 0x0D,
268
    OPC_XORI     = 0x0E,
269
    OPC_LUI      = 0x0F,
270
    /* Jump and branches */
271
    OPC_J        = 0x02,
272
    OPC_JAL      = 0x03,
273
    OPC_BEQ      = 0x04,  /* Unconditional if rs = rt = 0 (B) */
274
    OPC_BEQL     = 0x14,
275
    OPC_BNE      = 0x05,
276
    OPC_BNEL     = 0x15,
277
    OPC_BLEZ     = 0x06,
278
    OPC_BLEZL    = 0x16,
279
    OPC_BGTZ     = 0x07,
280
    OPC_BGTZL    = 0x17,
281
    OPC_JALX     = 0x1D,  /* MIPS 16 only */
282
    /* Load and stores */
283
    OPC_LB       = 0x20,
284
    OPC_LH       = 0x21,
285
    OPC_LWL      = 0x22,
286
    OPC_LW       = 0x23,
287
    OPC_LBU      = 0x24,
288
    OPC_LHU      = 0x25,
289
    OPC_LWR      = 0x26,
290
    OPC_SB       = 0x28,
291
    OPC_SH       = 0x29,
292
    OPC_SWL      = 0x2A,
293
    OPC_SW       = 0x2B,
294
    OPC_SWR      = 0x2E,
295
    OPC_LL       = 0x30,
296
    OPC_SC       = 0x38,
297
    /* Floating point load/store */
298
    OPC_LWC1     = 0x31,
299
    OPC_LWC2     = 0x32,
300
    OPC_LDC1     = 0x35,
301
    OPC_LDC2     = 0x36,
302
    OPC_SWC1     = 0x39,
303
    OPC_SWC2     = 0x3A,
304
    OPC_SDC1     = 0x3D,
305
    OPC_SDC2     = 0x3E,
306
    /* Cache and prefetch */
307
    OPC_CACHE    = 0x2F,
308
    OPC_PREF     = 0x33,
309
};
310

  
311
/* MIPS special opcodes */
312
enum {
313
    /* Shifts */
314
    OPC_SLL      = 0x00 | EXT_SPECIAL,
315
    /* NOP is SLL r0, r0, 0   */
316
    /* SSNOP is SLL r0, r0, 1 */
317
    OPC_SRL      = 0x02 | EXT_SPECIAL,
318
    OPC_SRA      = 0x03 | EXT_SPECIAL,
319
    OPC_SLLV     = 0x04 | EXT_SPECIAL,
320
    OPC_SRLV     = 0x06 | EXT_SPECIAL,
321
    OPC_SRAV     = 0x07 | EXT_SPECIAL,
322
    /* Multiplication / division */
323
    OPC_MULT     = 0x18 | EXT_SPECIAL,
324
    OPC_MULTU    = 0x19 | EXT_SPECIAL,
325
    OPC_DIV      = 0x1A | EXT_SPECIAL,
326
    OPC_DIVU     = 0x1B | EXT_SPECIAL,
327
    /* 2 registers arithmetic / logic */
328
    OPC_ADD      = 0x20 | EXT_SPECIAL,
329
    OPC_ADDU     = 0x21 | EXT_SPECIAL,
330
    OPC_SUB      = 0x22 | EXT_SPECIAL,
331
    OPC_SUBU     = 0x23 | EXT_SPECIAL,
332
    OPC_AND      = 0x24 | EXT_SPECIAL,
333
    OPC_OR       = 0x25 | EXT_SPECIAL,
334
    OPC_XOR      = 0x26 | EXT_SPECIAL,
335
    OPC_NOR      = 0x27 | EXT_SPECIAL,
336
    OPC_SLT      = 0x2A | EXT_SPECIAL,
337
    OPC_SLTU     = 0x2B | EXT_SPECIAL,
338
    /* Jumps */
339
    OPC_JR       = 0x08 | EXT_SPECIAL,
340
    OPC_JALR     = 0x09 | EXT_SPECIAL,
341
    /* Traps */
342
    OPC_TGE      = 0x30 | EXT_SPECIAL,
343
    OPC_TGEU     = 0x31 | EXT_SPECIAL,
344
    OPC_TLT      = 0x32 | EXT_SPECIAL,
345
    OPC_TLTU     = 0x33 | EXT_SPECIAL,
346
    OPC_TEQ      = 0x34 | EXT_SPECIAL,
347
    OPC_TNE      = 0x36 | EXT_SPECIAL,
348
    /* HI / LO registers load & stores */
349
    OPC_MFHI     = 0x10 | EXT_SPECIAL,
350
    OPC_MTHI     = 0x11 | EXT_SPECIAL,
351
    OPC_MFLO     = 0x12 | EXT_SPECIAL,
352
    OPC_MTLO     = 0x13 | EXT_SPECIAL,
353
    /* Conditional moves */
354
    OPC_MOVZ     = 0x0A | EXT_SPECIAL,
355
    OPC_MOVN     = 0x0B | EXT_SPECIAL,
356

  
357
    OPC_MOVCI    = 0x01 | EXT_SPECIAL,
358

  
359
    /* Special */
360
    OPC_PMON     = 0x05 | EXT_SPECIAL,
361
    OPC_SYSCALL  = 0x0C | EXT_SPECIAL,
362
    OPC_BREAK    = 0x0D | EXT_SPECIAL,
363
    OPC_SYNC     = 0x0F | EXT_SPECIAL,
364
};
365

  
366
enum {
367
    /* Mutiply & xxx operations */
368
    OPC_MADD     = 0x00 | EXT_SPECIAL2,
369
    OPC_MADDU    = 0x01 | EXT_SPECIAL2,
370
    OPC_MUL      = 0x02 | EXT_SPECIAL2,
371
    OPC_MSUB     = 0x04 | EXT_SPECIAL2,
372
    OPC_MSUBU    = 0x05 | EXT_SPECIAL2,
373
    /* Misc */
374
    OPC_CLZ      = 0x20 | EXT_SPECIAL2,
375
    OPC_CLO      = 0x21 | EXT_SPECIAL2,
376
    /* Special */
377
    OPC_SDBBP    = 0x3F | EXT_SPECIAL2,
378
};
379

  
380
/* Branch REGIMM */
381
enum {
382
    OPC_BLTZ     = 0x00 | EXT_REGIMM,
383
    OPC_BLTZL    = 0x02 | EXT_REGIMM,
384
    OPC_BGEZ     = 0x01 | EXT_REGIMM,
385
    OPC_BGEZL    = 0x03 | EXT_REGIMM,
386
    OPC_BLTZAL   = 0x10 | EXT_REGIMM,
387
    OPC_BLTZALL  = 0x12 | EXT_REGIMM,
388
    OPC_BGEZAL   = 0x11 | EXT_REGIMM,
389
    OPC_BGEZALL  = 0x13 | EXT_REGIMM,
390
    OPC_TGEI     = 0x08 | EXT_REGIMM,
391
    OPC_TGEIU    = 0x09 | EXT_REGIMM,
392
    OPC_TLTI     = 0x0A | EXT_REGIMM,
393
    OPC_TLTIU    = 0x0B | EXT_REGIMM,
394
    OPC_TEQI     = 0x0C | EXT_REGIMM,
395
    OPC_TNEI     = 0x0E | EXT_REGIMM,
396
};
397

  
398
enum {
399
    /* Coprocessor 0 (MMU) */
400
    OPC_MFC0     = 0x00 | EXT_CP0,
401
    OPC_MTC0     = 0x04 | EXT_CP0,
402
    OPC_TLBR     = 0x01 | EXT_CP0,
403
    OPC_TLBWI    = 0x02 | EXT_CP0,
404
    OPC_TLBWR    = 0x06 | EXT_CP0,
405
    OPC_TLBP     = 0x08 | EXT_CP0,
406
    OPC_ERET     = 0x18 | EXT_CP0,
407
    OPC_DERET    = 0x1F | EXT_CP0,
408
    OPC_WAIT     = 0x20 | EXT_CP0,
409
};
410

  
411 243
int cpu_mips_exec(CPUMIPSState *s);
412 244
CPUMIPSState *cpu_mips_init(void);
413 245
uint32_t cpu_mips_get_clock (void);
b/target-mips/exec.h
19 19
register host_uint_t T0 asm(AREG1);
20 20
register host_uint_t T1 asm(AREG2);
21 21
register host_uint_t T2 asm(AREG3);
22
register host_int_t Ts0 asm(AREG1);
23
register host_int_t Ts1 asm(AREG2);
24
register host_int_t Ts2 asm(AREG3);
25

  
26
#define PARAM(n) ((uint32_t)PARAM##n)
27
#define SPARAM(n) ((int32_t)PARAM##n)
28 22

  
29 23
#if defined (USE_HOST_FLOAT_REGS)
30 24
register double FT0 asm(FREG0);
31 25
register double FT1 asm(FREG1);
32 26
register double FT2 asm(FREG2);
33
register float FTS0 asm(FREG0);
34
register float FTS1 asm(FREG1);
35
register float FTS2 asm(FREG2);
36 27
#else
37 28
#define FT0 (env->ft0.d)
38 29
#define FT1 (env->ft1.d)
39 30
#define FT2 (env->ft2.d)
40
#define FTS0 (env->ft0.f)
41
#define FTS1 (env->ft1.f)
42
#define FTS2 (env->ft2.f)
43 31
#endif
44 32

  
45 33
#if defined (DEBUG_OP)
b/target-mips/helper.c
17 17
 * License along with this library; if not, write to the Free Software
18 18
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19 19
 */
20
#include "exec.h"
20
#include <stdarg.h>
21
#include <stdlib.h>
22
#include <stdio.h>
23
#include <string.h>
24
#include <inttypes.h>
25
#include <signal.h>
26
#include <assert.h>
27

  
28
#include "cpu.h"
29
#include "exec-all.h"
21 30

  
22 31
/* MIPS32 4K MMU emulation */
23 32
#ifdef MIPS_USES_R4K_TLB
......
142 151
        return -1;
143 152
    return phys_addr;
144 153
}
145
#endif
146

  
147
#if !defined(CONFIG_USER_ONLY) 
148

  
149
#define MMUSUFFIX _mmu
150
#define GETPC() (__builtin_return_address(0))
151

  
152
#define SHIFT 0
153
#include "softmmu_template.h"
154

  
155
#define SHIFT 1
156
#include "softmmu_template.h"
157

  
158
#define SHIFT 2
159
#include "softmmu_template.h"
160

  
161
#define SHIFT 3
162
#include "softmmu_template.h"
163

  
164
void tlb_fill (target_ulong addr, int is_write, int is_user, void *retaddr)
165
{
166
    TranslationBlock *tb;
167
    CPUState *saved_env;
168
    unsigned long pc;
169
    int ret;
170

  
171
    /* XXX: hack to restore env in all cases, even if not called from
172
       generated code */
173
    saved_env = env;
174
    env = cpu_single_env;
175
    ret = cpu_mips_handle_mmu_fault(env, addr, is_write, is_user, 1);
176
    if (ret) {
177
        if (retaddr) {
178
            /* now we have a real cpu fault */
179
            pc = (unsigned long)retaddr;
180
            tb = tb_find_pc(pc);
181
            if (tb) {
182
                /* the PC is inside the translated code. It means that we have
183
                   a virtual CPU fault */
184
                cpu_restore_state(tb, env, pc, NULL);
185
            }
186
        }
187
        do_raise_exception_err(env->exception_index, env->error_code);
188
    }
189
    env = saved_env;
190
}
191 154

  
192 155
void cpu_mips_init_mmu (CPUState *env)
193 156
{
194 157
}
195

  
196 158
#endif /* !defined(CONFIG_USER_ONLY) */
197 159

  
198 160
int cpu_mips_handle_mmu_fault (CPUState *env, target_ulong address, int rw,
b/target-mips/op_helper.c
29 29
    longjmp(env->jmp_env, 1);
30 30
}
31 31

  
32
__attribute__ (( regparm(2) ))
33 32
void do_raise_exception_err (uint32_t exception, int error_code)
34 33
{
35 34
#if 1
......
42 41
    cpu_loop_exit();
43 42
}
44 43

  
45
__attribute__ (( regparm(1) ))
46 44
void do_raise_exception (uint32_t exception)
47 45
{
48 46
    do_raise_exception_err(exception, 0);
......
117 115
#endif
118 116

  
119 117
/* CP0 helpers */
120
__attribute__ (( regparm(2) ))
121 118
void do_mfc0 (int reg, int sel)
122 119
{
123 120
    const unsigned char *rn;
......
267 264
    return;
268 265
}
269 266

  
270
__attribute__ (( regparm(2) ))
271 267
void do_mtc0 (int reg, int sel)
272 268
{
273 269
    const unsigned char *rn;
274 270
    uint32_t val, old, mask;
275
    int i, raise;
276 271

  
277 272
    if (sel != 0 && reg != 16 && reg != 28) {
278 273
        val = -1;
......
379 374
        old = env->CP0_Cause;
380 375
        env->CP0_Cause = val;
381 376
#if 0
382
        /* Check if we ever asserted a software IRQ */
383
        for (i = 0; i < 2; i++) {
384
            mask = 0x100 << i;
385
            if ((val & mask) & !(old & mask))
386
                mips_set_irq(i);
377
        {
378
            int i;
379
            /* Check if we ever asserted a software IRQ */
380
            for (i = 0; i < 2; i++) {
381
                mask = 0x100 << i;
382
                if ((val & mask) & !(old & mask))
383
                    mips_set_irq(i);
384
            }
387 385
        }
388 386
#endif
389 387
        rn = "Cause";
......
486 484

  
487 485
/* TLB management */
488 486
#if defined(MIPS_USES_R4K_TLB)
489
__attribute__ (( regparm(1) ))
490 487
static void invalidate_tb (int idx)
491 488
{
492 489
    tlb_t *tlb;
......
505 502
    }
506 503
}
507 504

  
508
__attribute__ (( regparm(1) ))
509 505
static void fill_tb (int idx)
510 506
{
511 507
    tlb_t *tlb;
......
584 580
}
585 581
#endif
586 582

  
587
__attribute__ (( regparm(1) ))
588 583
void op_dump_ldst (const unsigned char *func)
589 584
{
590 585
    if (loglevel)
......
608 603
    }
609 604
}
610 605

  
611
__attribute__ (( regparm(1) ))
612 606
void do_pmon (int function)
613 607
{
614 608
    function /= 2;
......
634 628
        break;
635 629
    }
636 630
}
631

  
632
#if !defined(CONFIG_USER_ONLY) 
633

  
634
#define MMUSUFFIX _mmu
635
#define GETPC() (__builtin_return_address(0))
636

  
637
#define SHIFT 0
638
#include "softmmu_template.h"
639

  
640
#define SHIFT 1
641
#include "softmmu_template.h"
642

  
643
#define SHIFT 2
644
#include "softmmu_template.h"
645

  
646
#define SHIFT 3
647
#include "softmmu_template.h"
648

  
649
void tlb_fill (target_ulong addr, int is_write, int is_user, void *retaddr)
650
{
651
    TranslationBlock *tb;
652
    CPUState *saved_env;
653
    unsigned long pc;
654
    int ret;
655

  
656
    /* XXX: hack to restore env in all cases, even if not called from
657
       generated code */
658
    saved_env = env;
659
    env = cpu_single_env;
660
    ret = cpu_mips_handle_mmu_fault(env, addr, is_write, is_user, 1);
661
    if (ret) {
662
        if (retaddr) {
663
            /* now we have a real cpu fault */
664
            pc = (unsigned long)retaddr;
665
            tb = tb_find_pc(pc);
666
            if (tb) {
667
                /* the PC is inside the translated code. It means that we have
668
                   a virtual CPU fault */
669
                cpu_restore_state(tb, env, pc, NULL);
670
            }
671
        }
672
        do_raise_exception_err(env->exception_index, env->error_code);
673
    }
674
    env = saved_env;
675
}
676

  
677
#endif
b/target-mips/translate.c
43 43

  
44 44
#include "gen-op.h"
45 45

  
46
/* MIPS opcodes */
47
#define EXT_SPECIAL  0x100
48
#define EXT_SPECIAL2 0x200
49
#define EXT_REGIMM   0x300
50
#define EXT_CP0      0x400
51
#define EXT_CP1      0x500
52
#define EXT_CP2      0x600
53
#define EXT_CP3      0x700
54

  
55
enum {
56
    /* indirect opcode tables */
57
    OPC_SPECIAL  = 0x00,
58
    OPC_BREGIMM  = 0x01,
59
    OPC_CP0      = 0x10,
60
    OPC_CP1      = 0x11,
61
    OPC_CP2      = 0x12,
62
    OPC_CP3      = 0x13,
63
    OPC_SPECIAL2 = 0x1C,
64
    /* arithmetic with immediate */
65
    OPC_ADDI     = 0x08,
66
    OPC_ADDIU    = 0x09,
67
    OPC_SLTI     = 0x0A,
68
    OPC_SLTIU    = 0x0B,
69
    OPC_ANDI     = 0x0C,
70
    OPC_ORI      = 0x0D,
71
    OPC_XORI     = 0x0E,
72
    OPC_LUI      = 0x0F,
73
    /* Jump and branches */
74
    OPC_J        = 0x02,
75
    OPC_JAL      = 0x03,
76
    OPC_BEQ      = 0x04,  /* Unconditional if rs = rt = 0 (B) */
77
    OPC_BEQL     = 0x14,
78
    OPC_BNE      = 0x05,
79
    OPC_BNEL     = 0x15,
80
    OPC_BLEZ     = 0x06,
81
    OPC_BLEZL    = 0x16,
82
    OPC_BGTZ     = 0x07,
83
    OPC_BGTZL    = 0x17,
84
    OPC_JALX     = 0x1D,  /* MIPS 16 only */
85
    /* Load and stores */
86
    OPC_LB       = 0x20,
87
    OPC_LH       = 0x21,
88
    OPC_LWL      = 0x22,
89
    OPC_LW       = 0x23,
90
    OPC_LBU      = 0x24,
91
    OPC_LHU      = 0x25,
92
    OPC_LWR      = 0x26,
93
    OPC_SB       = 0x28,
94
    OPC_SH       = 0x29,
95
    OPC_SWL      = 0x2A,
96
    OPC_SW       = 0x2B,
97
    OPC_SWR      = 0x2E,
98
    OPC_LL       = 0x30,
99
    OPC_SC       = 0x38,
100
    /* Floating point load/store */
101
    OPC_LWC1     = 0x31,
102
    OPC_LWC2     = 0x32,
103
    OPC_LDC1     = 0x35,
104
    OPC_LDC2     = 0x36,
105
    OPC_SWC1     = 0x39,
106
    OPC_SWC2     = 0x3A,
107
    OPC_SDC1     = 0x3D,
108
    OPC_SDC2     = 0x3E,
109
    /* Cache and prefetch */
110
    OPC_CACHE    = 0x2F,
111
    OPC_PREF     = 0x33,
112
};
113

  
114
/* MIPS special opcodes */
115
enum {
116
    /* Shifts */
117
    OPC_SLL      = 0x00 | EXT_SPECIAL,
118
    /* NOP is SLL r0, r0, 0   */
119
    /* SSNOP is SLL r0, r0, 1 */
120
    OPC_SRL      = 0x02 | EXT_SPECIAL,
121
    OPC_SRA      = 0x03 | EXT_SPECIAL,
122
    OPC_SLLV     = 0x04 | EXT_SPECIAL,
123
    OPC_SRLV     = 0x06 | EXT_SPECIAL,
124
    OPC_SRAV     = 0x07 | EXT_SPECIAL,
125
    /* Multiplication / division */
126
    OPC_MULT     = 0x18 | EXT_SPECIAL,
127
    OPC_MULTU    = 0x19 | EXT_SPECIAL,
128
    OPC_DIV      = 0x1A | EXT_SPECIAL,
129
    OPC_DIVU     = 0x1B | EXT_SPECIAL,
130
    /* 2 registers arithmetic / logic */
131
    OPC_ADD      = 0x20 | EXT_SPECIAL,
132
    OPC_ADDU     = 0x21 | EXT_SPECIAL,
133
    OPC_SUB      = 0x22 | EXT_SPECIAL,
134
    OPC_SUBU     = 0x23 | EXT_SPECIAL,
135
    OPC_AND      = 0x24 | EXT_SPECIAL,
136
    OPC_OR       = 0x25 | EXT_SPECIAL,
137
    OPC_XOR      = 0x26 | EXT_SPECIAL,
138
    OPC_NOR      = 0x27 | EXT_SPECIAL,
139
    OPC_SLT      = 0x2A | EXT_SPECIAL,
140
    OPC_SLTU     = 0x2B | EXT_SPECIAL,
141
    /* Jumps */
142
    OPC_JR       = 0x08 | EXT_SPECIAL,
143
    OPC_JALR     = 0x09 | EXT_SPECIAL,
144
    /* Traps */
145
    OPC_TGE      = 0x30 | EXT_SPECIAL,
146
    OPC_TGEU     = 0x31 | EXT_SPECIAL,
147
    OPC_TLT      = 0x32 | EXT_SPECIAL,
148
    OPC_TLTU     = 0x33 | EXT_SPECIAL,
149
    OPC_TEQ      = 0x34 | EXT_SPECIAL,
150
    OPC_TNE      = 0x36 | EXT_SPECIAL,
151
    /* HI / LO registers load & stores */
152
    OPC_MFHI     = 0x10 | EXT_SPECIAL,
153
    OPC_MTHI     = 0x11 | EXT_SPECIAL,
154
    OPC_MFLO     = 0x12 | EXT_SPECIAL,
155
    OPC_MTLO     = 0x13 | EXT_SPECIAL,
156
    /* Conditional moves */
157
    OPC_MOVZ     = 0x0A | EXT_SPECIAL,
158
    OPC_MOVN     = 0x0B | EXT_SPECIAL,
159

  
160
    OPC_MOVCI    = 0x01 | EXT_SPECIAL,
161

  
162
    /* Special */
163
    OPC_PMON     = 0x05 | EXT_SPECIAL,
164
    OPC_SYSCALL  = 0x0C | EXT_SPECIAL,
165
    OPC_BREAK    = 0x0D | EXT_SPECIAL,
166
    OPC_SYNC     = 0x0F | EXT_SPECIAL,
167
};
168

  
169
enum {
170
    /* Mutiply & xxx operations */
171
    OPC_MADD     = 0x00 | EXT_SPECIAL2,
172
    OPC_MADDU    = 0x01 | EXT_SPECIAL2,
173
    OPC_MUL      = 0x02 | EXT_SPECIAL2,
174
    OPC_MSUB     = 0x04 | EXT_SPECIAL2,
175
    OPC_MSUBU    = 0x05 | EXT_SPECIAL2,
176
    /* Misc */
177
    OPC_CLZ      = 0x20 | EXT_SPECIAL2,
178
    OPC_CLO      = 0x21 | EXT_SPECIAL2,
179
    /* Special */
180
    OPC_SDBBP    = 0x3F | EXT_SPECIAL2,
181
};
182

  
183
/* Branch REGIMM */
184
enum {
185
    OPC_BLTZ     = 0x00 | EXT_REGIMM,
186
    OPC_BLTZL    = 0x02 | EXT_REGIMM,
187
    OPC_BGEZ     = 0x01 | EXT_REGIMM,
188
    OPC_BGEZL    = 0x03 | EXT_REGIMM,
189
    OPC_BLTZAL   = 0x10 | EXT_REGIMM,
190
    OPC_BLTZALL  = 0x12 | EXT_REGIMM,
191
    OPC_BGEZAL   = 0x11 | EXT_REGIMM,
192
    OPC_BGEZALL  = 0x13 | EXT_REGIMM,
193
    OPC_TGEI     = 0x08 | EXT_REGIMM,
194
    OPC_TGEIU    = 0x09 | EXT_REGIMM,
195
    OPC_TLTI     = 0x0A | EXT_REGIMM,
196
    OPC_TLTIU    = 0x0B | EXT_REGIMM,
197
    OPC_TEQI     = 0x0C | EXT_REGIMM,
198
    OPC_TNEI     = 0x0E | EXT_REGIMM,
199
};
200

  
201
enum {
202
    /* Coprocessor 0 (MMU) */
203
    OPC_MFC0     = 0x00 | EXT_CP0,
204
    OPC_MTC0     = 0x04 | EXT_CP0,
205
    OPC_TLBR     = 0x01 | EXT_CP0,
206
    OPC_TLBWI    = 0x02 | EXT_CP0,
207
    OPC_TLBWR    = 0x06 | EXT_CP0,
208
    OPC_TLBP     = 0x08 | EXT_CP0,
209
    OPC_ERET     = 0x18 | EXT_CP0,
210
    OPC_DERET    = 0x1F | EXT_CP0,
211
    OPC_WAIT     = 0x20 | EXT_CP0,
212
};
213

  
46 214
const unsigned char *regnames[] =
47 215
    { "r0", "at", "v0", "v1", "a0", "a1", "a2", "a3",
48 216
      "t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7",

Also available in: Unified diff