Statistics
| Branch: | Revision:

root / target-ppc / translate_init.c @ add78955

History | View | Annotate | Download (357.1 kB)

1
/*
2
 *  PowerPC CPU initialization for qemu.
3
 *
4
 *  Copyright (c) 2003-2007 Jocelyn Mayer
5
 *
6
 * This library is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU Lesser General Public
8
 * License as published by the Free Software Foundation; either
9
 * version 2 of the License, or (at your option) any later version.
10
 *
11
 * This library is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14
 * Lesser General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU Lesser General Public
17
 * License along with this library; if not, write to the Free Software
18
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19
 */
20

    
21
/* A lot of PowerPC definition have been included here.
22
 * Most of them are not usable for now but have been kept
23
 * inside "#if defined(TODO) ... #endif" statements to make tests easier.
24
 */
25

    
26
#include "dis-asm.h"
27
#include "host-utils.h"
28

    
29
//#define PPC_DUMP_CPU
30
//#define PPC_DEBUG_SPR
31
//#define PPC_DUMP_SPR_ACCESSES
32
#if defined(CONFIG_USER_ONLY)
33
#define TODO_USER_ONLY 1
34
#endif
35

    
36
struct ppc_def_t {
37
    const unsigned char *name;
38
    uint32_t pvr;
39
    uint32_t svr;
40
    uint64_t insns_flags;
41
    uint64_t msr_mask;
42
    powerpc_mmu_t   mmu_model;
43
    powerpc_excp_t  excp_model;
44
    powerpc_input_t bus_model;
45
    uint32_t flags;
46
    int bfd_mach;
47
    void (*init_proc)(CPUPPCState *env);
48
    int  (*check_pow)(CPUPPCState *env);
49
};
50

    
51
/* For user-mode emulation, we don't emulate any IRQ controller */
52
#if defined(CONFIG_USER_ONLY)
53
#define PPC_IRQ_INIT_FN(name)                                                 \
54
static inline void glue(glue(ppc, name),_irq_init) (CPUPPCState *env)         \
55
{                                                                             \
56
}
57
#else
58
#define PPC_IRQ_INIT_FN(name)                                                 \
59
void glue(glue(ppc, name),_irq_init) (CPUPPCState *env);
60
#endif
61

    
62
PPC_IRQ_INIT_FN(40x);
63
PPC_IRQ_INIT_FN(6xx);
64
PPC_IRQ_INIT_FN(970);
65

    
66
/* Generic callbacks:
67
 * do nothing but store/retrieve spr value
68
 */
69
#ifdef PPC_DUMP_SPR_ACCESSES
70
static void spr_read_generic (void *opaque, int sprn)
71
{
72
    gen_op_load_dump_spr(sprn);
73
}
74

    
75
static void spr_write_generic (void *opaque, int sprn)
76
{
77
    gen_op_store_dump_spr(sprn);
78
}
79
#else
80
static void spr_read_generic (void *opaque, int sprn)
81
{
82
    gen_op_load_spr(sprn);
83
}
84

    
85
static void spr_write_generic (void *opaque, int sprn)
86
{
87
    gen_op_store_spr(sprn);
88
}
89
#endif
90

    
91
#if !defined(CONFIG_USER_ONLY)
92
static void spr_write_clear (void *opaque, int sprn)
93
{
94
    gen_op_mask_spr(sprn);
95
}
96
#endif
97

    
98
/* SPR common to all PowerPC */
99
/* XER */
100
static void spr_read_xer (void *opaque, int sprn)
101
{
102
    gen_op_load_xer();
103
}
104

    
105
static void spr_write_xer (void *opaque, int sprn)
106
{
107
    gen_op_store_xer();
108
}
109

    
110
/* LR */
111
static void spr_read_lr (void *opaque, int sprn)
112
{
113
    gen_op_load_lr();
114
}
115

    
116
static void spr_write_lr (void *opaque, int sprn)
117
{
118
    gen_op_store_lr();
119
}
120

    
121
/* CTR */
122
static void spr_read_ctr (void *opaque, int sprn)
123
{
124
    gen_op_load_ctr();
125
}
126

    
127
static void spr_write_ctr (void *opaque, int sprn)
128
{
129
    gen_op_store_ctr();
130
}
131

    
132
/* User read access to SPR */
133
/* USPRx */
134
/* UMMCRx */
135
/* UPMCx */
136
/* USIA */
137
/* UDECR */
138
static void spr_read_ureg (void *opaque, int sprn)
139
{
140
    gen_op_load_spr(sprn + 0x10);
141
}
142

    
143
/* SPR common to all non-embedded PowerPC */
144
/* DECR */
145
#if !defined(CONFIG_USER_ONLY)
146
static void spr_read_decr (void *opaque, int sprn)
147
{
148
    gen_op_load_decr();
149
}
150

    
151
static void spr_write_decr (void *opaque, int sprn)
152
{
153
    gen_op_store_decr();
154
}
155
#endif
156

    
157
/* SPR common to all non-embedded PowerPC, except 601 */
158
/* Time base */
159
static void spr_read_tbl (void *opaque, int sprn)
160
{
161
    gen_op_load_tbl();
162
}
163

    
164
static void spr_read_tbu (void *opaque, int sprn)
165
{
166
    gen_op_load_tbu();
167
}
168

    
169
__attribute__ (( unused ))
170
static void spr_read_atbl (void *opaque, int sprn)
171
{
172
    gen_op_load_atbl();
173
}
174

    
175
__attribute__ (( unused ))
176
static void spr_read_atbu (void *opaque, int sprn)
177
{
178
    gen_op_load_atbu();
179
}
180

    
181
#if !defined(CONFIG_USER_ONLY)
182
static void spr_write_tbl (void *opaque, int sprn)
183
{
184
    gen_op_store_tbl();
185
}
186

    
187
static void spr_write_tbu (void *opaque, int sprn)
188
{
189
    gen_op_store_tbu();
190
}
191

    
192
__attribute__ (( unused ))
193
static void spr_write_atbl (void *opaque, int sprn)
194
{
195
    gen_op_store_atbl();
196
}
197

    
198
__attribute__ (( unused ))
199
static void spr_write_atbu (void *opaque, int sprn)
200
{
201
    gen_op_store_atbu();
202
}
203
#endif
204

    
205
#if !defined(CONFIG_USER_ONLY)
206
/* IBAT0U...IBAT0U */
207
/* IBAT0L...IBAT7L */
208
static void spr_read_ibat (void *opaque, int sprn)
209
{
210
    gen_op_load_ibat(sprn & 1, (sprn - SPR_IBAT0U) / 2);
211
}
212

    
213
static void spr_read_ibat_h (void *opaque, int sprn)
214
{
215
    gen_op_load_ibat(sprn & 1, (sprn - SPR_IBAT4U) / 2);
216
}
217

    
218
static void spr_write_ibatu (void *opaque, int sprn)
219
{
220
    gen_op_store_ibatu((sprn - SPR_IBAT0U) / 2);
221
}
222

    
223
static void spr_write_ibatu_h (void *opaque, int sprn)
224
{
225
    gen_op_store_ibatu((sprn - SPR_IBAT4U) / 2);
226
}
227

    
228
static void spr_write_ibatl (void *opaque, int sprn)
229
{
230
    gen_op_store_ibatl((sprn - SPR_IBAT0L) / 2);
231
}
232

    
233
static void spr_write_ibatl_h (void *opaque, int sprn)
234
{
235
    gen_op_store_ibatl((sprn - SPR_IBAT4L) / 2);
236
}
237

    
238
/* DBAT0U...DBAT7U */
239
/* DBAT0L...DBAT7L */
240
static void spr_read_dbat (void *opaque, int sprn)
241
{
242
    gen_op_load_dbat(sprn & 1, (sprn - SPR_DBAT0U) / 2);
243
}
244

    
245
static void spr_read_dbat_h (void *opaque, int sprn)
246
{
247
    gen_op_load_dbat(sprn & 1, ((sprn - SPR_DBAT4U) / 2) + 4);
248
}
249

    
250
static void spr_write_dbatu (void *opaque, int sprn)
251
{
252
    gen_op_store_dbatu((sprn - SPR_DBAT0U) / 2);
253
}
254

    
255
static void spr_write_dbatu_h (void *opaque, int sprn)
256
{
257
    gen_op_store_dbatu(((sprn - SPR_DBAT4U) / 2) + 4);
258
}
259

    
260
static void spr_write_dbatl (void *opaque, int sprn)
261
{
262
    gen_op_store_dbatl((sprn - SPR_DBAT0L) / 2);
263
}
264

    
265
static void spr_write_dbatl_h (void *opaque, int sprn)
266
{
267
    gen_op_store_dbatl(((sprn - SPR_DBAT4L) / 2) + 4);
268
}
269

    
270
/* SDR1 */
271
static void spr_read_sdr1 (void *opaque, int sprn)
272
{
273
    gen_op_load_sdr1();
274
}
275

    
276
static void spr_write_sdr1 (void *opaque, int sprn)
277
{
278
    gen_op_store_sdr1();
279
}
280

    
281
/* 64 bits PowerPC specific SPRs */
282
/* ASR */
283
#if defined(TARGET_PPC64)
284
__attribute__ (( unused ))
285
static void spr_read_asr (void *opaque, int sprn)
286
{
287
    gen_op_load_asr();
288
}
289

    
290
__attribute__ (( unused ))
291
static void spr_write_asr (void *opaque, int sprn)
292
{
293
    gen_op_store_asr();
294
}
295
#endif
296
#endif
297

    
298
/* PowerPC 601 specific registers */
299
/* RTC */
300
static void spr_read_601_rtcl (void *opaque, int sprn)
301
{
302
    gen_op_load_601_rtcl();
303
}
304

    
305
static void spr_read_601_rtcu (void *opaque, int sprn)
306
{
307
    gen_op_load_601_rtcu();
308
}
309

    
310
#if !defined(CONFIG_USER_ONLY)
311
static void spr_write_601_rtcu (void *opaque, int sprn)
312
{
313
    gen_op_store_601_rtcu();
314
}
315

    
316
static void spr_write_601_rtcl (void *opaque, int sprn)
317
{
318
    gen_op_store_601_rtcl();
319
}
320

    
321
static void spr_write_hid0_601 (void *opaque, int sprn)
322
{
323
    DisasContext *ctx = opaque;
324

    
325
    gen_op_store_hid0_601();
326
    /* Must stop the translation as endianness may have changed */
327
    GEN_STOP(ctx);
328
}
329
#endif
330

    
331
/* Unified bats */
332
#if !defined(CONFIG_USER_ONLY)
333
static void spr_read_601_ubat (void *opaque, int sprn)
334
{
335
    gen_op_load_601_bat(sprn & 1, (sprn - SPR_IBAT0U) / 2);
336
}
337

    
338
static void spr_write_601_ubatu (void *opaque, int sprn)
339
{
340
    gen_op_store_601_batu((sprn - SPR_IBAT0U) / 2);
341
}
342

    
343
static void spr_write_601_ubatl (void *opaque, int sprn)
344
{
345
    gen_op_store_601_batl((sprn - SPR_IBAT0L) / 2);
346
}
347
#endif
348

    
349
/* PowerPC 40x specific registers */
350
#if !defined(CONFIG_USER_ONLY)
351
static void spr_read_40x_pit (void *opaque, int sprn)
352
{
353
    gen_op_load_40x_pit();
354
}
355

    
356
static void spr_write_40x_pit (void *opaque, int sprn)
357
{
358
    gen_op_store_40x_pit();
359
}
360

    
361
static void spr_write_40x_dbcr0 (void *opaque, int sprn)
362
{
363
    DisasContext *ctx = opaque;
364

    
365
    gen_op_store_40x_dbcr0();
366
    /* We must stop translation as we may have rebooted */
367
    GEN_STOP(ctx);
368
}
369

    
370
static void spr_write_40x_sler (void *opaque, int sprn)
371
{
372
    gen_op_store_40x_sler();
373
}
374

    
375
static void spr_write_booke_tcr (void *opaque, int sprn)
376
{
377
    gen_op_store_booke_tcr();
378
}
379

    
380
static void spr_write_booke_tsr (void *opaque, int sprn)
381
{
382
    gen_op_store_booke_tsr();
383
}
384
#endif
385

    
386
/* PowerPC 403 specific registers */
387
/* PBL1 / PBU1 / PBL2 / PBU2 */
388
#if !defined(CONFIG_USER_ONLY)
389
static void spr_read_403_pbr (void *opaque, int sprn)
390
{
391
    gen_op_load_403_pb(sprn - SPR_403_PBL1);
392
}
393

    
394
static void spr_write_403_pbr (void *opaque, int sprn)
395
{
396
    gen_op_store_403_pb(sprn - SPR_403_PBL1);
397
}
398

    
399
static void spr_write_pir (void *opaque, int sprn)
400
{
401
    gen_op_store_pir();
402
}
403
#endif
404

    
405
#if !defined(CONFIG_USER_ONLY)
406
/* Callback used to write the exception vector base */
407
static void spr_write_excp_prefix (void *opaque, int sprn)
408
{
409
    gen_op_store_excp_prefix();
410
    gen_op_store_spr(sprn);
411
}
412

    
413
static void spr_write_excp_vector (void *opaque, int sprn)
414
{
415
    DisasContext *ctx = opaque;
416

    
417
    if (sprn >= SPR_BOOKE_IVOR0 && sprn <= SPR_BOOKE_IVOR15) {
418
        gen_op_store_excp_vector(sprn - SPR_BOOKE_IVOR0);
419
        gen_op_store_spr(sprn);
420
    } else if (sprn >= SPR_BOOKE_IVOR32 && sprn <= SPR_BOOKE_IVOR37) {
421
        gen_op_store_excp_vector(sprn - SPR_BOOKE_IVOR32 + 32);
422
        gen_op_store_spr(sprn);
423
    } else {
424
        printf("Trying to write an unknown exception vector %d %03x\n",
425
               sprn, sprn);
426
        GEN_EXCP_PRIVREG(ctx);
427
    }
428
}
429
#endif
430

    
431
#if defined(CONFIG_USER_ONLY)
432
#define spr_register(env, num, name, uea_read, uea_write,                     \
433
                     oea_read, oea_write, initial_value)                      \
434
do {                                                                          \
435
     _spr_register(env, num, name, uea_read, uea_write, initial_value);       \
436
} while (0)
437
static inline void _spr_register (CPUPPCState *env, int num,
438
                                  const unsigned char *name,
439
                                  void (*uea_read)(void *opaque, int sprn),
440
                                  void (*uea_write)(void *opaque, int sprn),
441
                                  target_ulong initial_value)
442
#else
443
static inline void spr_register (CPUPPCState *env, int num,
444
                                 const unsigned char *name,
445
                                 void (*uea_read)(void *opaque, int sprn),
446
                                 void (*uea_write)(void *opaque, int sprn),
447
                                 void (*oea_read)(void *opaque, int sprn),
448
                                 void (*oea_write)(void *opaque, int sprn),
449
                                 target_ulong initial_value)
450
#endif
451
{
452
    ppc_spr_t *spr;
453

    
454
    spr = &env->spr_cb[num];
455
    if (spr->name != NULL ||env-> spr[num] != 0x00000000 ||
456
#if !defined(CONFIG_USER_ONLY)
457
        spr->oea_read != NULL || spr->oea_write != NULL ||
458
#endif
459
        spr->uea_read != NULL || spr->uea_write != NULL) {
460
        printf("Error: Trying to register SPR %d (%03x) twice !\n", num, num);
461
        exit(1);
462
    }
463
#if defined(PPC_DEBUG_SPR)
464
    printf("*** register spr %d (%03x) %s val " ADDRX "\n", num, num, name,
465
           initial_value);
466
#endif
467
    spr->name = name;
468
    spr->uea_read = uea_read;
469
    spr->uea_write = uea_write;
470
#if !defined(CONFIG_USER_ONLY)
471
    spr->oea_read = oea_read;
472
    spr->oea_write = oea_write;
473
#endif
474
    env->spr[num] = initial_value;
475
}
476

    
477
/* Generic PowerPC SPRs */
478
static void gen_spr_generic (CPUPPCState *env)
479
{
480
    /* Integer processing */
481
    spr_register(env, SPR_XER, "XER",
482
                 &spr_read_xer, &spr_write_xer,
483
                 &spr_read_xer, &spr_write_xer,
484
                 0x00000000);
485
    /* Branch contol */
486
    spr_register(env, SPR_LR, "LR",
487
                 &spr_read_lr, &spr_write_lr,
488
                 &spr_read_lr, &spr_write_lr,
489
                 0x00000000);
490
    spr_register(env, SPR_CTR, "CTR",
491
                 &spr_read_ctr, &spr_write_ctr,
492
                 &spr_read_ctr, &spr_write_ctr,
493
                 0x00000000);
494
    /* Interrupt processing */
495
    spr_register(env, SPR_SRR0, "SRR0",
496
                 SPR_NOACCESS, SPR_NOACCESS,
497
                 &spr_read_generic, &spr_write_generic,
498
                 0x00000000);
499
    spr_register(env, SPR_SRR1, "SRR1",
500
                 SPR_NOACCESS, SPR_NOACCESS,
501
                 &spr_read_generic, &spr_write_generic,
502
                 0x00000000);
503
    /* Processor control */
504
    spr_register(env, SPR_SPRG0, "SPRG0",
505
                 SPR_NOACCESS, SPR_NOACCESS,
506
                 &spr_read_generic, &spr_write_generic,
507
                 0x00000000);
508
    spr_register(env, SPR_SPRG1, "SPRG1",
509
                 SPR_NOACCESS, SPR_NOACCESS,
510
                 &spr_read_generic, &spr_write_generic,
511
                 0x00000000);
512
    spr_register(env, SPR_SPRG2, "SPRG2",
513
                 SPR_NOACCESS, SPR_NOACCESS,
514
                 &spr_read_generic, &spr_write_generic,
515
                 0x00000000);
516
    spr_register(env, SPR_SPRG3, "SPRG3",
517
                 SPR_NOACCESS, SPR_NOACCESS,
518
                 &spr_read_generic, &spr_write_generic,
519
                 0x00000000);
520
}
521

    
522
/* SPR common to all non-embedded PowerPC, including 601 */
523
static void gen_spr_ne_601 (CPUPPCState *env)
524
{
525
    /* Exception processing */
526
    spr_register(env, SPR_DSISR, "DSISR",
527
                 SPR_NOACCESS, SPR_NOACCESS,
528
                 &spr_read_generic, &spr_write_generic,
529
                 0x00000000);
530
    spr_register(env, SPR_DAR, "DAR",
531
                 SPR_NOACCESS, SPR_NOACCESS,
532
                 &spr_read_generic, &spr_write_generic,
533
                 0x00000000);
534
    /* Timer */
535
    spr_register(env, SPR_DECR, "DECR",
536
                 SPR_NOACCESS, SPR_NOACCESS,
537
                 &spr_read_decr, &spr_write_decr,
538
                 0x00000000);
539
    /* Memory management */
540
    spr_register(env, SPR_SDR1, "SDR1",
541
                 SPR_NOACCESS, SPR_NOACCESS,
542
                 &spr_read_sdr1, &spr_write_sdr1,
543
                 0x00000000);
544
}
545

    
546
/* BATs 0-3 */
547
static void gen_low_BATs (CPUPPCState *env)
548
{
549
#if !defined(CONFIG_USER_ONLY)
550
    spr_register(env, SPR_IBAT0U, "IBAT0U",
551
                 SPR_NOACCESS, SPR_NOACCESS,
552
                 &spr_read_ibat, &spr_write_ibatu,
553
                 0x00000000);
554
    spr_register(env, SPR_IBAT0L, "IBAT0L",
555
                 SPR_NOACCESS, SPR_NOACCESS,
556
                 &spr_read_ibat, &spr_write_ibatl,
557
                 0x00000000);
558
    spr_register(env, SPR_IBAT1U, "IBAT1U",
559
                 SPR_NOACCESS, SPR_NOACCESS,
560
                 &spr_read_ibat, &spr_write_ibatu,
561
                 0x00000000);
562
    spr_register(env, SPR_IBAT1L, "IBAT1L",
563
                 SPR_NOACCESS, SPR_NOACCESS,
564
                 &spr_read_ibat, &spr_write_ibatl,
565
                 0x00000000);
566
    spr_register(env, SPR_IBAT2U, "IBAT2U",
567
                 SPR_NOACCESS, SPR_NOACCESS,
568
                 &spr_read_ibat, &spr_write_ibatu,
569
                 0x00000000);
570
    spr_register(env, SPR_IBAT2L, "IBAT2L",
571
                 SPR_NOACCESS, SPR_NOACCESS,
572
                 &spr_read_ibat, &spr_write_ibatl,
573
                 0x00000000);
574
    spr_register(env, SPR_IBAT3U, "IBAT3U",
575
                 SPR_NOACCESS, SPR_NOACCESS,
576
                 &spr_read_ibat, &spr_write_ibatu,
577
                 0x00000000);
578
    spr_register(env, SPR_IBAT3L, "IBAT3L",
579
                 SPR_NOACCESS, SPR_NOACCESS,
580
                 &spr_read_ibat, &spr_write_ibatl,
581
                 0x00000000);
582
    spr_register(env, SPR_DBAT0U, "DBAT0U",
583
                 SPR_NOACCESS, SPR_NOACCESS,
584
                 &spr_read_dbat, &spr_write_dbatu,
585
                 0x00000000);
586
    spr_register(env, SPR_DBAT0L, "DBAT0L",
587
                 SPR_NOACCESS, SPR_NOACCESS,
588
                 &spr_read_dbat, &spr_write_dbatl,
589
                 0x00000000);
590
    spr_register(env, SPR_DBAT1U, "DBAT1U",
591
                 SPR_NOACCESS, SPR_NOACCESS,
592
                 &spr_read_dbat, &spr_write_dbatu,
593
                 0x00000000);
594
    spr_register(env, SPR_DBAT1L, "DBAT1L",
595
                 SPR_NOACCESS, SPR_NOACCESS,
596
                 &spr_read_dbat, &spr_write_dbatl,
597
                 0x00000000);
598
    spr_register(env, SPR_DBAT2U, "DBAT2U",
599
                 SPR_NOACCESS, SPR_NOACCESS,
600
                 &spr_read_dbat, &spr_write_dbatu,
601
                 0x00000000);
602
    spr_register(env, SPR_DBAT2L, "DBAT2L",
603
                 SPR_NOACCESS, SPR_NOACCESS,
604
                 &spr_read_dbat, &spr_write_dbatl,
605
                 0x00000000);
606
    spr_register(env, SPR_DBAT3U, "DBAT3U",
607
                 SPR_NOACCESS, SPR_NOACCESS,
608
                 &spr_read_dbat, &spr_write_dbatu,
609
                 0x00000000);
610
    spr_register(env, SPR_DBAT3L, "DBAT3L",
611
                 SPR_NOACCESS, SPR_NOACCESS,
612
                 &spr_read_dbat, &spr_write_dbatl,
613
                 0x00000000);
614
    env->nb_BATs += 4;
615
#endif
616
}
617

    
618
/* BATs 4-7 */
619
static void gen_high_BATs (CPUPPCState *env)
620
{
621
#if !defined(CONFIG_USER_ONLY)
622
    spr_register(env, SPR_IBAT4U, "IBAT4U",
623
                 SPR_NOACCESS, SPR_NOACCESS,
624
                 &spr_read_ibat_h, &spr_write_ibatu_h,
625
                 0x00000000);
626
    spr_register(env, SPR_IBAT4L, "IBAT4L",
627
                 SPR_NOACCESS, SPR_NOACCESS,
628
                 &spr_read_ibat_h, &spr_write_ibatl_h,
629
                 0x00000000);
630
    spr_register(env, SPR_IBAT5U, "IBAT5U",
631
                 SPR_NOACCESS, SPR_NOACCESS,
632
                 &spr_read_ibat_h, &spr_write_ibatu_h,
633
                 0x00000000);
634
    spr_register(env, SPR_IBAT5L, "IBAT5L",
635
                 SPR_NOACCESS, SPR_NOACCESS,
636
                 &spr_read_ibat_h, &spr_write_ibatl_h,
637
                 0x00000000);
638
    spr_register(env, SPR_IBAT6U, "IBAT6U",
639
                 SPR_NOACCESS, SPR_NOACCESS,
640
                 &spr_read_ibat_h, &spr_write_ibatu_h,
641
                 0x00000000);
642
    spr_register(env, SPR_IBAT6L, "IBAT6L",
643
                 SPR_NOACCESS, SPR_NOACCESS,
644
                 &spr_read_ibat_h, &spr_write_ibatl_h,
645
                 0x00000000);
646
    spr_register(env, SPR_IBAT7U, "IBAT7U",
647
                 SPR_NOACCESS, SPR_NOACCESS,
648
                 &spr_read_ibat_h, &spr_write_ibatu_h,
649
                 0x00000000);
650
    spr_register(env, SPR_IBAT7L, "IBAT7L",
651
                 SPR_NOACCESS, SPR_NOACCESS,
652
                 &spr_read_ibat_h, &spr_write_ibatl_h,
653
                 0x00000000);
654
    spr_register(env, SPR_DBAT4U, "DBAT4U",
655
                 SPR_NOACCESS, SPR_NOACCESS,
656
                 &spr_read_dbat_h, &spr_write_dbatu_h,
657
                 0x00000000);
658
    spr_register(env, SPR_DBAT4L, "DBAT4L",
659
                 SPR_NOACCESS, SPR_NOACCESS,
660
                 &spr_read_dbat_h, &spr_write_dbatl_h,
661
                 0x00000000);
662
    spr_register(env, SPR_DBAT5U, "DBAT5U",
663
                 SPR_NOACCESS, SPR_NOACCESS,
664
                 &spr_read_dbat_h, &spr_write_dbatu_h,
665
                 0x00000000);
666
    spr_register(env, SPR_DBAT5L, "DBAT5L",
667
                 SPR_NOACCESS, SPR_NOACCESS,
668
                 &spr_read_dbat_h, &spr_write_dbatl_h,
669
                 0x00000000);
670
    spr_register(env, SPR_DBAT6U, "DBAT6U",
671
                 SPR_NOACCESS, SPR_NOACCESS,
672
                 &spr_read_dbat_h, &spr_write_dbatu_h,
673
                 0x00000000);
674
    spr_register(env, SPR_DBAT6L, "DBAT6L",
675
                 SPR_NOACCESS, SPR_NOACCESS,
676
                 &spr_read_dbat_h, &spr_write_dbatl_h,
677
                 0x00000000);
678
    spr_register(env, SPR_DBAT7U, "DBAT7U",
679
                 SPR_NOACCESS, SPR_NOACCESS,
680
                 &spr_read_dbat_h, &spr_write_dbatu_h,
681
                 0x00000000);
682
    spr_register(env, SPR_DBAT7L, "DBAT7L",
683
                 SPR_NOACCESS, SPR_NOACCESS,
684
                 &spr_read_dbat_h, &spr_write_dbatl_h,
685
                 0x00000000);
686
    env->nb_BATs += 4;
687
#endif
688
}
689

    
690
/* Generic PowerPC time base */
691
static void gen_tbl (CPUPPCState *env)
692
{
693
    spr_register(env, SPR_VTBL,  "TBL",
694
                 &spr_read_tbl, SPR_NOACCESS,
695
                 &spr_read_tbl, SPR_NOACCESS,
696
                 0x00000000);
697
    spr_register(env, SPR_TBL,   "TBL",
698
                 SPR_NOACCESS, SPR_NOACCESS,
699
                 SPR_NOACCESS, &spr_write_tbl,
700
                 0x00000000);
701
    spr_register(env, SPR_VTBU,  "TBU",
702
                 &spr_read_tbu, SPR_NOACCESS,
703
                 &spr_read_tbu, SPR_NOACCESS,
704
                 0x00000000);
705
    spr_register(env, SPR_TBU,   "TBU",
706
                 SPR_NOACCESS, SPR_NOACCESS,
707
                 SPR_NOACCESS, &spr_write_tbu,
708
                 0x00000000);
709
}
710

    
711
/* Softare table search registers */
712
static void gen_6xx_7xx_soft_tlb (CPUPPCState *env, int nb_tlbs, int nb_ways)
713
{
714
#if !defined(CONFIG_USER_ONLY)
715
    env->nb_tlb = nb_tlbs;
716
    env->nb_ways = nb_ways;
717
    env->id_tlbs = 1;
718
    spr_register(env, SPR_DMISS, "DMISS",
719
                 SPR_NOACCESS, SPR_NOACCESS,
720
                 &spr_read_generic, SPR_NOACCESS,
721
                 0x00000000);
722
    spr_register(env, SPR_DCMP, "DCMP",
723
                 SPR_NOACCESS, SPR_NOACCESS,
724
                 &spr_read_generic, SPR_NOACCESS,
725
                 0x00000000);
726
    spr_register(env, SPR_HASH1, "HASH1",
727
                 SPR_NOACCESS, SPR_NOACCESS,
728
                 &spr_read_generic, SPR_NOACCESS,
729
                 0x00000000);
730
    spr_register(env, SPR_HASH2, "HASH2",
731
                 SPR_NOACCESS, SPR_NOACCESS,
732
                 &spr_read_generic, SPR_NOACCESS,
733
                 0x00000000);
734
    spr_register(env, SPR_IMISS, "IMISS",
735
                 SPR_NOACCESS, SPR_NOACCESS,
736
                 &spr_read_generic, SPR_NOACCESS,
737
                 0x00000000);
738
    spr_register(env, SPR_ICMP, "ICMP",
739
                 SPR_NOACCESS, SPR_NOACCESS,
740
                 &spr_read_generic, SPR_NOACCESS,
741
                 0x00000000);
742
    spr_register(env, SPR_RPA, "RPA",
743
                 SPR_NOACCESS, SPR_NOACCESS,
744
                 &spr_read_generic, &spr_write_generic,
745
                 0x00000000);
746
#endif
747
}
748

    
749
/* SPR common to MPC755 and G2 */
750
static void gen_spr_G2_755 (CPUPPCState *env)
751
{
752
    /* SGPRs */
753
    spr_register(env, SPR_SPRG4, "SPRG4",
754
                 SPR_NOACCESS, SPR_NOACCESS,
755
                 &spr_read_generic, &spr_write_generic,
756
                 0x00000000);
757
    spr_register(env, SPR_SPRG5, "SPRG5",
758
                 SPR_NOACCESS, SPR_NOACCESS,
759
                 &spr_read_generic, &spr_write_generic,
760
                 0x00000000);
761
    spr_register(env, SPR_SPRG6, "SPRG6",
762
                 SPR_NOACCESS, SPR_NOACCESS,
763
                 &spr_read_generic, &spr_write_generic,
764
                 0x00000000);
765
    spr_register(env, SPR_SPRG7, "SPRG7",
766
                 SPR_NOACCESS, SPR_NOACCESS,
767
                 &spr_read_generic, &spr_write_generic,
768
                 0x00000000);
769
    /* External access control */
770
    /* XXX : not implemented */
771
    spr_register(env, SPR_EAR, "EAR",
772
                 SPR_NOACCESS, SPR_NOACCESS,
773
                 &spr_read_generic, &spr_write_generic,
774
                 0x00000000);
775
}
776

    
777
/* SPR common to all 7xx PowerPC implementations */
778
static void gen_spr_7xx (CPUPPCState *env)
779
{
780
    /* Breakpoints */
781
    /* XXX : not implemented */
782
    spr_register(env, SPR_DABR, "DABR",
783
                 SPR_NOACCESS, SPR_NOACCESS,
784
                 &spr_read_generic, &spr_write_generic,
785
                 0x00000000);
786
    /* XXX : not implemented */
787
    spr_register(env, SPR_IABR, "IABR",
788
                 SPR_NOACCESS, SPR_NOACCESS,
789
                 &spr_read_generic, &spr_write_generic,
790
                 0x00000000);
791
    /* Cache management */
792
    /* XXX : not implemented */
793
    spr_register(env, SPR_ICTC, "ICTC",
794
                 SPR_NOACCESS, SPR_NOACCESS,
795
                 &spr_read_generic, &spr_write_generic,
796
                 0x00000000);
797
    /* XXX : not implemented */
798
    spr_register(env, SPR_L2CR, "L2CR",
799
                 SPR_NOACCESS, SPR_NOACCESS,
800
                 &spr_read_generic, &spr_write_generic,
801
                 0x00000000);
802
    /* Performance monitors */
803
    /* XXX : not implemented */
804
    spr_register(env, SPR_MMCR0, "MMCR0",
805
                 SPR_NOACCESS, SPR_NOACCESS,
806
                 &spr_read_generic, &spr_write_generic,
807
                 0x00000000);
808
    /* XXX : not implemented */
809
    spr_register(env, SPR_MMCR1, "MMCR1",
810
                 SPR_NOACCESS, SPR_NOACCESS,
811
                 &spr_read_generic, &spr_write_generic,
812
                 0x00000000);
813
    /* XXX : not implemented */
814
    spr_register(env, SPR_PMC1, "PMC1",
815
                 SPR_NOACCESS, SPR_NOACCESS,
816
                 &spr_read_generic, &spr_write_generic,
817
                 0x00000000);
818
    /* XXX : not implemented */
819
    spr_register(env, SPR_PMC2, "PMC2",
820
                 SPR_NOACCESS, SPR_NOACCESS,
821
                 &spr_read_generic, &spr_write_generic,
822
                 0x00000000);
823
    /* XXX : not implemented */
824
    spr_register(env, SPR_PMC3, "PMC3",
825
                 SPR_NOACCESS, SPR_NOACCESS,
826
                 &spr_read_generic, &spr_write_generic,
827
                 0x00000000);
828
    /* XXX : not implemented */
829
    spr_register(env, SPR_PMC4, "PMC4",
830
                 SPR_NOACCESS, SPR_NOACCESS,
831
                 &spr_read_generic, &spr_write_generic,
832
                 0x00000000);
833
    /* XXX : not implemented */
834
    spr_register(env, SPR_SIAR, "SIAR",
835
                 SPR_NOACCESS, SPR_NOACCESS,
836
                 &spr_read_generic, SPR_NOACCESS,
837
                 0x00000000);
838
    /* XXX : not implemented */
839
    spr_register(env, SPR_UMMCR0, "UMMCR0",
840
                 &spr_read_ureg, SPR_NOACCESS,
841
                 &spr_read_ureg, SPR_NOACCESS,
842
                 0x00000000);
843
    /* XXX : not implemented */
844
    spr_register(env, SPR_UMMCR1, "UMMCR1",
845
                 &spr_read_ureg, SPR_NOACCESS,
846
                 &spr_read_ureg, SPR_NOACCESS,
847
                 0x00000000);
848
    /* XXX : not implemented */
849
    spr_register(env, SPR_UPMC1, "UPMC1",
850
                 &spr_read_ureg, SPR_NOACCESS,
851
                 &spr_read_ureg, SPR_NOACCESS,
852
                 0x00000000);
853
    /* XXX : not implemented */
854
    spr_register(env, SPR_UPMC2, "UPMC2",
855
                 &spr_read_ureg, SPR_NOACCESS,
856
                 &spr_read_ureg, SPR_NOACCESS,
857
                 0x00000000);
858
    /* XXX : not implemented */
859
    spr_register(env, SPR_UPMC3, "UPMC3",
860
                 &spr_read_ureg, SPR_NOACCESS,
861
                 &spr_read_ureg, SPR_NOACCESS,
862
                 0x00000000);
863
    /* XXX : not implemented */
864
    spr_register(env, SPR_UPMC4, "UPMC4",
865
                 &spr_read_ureg, SPR_NOACCESS,
866
                 &spr_read_ureg, SPR_NOACCESS,
867
                 0x00000000);
868
    /* XXX : not implemented */
869
    spr_register(env, SPR_USIAR, "USIAR",
870
                 &spr_read_ureg, SPR_NOACCESS,
871
                 &spr_read_ureg, SPR_NOACCESS,
872
                 0x00000000);
873
    /* External access control */
874
    /* XXX : not implemented */
875
    spr_register(env, SPR_EAR, "EAR",
876
                 SPR_NOACCESS, SPR_NOACCESS,
877
                 &spr_read_generic, &spr_write_generic,
878
                 0x00000000);
879
}
880

    
881
static void gen_spr_thrm (CPUPPCState *env)
882
{
883
    /* Thermal management */
884
    /* XXX : not implemented */
885
    spr_register(env, SPR_THRM1, "THRM1",
886
                 SPR_NOACCESS, SPR_NOACCESS,
887
                 &spr_read_generic, &spr_write_generic,
888
                 0x00000000);
889
    /* XXX : not implemented */
890
    spr_register(env, SPR_THRM2, "THRM2",
891
                 SPR_NOACCESS, SPR_NOACCESS,
892
                 &spr_read_generic, &spr_write_generic,
893
                 0x00000000);
894
    /* XXX : not implemented */
895
    spr_register(env, SPR_THRM3, "THRM3",
896
                 SPR_NOACCESS, SPR_NOACCESS,
897
                 &spr_read_generic, &spr_write_generic,
898
                 0x00000000);
899
}
900

    
901
/* SPR specific to PowerPC 604 implementation */
902
static void gen_spr_604 (CPUPPCState *env)
903
{
904
    /* Processor identification */
905
    spr_register(env, SPR_PIR, "PIR",
906
                 SPR_NOACCESS, SPR_NOACCESS,
907
                 &spr_read_generic, &spr_write_pir,
908
                 0x00000000);
909
    /* Breakpoints */
910
    /* XXX : not implemented */
911
    spr_register(env, SPR_IABR, "IABR",
912
                 SPR_NOACCESS, SPR_NOACCESS,
913
                 &spr_read_generic, &spr_write_generic,
914
                 0x00000000);
915
    /* XXX : not implemented */
916
    spr_register(env, SPR_DABR, "DABR",
917
                 SPR_NOACCESS, SPR_NOACCESS,
918
                 &spr_read_generic, &spr_write_generic,
919
                 0x00000000);
920
    /* Performance counters */
921
    /* XXX : not implemented */
922
    spr_register(env, SPR_MMCR0, "MMCR0",
923
                 SPR_NOACCESS, SPR_NOACCESS,
924
                 &spr_read_generic, &spr_write_generic,
925
                 0x00000000);
926
    /* XXX : not implemented */
927
    spr_register(env, SPR_MMCR1, "MMCR1",
928
                 SPR_NOACCESS, SPR_NOACCESS,
929
                 &spr_read_generic, &spr_write_generic,
930
                 0x00000000);
931
    /* XXX : not implemented */
932
    spr_register(env, SPR_PMC1, "PMC1",
933
                 SPR_NOACCESS, SPR_NOACCESS,
934
                 &spr_read_generic, &spr_write_generic,
935
                 0x00000000);
936
    /* XXX : not implemented */
937
    spr_register(env, SPR_PMC2, "PMC2",
938
                 SPR_NOACCESS, SPR_NOACCESS,
939
                 &spr_read_generic, &spr_write_generic,
940
                 0x00000000);
941
    /* XXX : not implemented */
942
    spr_register(env, SPR_PMC3, "PMC3",
943
                 SPR_NOACCESS, SPR_NOACCESS,
944
                 &spr_read_generic, &spr_write_generic,
945
                 0x00000000);
946
    /* XXX : not implemented */
947
    spr_register(env, SPR_PMC4, "PMC4",
948
                 SPR_NOACCESS, SPR_NOACCESS,
949
                 &spr_read_generic, &spr_write_generic,
950
                 0x00000000);
951
    /* XXX : not implemented */
952
    spr_register(env, SPR_SIAR, "SIAR",
953
                 SPR_NOACCESS, SPR_NOACCESS,
954
                 &spr_read_generic, SPR_NOACCESS,
955
                 0x00000000);
956
    /* XXX : not implemented */
957
    spr_register(env, SPR_SDA, "SDA",
958
                 SPR_NOACCESS, SPR_NOACCESS,
959
                 &spr_read_generic, SPR_NOACCESS,
960
                 0x00000000);
961
    /* External access control */
962
    /* XXX : not implemented */
963
    spr_register(env, SPR_EAR, "EAR",
964
                 SPR_NOACCESS, SPR_NOACCESS,
965
                 &spr_read_generic, &spr_write_generic,
966
                 0x00000000);
967
}
968

    
969
/* SPR specific to PowerPC 603 implementation */
970
static void gen_spr_603 (CPUPPCState *env)
971
{
972
    /* External access control */
973
    /* XXX : not implemented */
974
    spr_register(env, SPR_EAR, "EAR",
975
                 SPR_NOACCESS, SPR_NOACCESS,
976
                 &spr_read_generic, &spr_write_generic,
977
                 0x00000000);
978
}
979

    
980
/* SPR specific to PowerPC G2 implementation */
981
static void gen_spr_G2 (CPUPPCState *env)
982
{
983
    /* Memory base address */
984
    /* MBAR */
985
    /* XXX : not implemented */
986
    spr_register(env, SPR_MBAR, "MBAR",
987
                 SPR_NOACCESS, SPR_NOACCESS,
988
                 &spr_read_generic, &spr_write_generic,
989
                 0x00000000);
990
    /* Exception processing */
991
    spr_register(env, SPR_BOOKE_CSRR0, "CSRR0",
992
                 SPR_NOACCESS, SPR_NOACCESS,
993
                 &spr_read_generic, &spr_write_generic,
994
                 0x00000000);
995
    spr_register(env, SPR_BOOKE_CSRR1, "CSRR1",
996
                 SPR_NOACCESS, SPR_NOACCESS,
997
                 &spr_read_generic, &spr_write_generic,
998
                 0x00000000);
999
    /* Breakpoints */
1000
    /* XXX : not implemented */
1001
    spr_register(env, SPR_DABR, "DABR",
1002
                 SPR_NOACCESS, SPR_NOACCESS,
1003
                 &spr_read_generic, &spr_write_generic,
1004
                 0x00000000);
1005
    /* XXX : not implemented */
1006
    spr_register(env, SPR_DABR2, "DABR2",
1007
                 SPR_NOACCESS, SPR_NOACCESS,
1008
                 &spr_read_generic, &spr_write_generic,
1009
                 0x00000000);
1010
    /* XXX : not implemented */
1011
    spr_register(env, SPR_IABR, "IABR",
1012
                 SPR_NOACCESS, SPR_NOACCESS,
1013
                 &spr_read_generic, &spr_write_generic,
1014
                 0x00000000);
1015
    /* XXX : not implemented */
1016
    spr_register(env, SPR_IABR2, "IABR2",
1017
                 SPR_NOACCESS, SPR_NOACCESS,
1018
                 &spr_read_generic, &spr_write_generic,
1019
                 0x00000000);
1020
    /* XXX : not implemented */
1021
    spr_register(env, SPR_IBCR, "IBCR",
1022
                 SPR_NOACCESS, SPR_NOACCESS,
1023
                 &spr_read_generic, &spr_write_generic,
1024
                 0x00000000);
1025
    /* XXX : not implemented */
1026
    spr_register(env, SPR_DBCR, "DBCR",
1027
                 SPR_NOACCESS, SPR_NOACCESS,
1028
                 &spr_read_generic, &spr_write_generic,
1029
                 0x00000000);
1030
}
1031

    
1032
/* SPR specific to PowerPC 602 implementation */
1033
static void gen_spr_602 (CPUPPCState *env)
1034
{
1035
    /* ESA registers */
1036
    /* XXX : not implemented */
1037
    spr_register(env, SPR_SER, "SER",
1038
                 SPR_NOACCESS, SPR_NOACCESS,
1039
                 &spr_read_generic, &spr_write_generic,
1040
                 0x00000000);
1041
    /* XXX : not implemented */
1042
    spr_register(env, SPR_SEBR, "SEBR",
1043
                 SPR_NOACCESS, SPR_NOACCESS,
1044
                 &spr_read_generic, &spr_write_generic,
1045
                 0x00000000);
1046
    /* XXX : not implemented */
1047
    spr_register(env, SPR_ESASRR, "ESASRR",
1048
                 SPR_NOACCESS, SPR_NOACCESS,
1049
                 &spr_read_generic, &spr_write_generic,
1050
                 0x00000000);
1051
    /* Floating point status */
1052
    /* XXX : not implemented */
1053
    spr_register(env, SPR_SP, "SP",
1054
                 SPR_NOACCESS, SPR_NOACCESS,
1055
                 &spr_read_generic, &spr_write_generic,
1056
                 0x00000000);
1057
    /* XXX : not implemented */
1058
    spr_register(env, SPR_LT, "LT",
1059
                 SPR_NOACCESS, SPR_NOACCESS,
1060
                 &spr_read_generic, &spr_write_generic,
1061
                 0x00000000);
1062
    /* Watchdog timer */
1063
    /* XXX : not implemented */
1064
    spr_register(env, SPR_TCR, "TCR",
1065
                 SPR_NOACCESS, SPR_NOACCESS,
1066
                 &spr_read_generic, &spr_write_generic,
1067
                 0x00000000);
1068
    /* Interrupt base */
1069
    spr_register(env, SPR_IBR, "IBR",
1070
                 SPR_NOACCESS, SPR_NOACCESS,
1071
                 &spr_read_generic, &spr_write_generic,
1072
                 0x00000000);
1073
    /* XXX : not implemented */
1074
    spr_register(env, SPR_IABR, "IABR",
1075
                 SPR_NOACCESS, SPR_NOACCESS,
1076
                 &spr_read_generic, &spr_write_generic,
1077
                 0x00000000);
1078
}
1079

    
1080
/* SPR specific to PowerPC 601 implementation */
1081
static void gen_spr_601 (CPUPPCState *env)
1082
{
1083
    /* Multiplication/division register */
1084
    /* MQ */
1085
    spr_register(env, SPR_MQ, "MQ",
1086
                 &spr_read_generic, &spr_write_generic,
1087
                 &spr_read_generic, &spr_write_generic,
1088
                 0x00000000);
1089
    /* RTC registers */
1090
    spr_register(env, SPR_601_RTCU, "RTCU",
1091
                 SPR_NOACCESS, SPR_NOACCESS,
1092
                 SPR_NOACCESS, &spr_write_601_rtcu,
1093
                 0x00000000);
1094
    spr_register(env, SPR_601_VRTCU, "RTCU",
1095
                 &spr_read_601_rtcu, SPR_NOACCESS,
1096
                 &spr_read_601_rtcu, SPR_NOACCESS,
1097
                 0x00000000);
1098
    spr_register(env, SPR_601_RTCL, "RTCL",
1099
                 SPR_NOACCESS, SPR_NOACCESS,
1100
                 SPR_NOACCESS, &spr_write_601_rtcl,
1101
                 0x00000000);
1102
    spr_register(env, SPR_601_VRTCL, "RTCL",
1103
                 &spr_read_601_rtcl, SPR_NOACCESS,
1104
                 &spr_read_601_rtcl, SPR_NOACCESS,
1105
                 0x00000000);
1106
    /* Timer */
1107
#if 0 /* ? */
1108
    spr_register(env, SPR_601_UDECR, "UDECR",
1109
                 &spr_read_decr, SPR_NOACCESS,
1110
                 &spr_read_decr, SPR_NOACCESS,
1111
                 0x00000000);
1112
#endif
1113
    /* External access control */
1114
    /* XXX : not implemented */
1115
    spr_register(env, SPR_EAR, "EAR",
1116
                 SPR_NOACCESS, SPR_NOACCESS,
1117
                 &spr_read_generic, &spr_write_generic,
1118
                 0x00000000);
1119
    /* Memory management */
1120
#if !defined(CONFIG_USER_ONLY)
1121
    spr_register(env, SPR_IBAT0U, "IBAT0U",
1122
                 SPR_NOACCESS, SPR_NOACCESS,
1123
                 &spr_read_601_ubat, &spr_write_601_ubatu,
1124
                 0x00000000);
1125
    spr_register(env, SPR_IBAT0L, "IBAT0L",
1126
                 SPR_NOACCESS, SPR_NOACCESS,
1127
                 &spr_read_601_ubat, &spr_write_601_ubatl,
1128
                 0x00000000);
1129
    spr_register(env, SPR_IBAT1U, "IBAT1U",
1130
                 SPR_NOACCESS, SPR_NOACCESS,
1131
                 &spr_read_601_ubat, &spr_write_601_ubatu,
1132
                 0x00000000);
1133
    spr_register(env, SPR_IBAT1L, "IBAT1L",
1134
                 SPR_NOACCESS, SPR_NOACCESS,
1135
                 &spr_read_601_ubat, &spr_write_601_ubatl,
1136
                 0x00000000);
1137
    spr_register(env, SPR_IBAT2U, "IBAT2U",
1138
                 SPR_NOACCESS, SPR_NOACCESS,
1139
                 &spr_read_601_ubat, &spr_write_601_ubatu,
1140
                 0x00000000);
1141
    spr_register(env, SPR_IBAT2L, "IBAT2L",
1142
                 SPR_NOACCESS, SPR_NOACCESS,
1143
                 &spr_read_601_ubat, &spr_write_601_ubatl,
1144
                 0x00000000);
1145
    spr_register(env, SPR_IBAT3U, "IBAT3U",
1146
                 SPR_NOACCESS, SPR_NOACCESS,
1147
                 &spr_read_601_ubat, &spr_write_601_ubatu,
1148
                 0x00000000);
1149
    spr_register(env, SPR_IBAT3L, "IBAT3L",
1150
                 SPR_NOACCESS, SPR_NOACCESS,
1151
                 &spr_read_601_ubat, &spr_write_601_ubatl,
1152
                 0x00000000);
1153
    env->nb_BATs = 4;
1154
#endif
1155
}
1156

    
1157
static void gen_spr_74xx (CPUPPCState *env)
1158
{
1159
    /* Processor identification */
1160
    spr_register(env, SPR_PIR, "PIR",
1161
                 SPR_NOACCESS, SPR_NOACCESS,
1162
                 &spr_read_generic, &spr_write_pir,
1163
                 0x00000000);
1164
    /* XXX : not implemented */
1165
    spr_register(env, SPR_MMCR2, "MMCR2",
1166
                 SPR_NOACCESS, SPR_NOACCESS,
1167
                 &spr_read_generic, &spr_write_generic,
1168
                 0x00000000);
1169
    /* XXX : not implemented */
1170
    spr_register(env, SPR_UMMCR2, "UMMCR2",
1171
                 &spr_read_ureg, SPR_NOACCESS,
1172
                 &spr_read_ureg, SPR_NOACCESS,
1173
                 0x00000000);
1174
    /* XXX: not implemented */
1175
    spr_register(env, SPR_BAMR, "BAMR",
1176
                 SPR_NOACCESS, SPR_NOACCESS,
1177
                 &spr_read_generic, &spr_write_generic,
1178
                 0x00000000);
1179
    /* XXX : not implemented */
1180
    spr_register(env, SPR_UBAMR, "UBAMR",
1181
                 &spr_read_ureg, SPR_NOACCESS,
1182
                 &spr_read_ureg, SPR_NOACCESS,
1183
                 0x00000000);
1184
    /* XXX : not implemented */
1185
    spr_register(env, SPR_MSSCR0, "MSSCR0",
1186
                 SPR_NOACCESS, SPR_NOACCESS,
1187
                 &spr_read_generic, &spr_write_generic,
1188
                 0x00000000);
1189
    /* Hardware implementation registers */
1190
    /* XXX : not implemented */
1191
    spr_register(env, SPR_HID0, "HID0",
1192
                 SPR_NOACCESS, SPR_NOACCESS,
1193
                 &spr_read_generic, &spr_write_generic,
1194
                 0x00000000);
1195
    /* XXX : not implemented */
1196
    spr_register(env, SPR_HID1, "HID1",
1197
                 SPR_NOACCESS, SPR_NOACCESS,
1198
                 &spr_read_generic, &spr_write_generic,
1199
                 0x00000000);
1200
    /* Altivec */
1201
    spr_register(env, SPR_VRSAVE, "VRSAVE",
1202
                 &spr_read_generic, &spr_write_generic,
1203
                 &spr_read_generic, &spr_write_generic,
1204
                 0x00000000);
1205
}
1206

    
1207
static void gen_l3_ctrl (CPUPPCState *env)
1208
{
1209
    /* L3CR */
1210
    /* XXX : not implemented */
1211
    spr_register(env, SPR_L3CR, "L3CR",
1212
                 SPR_NOACCESS, SPR_NOACCESS,
1213
                 &spr_read_generic, &spr_write_generic,
1214
                 0x00000000);
1215
    /* L3ITCR0 */
1216
    /* XXX : not implemented */
1217
    spr_register(env, SPR_L3ITCR0, "L3ITCR0",
1218
                 SPR_NOACCESS, SPR_NOACCESS,
1219
                 &spr_read_generic, &spr_write_generic,
1220
                 0x00000000);
1221
    /* L3ITCR1 */
1222
    /* XXX : not implemented */
1223
    spr_register(env, SPR_L3ITCR1, "L3ITCR1",
1224
                 SPR_NOACCESS, SPR_NOACCESS,
1225
                 &spr_read_generic, &spr_write_generic,
1226
                 0x00000000);
1227
    /* L3ITCR2 */
1228
    /* XXX : not implemented */
1229
    spr_register(env, SPR_L3ITCR2, "L3ITCR2",
1230
                 SPR_NOACCESS, SPR_NOACCESS,
1231
                 &spr_read_generic, &spr_write_generic,
1232
                 0x00000000);
1233
    /* L3ITCR3 */
1234
    /* XXX : not implemented */
1235
    spr_register(env, SPR_L3ITCR3, "L3ITCR3",
1236
                 SPR_NOACCESS, SPR_NOACCESS,
1237
                 &spr_read_generic, &spr_write_generic,
1238
                 0x00000000);
1239
    /* L3OHCR */
1240
    /* XXX : not implemented */
1241
    spr_register(env, SPR_L3OHCR, "L3OHCR",
1242
                 SPR_NOACCESS, SPR_NOACCESS,
1243
                 &spr_read_generic, &spr_write_generic,
1244
                 0x00000000);
1245
    /* L3PM */
1246
    /* XXX : not implemented */
1247
    spr_register(env, SPR_L3PM, "L3PM",
1248
                 SPR_NOACCESS, SPR_NOACCESS,
1249
                 &spr_read_generic, &spr_write_generic,
1250
                 0x00000000);
1251
}
1252

    
1253
static void gen_74xx_soft_tlb (CPUPPCState *env, int nb_tlbs, int nb_ways)
1254
{
1255
#if !defined(CONFIG_USER_ONLY)
1256
    env->nb_tlb = nb_tlbs;
1257
    env->nb_ways = nb_ways;
1258
    env->id_tlbs = 1;
1259
    /* XXX : not implemented */
1260
    spr_register(env, SPR_PTEHI, "PTEHI",
1261
                 SPR_NOACCESS, SPR_NOACCESS,
1262
                 &spr_read_generic, &spr_write_generic,
1263
                 0x00000000);
1264
    /* XXX : not implemented */
1265
    spr_register(env, SPR_PTELO, "PTELO",
1266
                 SPR_NOACCESS, SPR_NOACCESS,
1267
                 &spr_read_generic, &spr_write_generic,
1268
                 0x00000000);
1269
    /* XXX : not implemented */
1270
    spr_register(env, SPR_TLBMISS, "TLBMISS",
1271
                 SPR_NOACCESS, SPR_NOACCESS,
1272
                 &spr_read_generic, &spr_write_generic,
1273
                 0x00000000);
1274
#endif
1275
}
1276

    
1277
static void gen_spr_usprgh (CPUPPCState *env)
1278
{
1279
    spr_register(env, SPR_USPRG4, "USPRG4",
1280
                 &spr_read_ureg, SPR_NOACCESS,
1281
                 &spr_read_ureg, SPR_NOACCESS,
1282
                 0x00000000);
1283
    spr_register(env, SPR_USPRG5, "USPRG5",
1284
                 &spr_read_ureg, SPR_NOACCESS,
1285
                 &spr_read_ureg, SPR_NOACCESS,
1286
                 0x00000000);
1287
    spr_register(env, SPR_USPRG6, "USPRG6",
1288
                 &spr_read_ureg, SPR_NOACCESS,
1289
                 &spr_read_ureg, SPR_NOACCESS,
1290
                 0x00000000);
1291
    spr_register(env, SPR_USPRG7, "USPRG7",
1292
                 &spr_read_ureg, SPR_NOACCESS,
1293
                 &spr_read_ureg, SPR_NOACCESS,
1294
                 0x00000000);
1295
}
1296

    
1297
/* PowerPC BookE SPR */
1298
static void gen_spr_BookE (CPUPPCState *env, uint64_t ivor_mask)
1299
{
1300
    const unsigned char *ivor_names[64] = {
1301
        "IVOR0",  "IVOR1",  "IVOR2",  "IVOR3",
1302
        "IVOR4",  "IVOR5",  "IVOR6",  "IVOR7",
1303
        "IVOR8",  "IVOR9",  "IVOR10", "IVOR11",
1304
        "IVOR12", "IVOR13", "IVOR14", "IVOR15",
1305
        "IVOR16", "IVOR17", "IVOR18", "IVOR19",
1306
        "IVOR20", "IVOR21", "IVOR22", "IVOR23",
1307
        "IVOR24", "IVOR25", "IVOR26", "IVOR27",
1308
        "IVOR28", "IVOR29", "IVOR30", "IVOR31",
1309
        "IVOR32", "IVOR33", "IVOR34", "IVOR35",
1310
        "IVOR36", "IVOR37", "IVOR38", "IVOR39",
1311
        "IVOR40", "IVOR41", "IVOR42", "IVOR43",
1312
        "IVOR44", "IVOR45", "IVOR46", "IVOR47",
1313
        "IVOR48", "IVOR49", "IVOR50", "IVOR51",
1314
        "IVOR52", "IVOR53", "IVOR54", "IVOR55",
1315
        "IVOR56", "IVOR57", "IVOR58", "IVOR59",
1316
        "IVOR60", "IVOR61", "IVOR62", "IVOR63",
1317
    };
1318
#define SPR_BOOKE_IVORxx (-1)
1319
    int ivor_sprn[64] = {
1320
        SPR_BOOKE_IVOR0,  SPR_BOOKE_IVOR1,  SPR_BOOKE_IVOR2,  SPR_BOOKE_IVOR3,
1321
        SPR_BOOKE_IVOR4,  SPR_BOOKE_IVOR5,  SPR_BOOKE_IVOR6,  SPR_BOOKE_IVOR7,
1322
        SPR_BOOKE_IVOR8,  SPR_BOOKE_IVOR9,  SPR_BOOKE_IVOR10, SPR_BOOKE_IVOR11,
1323
        SPR_BOOKE_IVOR12, SPR_BOOKE_IVOR13, SPR_BOOKE_IVOR14, SPR_BOOKE_IVOR15,
1324
        SPR_BOOKE_IVORxx, SPR_BOOKE_IVORxx, SPR_BOOKE_IVORxx, SPR_BOOKE_IVORxx,
1325
        SPR_BOOKE_IVORxx, SPR_BOOKE_IVORxx, SPR_BOOKE_IVORxx, SPR_BOOKE_IVORxx,
1326
        SPR_BOOKE_IVORxx, SPR_BOOKE_IVORxx, SPR_BOOKE_IVORxx, SPR_BOOKE_IVORxx,
1327
        SPR_BOOKE_IVORxx, SPR_BOOKE_IVORxx, SPR_BOOKE_IVORxx, SPR_BOOKE_IVORxx,
1328
        SPR_BOOKE_IVOR32, SPR_BOOKE_IVOR33, SPR_BOOKE_IVOR34, SPR_BOOKE_IVOR35,
1329
        SPR_BOOKE_IVOR36, SPR_BOOKE_IVOR37, SPR_BOOKE_IVORxx, SPR_BOOKE_IVORxx,
1330
        SPR_BOOKE_IVORxx, SPR_BOOKE_IVORxx, SPR_BOOKE_IVORxx, SPR_BOOKE_IVORxx,
1331
        SPR_BOOKE_IVORxx, SPR_BOOKE_IVORxx, SPR_BOOKE_IVORxx, SPR_BOOKE_IVORxx,
1332
        SPR_BOOKE_IVORxx, SPR_BOOKE_IVORxx, SPR_BOOKE_IVORxx, SPR_BOOKE_IVORxx,
1333
        SPR_BOOKE_IVORxx, SPR_BOOKE_IVORxx, SPR_BOOKE_IVORxx, SPR_BOOKE_IVORxx,
1334
        SPR_BOOKE_IVORxx, SPR_BOOKE_IVORxx, SPR_BOOKE_IVORxx, SPR_BOOKE_IVORxx,
1335
        SPR_BOOKE_IVORxx, SPR_BOOKE_IVORxx, SPR_BOOKE_IVORxx, SPR_BOOKE_IVORxx,
1336
    };
1337
    int i;
1338

    
1339
    /* Interrupt processing */
1340
    spr_register(env, SPR_BOOKE_CSRR0, "CSRR0",
1341
                 SPR_NOACCESS, SPR_NOACCESS,
1342
                 &spr_read_generic, &spr_write_generic,
1343
                 0x00000000);
1344
    spr_register(env, SPR_BOOKE_CSRR1, "CSRR1",
1345
                 SPR_NOACCESS, SPR_NOACCESS,
1346
                 &spr_read_generic, &spr_write_generic,
1347
                 0x00000000);
1348
    /* Debug */
1349
    /* XXX : not implemented */
1350
    spr_register(env, SPR_BOOKE_IAC1, "IAC1",
1351
                 SPR_NOACCESS, SPR_NOACCESS,
1352
                 &spr_read_generic, &spr_write_generic,
1353
                 0x00000000);
1354
    /* XXX : not implemented */
1355
    spr_register(env, SPR_BOOKE_IAC2, "IAC2",
1356
                 SPR_NOACCESS, SPR_NOACCESS,
1357
                 &spr_read_generic, &spr_write_generic,
1358
                 0x00000000);
1359
    /* XXX : not implemented */
1360
    spr_register(env, SPR_BOOKE_DAC1, "DAC1",
1361
                 SPR_NOACCESS, SPR_NOACCESS,
1362
                 &spr_read_generic, &spr_write_generic,
1363
                 0x00000000);
1364
    /* XXX : not implemented */
1365
    spr_register(env, SPR_BOOKE_DAC2, "DAC2",
1366
                 SPR_NOACCESS, SPR_NOACCESS,
1367
                 &spr_read_generic, &spr_write_generic,
1368
                 0x00000000);
1369
    /* XXX : not implemented */
1370
    spr_register(env, SPR_BOOKE_DBCR0, "DBCR0",
1371
                 SPR_NOACCESS, SPR_NOACCESS,
1372
                 &spr_read_generic, &spr_write_generic,
1373
                 0x00000000);
1374
    /* XXX : not implemented */
1375
    spr_register(env, SPR_BOOKE_DBCR1, "DBCR1",
1376
                 SPR_NOACCESS, SPR_NOACCESS,
1377
                 &spr_read_generic, &spr_write_generic,
1378
                 0x00000000);
1379
    /* XXX : not implemented */
1380
    spr_register(env, SPR_BOOKE_DBCR2, "DBCR2",
1381
                 SPR_NOACCESS, SPR_NOACCESS,
1382
                 &spr_read_generic, &spr_write_generic,
1383
                 0x00000000);
1384
    /* XXX : not implemented */
1385
    spr_register(env, SPR_BOOKE_DBSR, "DBSR",
1386
                 SPR_NOACCESS, SPR_NOACCESS,
1387
                 &spr_read_generic, &spr_write_clear,
1388
                 0x00000000);
1389
    spr_register(env, SPR_BOOKE_DEAR, "DEAR",
1390
                 SPR_NOACCESS, SPR_NOACCESS,
1391
                 &spr_read_generic, &spr_write_generic,
1392
                 0x00000000);
1393
    spr_register(env, SPR_BOOKE_ESR, "ESR",
1394
                 SPR_NOACCESS, SPR_NOACCESS,
1395
                 &spr_read_generic, &spr_write_generic,
1396
                 0x00000000);
1397
    spr_register(env, SPR_BOOKE_IVPR, "IVPR",
1398
                 SPR_NOACCESS, SPR_NOACCESS,
1399
                 &spr_read_generic, &spr_write_excp_prefix,
1400
                 0x00000000);
1401
    /* Exception vectors */
1402
    for (i = 0; i < 64; i++) {
1403
        if (ivor_mask & (1ULL << i)) {
1404
            if (ivor_sprn[i] == SPR_BOOKE_IVORxx) {
1405
                fprintf(stderr, "ERROR: IVOR %d SPR is not defined\n", i);
1406
                exit(1);
1407
            }
1408
            spr_register(env, ivor_sprn[i], ivor_names[i],
1409
                         SPR_NOACCESS, SPR_NOACCESS,
1410
                         &spr_read_generic, &spr_write_excp_vector,
1411
                         0x00000000);
1412
        }
1413
    }
1414
    spr_register(env, SPR_BOOKE_PID, "PID",
1415
                 SPR_NOACCESS, SPR_NOACCESS,
1416
                 &spr_read_generic, &spr_write_generic,
1417
                 0x00000000);
1418
    spr_register(env, SPR_BOOKE_TCR, "TCR",
1419
                 SPR_NOACCESS, SPR_NOACCESS,
1420
                 &spr_read_generic, &spr_write_booke_tcr,
1421
                 0x00000000);
1422
    spr_register(env, SPR_BOOKE_TSR, "TSR",
1423
                 SPR_NOACCESS, SPR_NOACCESS,
1424
                 &spr_read_generic, &spr_write_booke_tsr,
1425
                 0x00000000);
1426
    /* Timer */
1427
    spr_register(env, SPR_DECR, "DECR",
1428
                 SPR_NOACCESS, SPR_NOACCESS,
1429
                 &spr_read_decr, &spr_write_decr,
1430
                 0x00000000);
1431
    spr_register(env, SPR_BOOKE_DECAR, "DECAR",
1432
                 SPR_NOACCESS, SPR_NOACCESS,
1433
                 SPR_NOACCESS, &spr_write_generic,
1434
                 0x00000000);
1435
    /* SPRGs */
1436
    spr_register(env, SPR_USPRG0, "USPRG0",
1437
                 &spr_read_generic, &spr_write_generic,
1438
                 &spr_read_generic, &spr_write_generic,
1439
                 0x00000000);
1440
    spr_register(env, SPR_SPRG4, "SPRG4",
1441
                 SPR_NOACCESS, SPR_NOACCESS,
1442
                 &spr_read_generic, &spr_write_generic,
1443
                 0x00000000);
1444
    spr_register(env, SPR_SPRG5, "SPRG5",
1445
                 SPR_NOACCESS, SPR_NOACCESS,
1446
                 &spr_read_generic, &spr_write_generic,
1447
                 0x00000000);
1448
    spr_register(env, SPR_SPRG6, "SPRG6",
1449
                 SPR_NOACCESS, SPR_NOACCESS,
1450
                 &spr_read_generic, &spr_write_generic,
1451
                 0x00000000);
1452
    spr_register(env, SPR_SPRG7, "SPRG7",
1453
                 SPR_NOACCESS, SPR_NOACCESS,
1454
                 &spr_read_generic, &spr_write_generic,
1455
                 0x00000000);
1456
}
1457

    
1458
/* FSL storage control registers */
1459
static void gen_spr_BookE_FSL (CPUPPCState *env, uint32_t mas_mask)
1460
{
1461
#if !defined(CONFIG_USER_ONLY)
1462
    const unsigned char *mas_names[8] = {
1463
        "MAS0", "MAS1", "MAS2", "MAS3", "MAS4", "MAS5", "MAS6", "MAS7",
1464
    };
1465
    int mas_sprn[8] = {
1466
        SPR_BOOKE_MAS0, SPR_BOOKE_MAS1, SPR_BOOKE_MAS2, SPR_BOOKE_MAS3,
1467
        SPR_BOOKE_MAS4, SPR_BOOKE_MAS5, SPR_BOOKE_MAS6, SPR_BOOKE_MAS7,
1468
    };
1469
    int i;
1470

    
1471
    /* TLB assist registers */
1472
    /* XXX : not implemented */
1473
    for (i = 0; i < 8; i++) {
1474
        if (mas_mask & (1 << i)) {
1475
            spr_register(env, mas_sprn[i], mas_names[i],
1476
                         SPR_NOACCESS, SPR_NOACCESS,
1477
                         &spr_read_generic, &spr_write_generic,
1478
                         0x00000000);
1479
        }
1480
    }
1481
    if (env->nb_pids > 1) {
1482
        /* XXX : not implemented */
1483
        spr_register(env, SPR_BOOKE_PID1, "PID1",
1484
                     SPR_NOACCESS, SPR_NOACCESS,
1485
                     &spr_read_generic, &spr_write_generic,
1486
                     0x00000000);
1487
    }
1488
    if (env->nb_pids > 2) {
1489
        /* XXX : not implemented */
1490
        spr_register(env, SPR_BOOKE_PID2, "PID2",
1491
                     SPR_NOACCESS, SPR_NOACCESS,
1492
                     &spr_read_generic, &spr_write_generic,
1493
                     0x00000000);
1494
    }
1495
    /* XXX : not implemented */
1496
    spr_register(env, SPR_MMUCFG, "MMUCFG",
1497
                 SPR_NOACCESS, SPR_NOACCESS,
1498
                 &spr_read_generic, SPR_NOACCESS,
1499
                 0x00000000); /* TOFIX */
1500
    /* XXX : not implemented */
1501
    spr_register(env, SPR_MMUCSR0, "MMUCSR0",
1502
                 SPR_NOACCESS, SPR_NOACCESS,
1503
                 &spr_read_generic, &spr_write_generic,
1504
                 0x00000000); /* TOFIX */
1505
    switch (env->nb_ways) {
1506
    case 4:
1507
        /* XXX : not implemented */
1508
        spr_register(env, SPR_BOOKE_TLB3CFG, "TLB3CFG",
1509
                     SPR_NOACCESS, SPR_NOACCESS,
1510
                     &spr_read_generic, SPR_NOACCESS,
1511
                     0x00000000); /* TOFIX */
1512
        /* Fallthru */
1513
    case 3:
1514
        /* XXX : not implemented */
1515
        spr_register(env, SPR_BOOKE_TLB2CFG, "TLB2CFG",
1516
                     SPR_NOACCESS, SPR_NOACCESS,
1517
                     &spr_read_generic, SPR_NOACCESS,
1518
                     0x00000000); /* TOFIX */
1519
        /* Fallthru */
1520
    case 2:
1521
        /* XXX : not implemented */
1522
        spr_register(env, SPR_BOOKE_TLB1CFG, "TLB1CFG",
1523
                     SPR_NOACCESS, SPR_NOACCESS,
1524
                     &spr_read_generic, SPR_NOACCESS,
1525
                     0x00000000); /* TOFIX */
1526
        /* Fallthru */
1527
    case 1:
1528
        /* XXX : not implemented */
1529
        spr_register(env, SPR_BOOKE_TLB0CFG, "TLB0CFG",
1530
                     SPR_NOACCESS, SPR_NOACCESS,
1531
                     &spr_read_generic, SPR_NOACCESS,
1532
                     0x00000000); /* TOFIX */
1533
        /* Fallthru */
1534
    case 0:
1535
    default:
1536
        break;
1537
    }
1538
#endif
1539
}
1540

    
1541
/* SPR specific to PowerPC 440 implementation */
1542
static void gen_spr_440 (CPUPPCState *env)
1543
{
1544
    /* Cache control */
1545
    /* XXX : not implemented */
1546
    spr_register(env, SPR_440_DNV0, "DNV0",
1547
                 SPR_NOACCESS, SPR_NOACCESS,
1548
                 &spr_read_generic, &spr_write_generic,
1549
                 0x00000000);
1550
    /* XXX : not implemented */
1551
    spr_register(env, SPR_440_DNV1, "DNV1",
1552
                 SPR_NOACCESS, SPR_NOACCESS,
1553
                 &spr_read_generic, &spr_write_generic,
1554
                 0x00000000);
1555
    /* XXX : not implemented */
1556
    spr_register(env, SPR_440_DNV2, "DNV2",
1557
                 SPR_NOACCESS, SPR_NOACCESS,
1558
                 &spr_read_generic, &spr_write_generic,
1559
                 0x00000000);
1560
    /* XXX : not implemented */
1561
    spr_register(env, SPR_440_DNV3, "DNV3",
1562
                 SPR_NOACCESS, SPR_NOACCESS,
1563
                 &spr_read_generic, &spr_write_generic,
1564
                 0x00000000);
1565
    /* XXX : not implemented */
1566
    spr_register(env, SPR_440_DTV0, "DTV0",
1567
                 SPR_NOACCESS, SPR_NOACCESS,
1568
                 &spr_read_generic, &spr_write_generic,
1569
                 0x00000000);
1570
    /* XXX : not implemented */
1571
    spr_register(env, SPR_440_DTV1, "DTV1",
1572
                 SPR_NOACCESS, SPR_NOACCESS,
1573
                 &spr_read_generic, &spr_write_generic,
1574
                 0x00000000);
1575
    /* XXX : not implemented */
1576
    spr_register(env, SPR_440_DTV2, "DTV2",
1577
                 SPR_NOACCESS, SPR_NOACCESS,
1578
                 &spr_read_generic, &spr_write_generic,
1579
                 0x00000000);
1580
    /* XXX : not implemented */
1581
    spr_register(env, SPR_440_DTV3, "DTV3",
1582
                 SPR_NOACCESS, SPR_NOACCESS,
1583
                 &spr_read_generic, &spr_write_generic,
1584
                 0x00000000);
1585
    /* XXX : not implemented */
1586
    spr_register(env, SPR_440_DVLIM, "DVLIM",
1587
                 SPR_NOACCESS, SPR_NOACCESS,
1588
                 &spr_read_generic, &spr_write_generic,
1589
                 0x00000000);
1590
    /* XXX : not implemented */
1591
    spr_register(env, SPR_440_INV0, "INV0",
1592
                 SPR_NOACCESS, SPR_NOACCESS,
1593
                 &spr_read_generic, &spr_write_generic,
1594
                 0x00000000);
1595
    /* XXX : not implemented */
1596
    spr_register(env, SPR_440_INV1, "INV1",
1597
                 SPR_NOACCESS, SPR_NOACCESS,
1598
                 &spr_read_generic, &spr_write_generic,
1599
                 0x00000000);
1600
    /* XXX : not implemented */
1601
    spr_register(env, SPR_440_INV2, "INV2",
1602
                 SPR_NOACCESS, SPR_NOACCESS,
1603
                 &spr_read_generic, &spr_write_generic,
1604
                 0x00000000);
1605
    /* XXX : not implemented */
1606
    spr_register(env, SPR_440_INV3, "INV3",
1607
                 SPR_NOACCESS, SPR_NOACCESS,
1608
                 &spr_read_generic, &spr_write_generic,
1609
                 0x00000000);
1610
    /* XXX : not implemented */
1611
    spr_register(env, SPR_440_ITV0, "ITV0",
1612
                 SPR_NOACCESS, SPR_NOACCESS,
1613
                 &spr_read_generic, &spr_write_generic,
1614
                 0x00000000);
1615
    /* XXX : not implemented */
1616
    spr_register(env, SPR_440_ITV1, "ITV1",
1617
                 SPR_NOACCESS, SPR_NOACCESS,
1618
                 &spr_read_generic, &spr_write_generic,
1619
                 0x00000000);
1620
    /* XXX : not implemented */
1621
    spr_register(env, SPR_440_ITV2, "ITV2",
1622
                 SPR_NOACCESS, SPR_NOACCESS,
1623
                 &spr_read_generic, &spr_write_generic,
1624
                 0x00000000);
1625
    /* XXX : not implemented */
1626
    spr_register(env, SPR_440_ITV3, "ITV3",
1627
                 SPR_NOACCESS, SPR_NOACCESS,
1628
                 &spr_read_generic, &spr_write_generic,
1629
                 0x00000000);
1630
    /* XXX : not implemented */
1631
    spr_register(env, SPR_440_IVLIM, "IVLIM",
1632
                 SPR_NOACCESS, SPR_NOACCESS,
1633
                 &spr_read_generic, &spr_write_generic,
1634
                 0x00000000);
1635
    /* Cache debug */
1636
    /* XXX : not implemented */
1637
    spr_register(env, SPR_BOOKE_DCDBTRH, "DCDBTRH",
1638
                 SPR_NOACCESS, SPR_NOACCESS,
1639
                 &spr_read_generic, SPR_NOACCESS,
1640
                 0x00000000);
1641
    /* XXX : not implemented */
1642
    spr_register(env, SPR_BOOKE_DCDBTRL, "DCDBTRL",
1643
                 SPR_NOACCESS, SPR_NOACCESS,
1644
                 &spr_read_generic, SPR_NOACCESS,
1645
                 0x00000000);
1646
    /* XXX : not implemented */
1647
    spr_register(env, SPR_BOOKE_ICDBDR, "ICDBDR",
1648
                 SPR_NOACCESS, SPR_NOACCESS,
1649
                 &spr_read_generic, SPR_NOACCESS,
1650
                 0x00000000);
1651
    /* XXX : not implemented */
1652
    spr_register(env, SPR_BOOKE_ICDBTRH, "ICDBTRH",
1653
                 SPR_NOACCESS, SPR_NOACCESS,
1654
                 &spr_read_generic, SPR_NOACCESS,
1655
                 0x00000000);
1656
    /* XXX : not implemented */
1657
    spr_register(env, SPR_BOOKE_ICDBTRL, "ICDBTRL",
1658
                 SPR_NOACCESS, SPR_NOACCESS,
1659
                 &spr_read_generic, SPR_NOACCESS,
1660
                 0x00000000);
1661
    /* XXX : not implemented */
1662
    spr_register(env, SPR_440_DBDR, "DBDR",
1663
                 SPR_NOACCESS, SPR_NOACCESS,
1664
                 &spr_read_generic, &spr_write_generic,
1665
                 0x00000000);
1666
    /* Processor control */
1667
    spr_register(env, SPR_4xx_CCR0, "CCR0",
1668
                 SPR_NOACCESS, SPR_NOACCESS,
1669
                 &spr_read_generic, &spr_write_generic,
1670
                 0x00000000);
1671
    spr_register(env, SPR_440_RSTCFG, "RSTCFG",
1672
                 SPR_NOACCESS, SPR_NOACCESS,
1673
                 &spr_read_generic, SPR_NOACCESS,
1674
                 0x00000000);
1675
    /* Storage control */
1676
    spr_register(env, SPR_440_MMUCR, "MMUCR",
1677
                 SPR_NOACCESS, SPR_NOACCESS,
1678
                 &spr_read_generic, &spr_write_generic,
1679
                 0x00000000);
1680
}
1681

    
1682
/* SPR shared between PowerPC 40x implementations */
1683
static void gen_spr_40x (CPUPPCState *env)
1684
{
1685
    /* Cache */
1686
    /* not emulated, as Qemu do not emulate caches */
1687
    spr_register(env, SPR_40x_DCCR, "DCCR",
1688
                 SPR_NOACCESS, SPR_NOACCESS,
1689
                 &spr_read_generic, &spr_write_generic,
1690
                 0x00000000);
1691
    /* not emulated, as Qemu do not emulate caches */
1692
    spr_register(env, SPR_40x_ICCR, "ICCR",
1693
                 SPR_NOACCESS, SPR_NOACCESS,
1694
                 &spr_read_generic, &spr_write_generic,
1695
                 0x00000000);
1696
    /* not emulated, as Qemu do not emulate caches */
1697
    spr_register(env, SPR_BOOKE_ICDBDR, "ICDBDR",
1698
                 SPR_NOACCESS, SPR_NOACCESS,
1699
                 &spr_read_generic, SPR_NOACCESS,
1700
                 0x00000000);
1701
    /* Exception */
1702
    spr_register(env, SPR_40x_DEAR, "DEAR",
1703
                 SPR_NOACCESS, SPR_NOACCESS,
1704
                 &spr_read_generic, &spr_write_generic,
1705
                 0x00000000);
1706
    spr_register(env, SPR_40x_ESR, "ESR",
1707
                 SPR_NOACCESS, SPR_NOACCESS,
1708
                 &spr_read_generic, &spr_write_generic,
1709
                 0x00000000);
1710
    spr_register(env, SPR_40x_EVPR, "EVPR",
1711
                 SPR_NOACCESS, SPR_NOACCESS,
1712
                 &spr_read_generic, &spr_write_excp_prefix,
1713
                 0x00000000);
1714
    spr_register(env, SPR_40x_SRR2, "SRR2",
1715
                 &spr_read_generic, &spr_write_generic,
1716
                 &spr_read_generic, &spr_write_generic,
1717
                 0x00000000);
1718
    spr_register(env, SPR_40x_SRR3, "SRR3",
1719
                 &spr_read_generic, &spr_write_generic,
1720
                 &spr_read_generic, &spr_write_generic,
1721
                 0x00000000);
1722
    /* Timers */
1723
    spr_register(env, SPR_40x_PIT, "PIT",
1724
                 SPR_NOACCESS, SPR_NOACCESS,
1725
                 &spr_read_40x_pit, &spr_write_40x_pit,
1726
                 0x00000000);
1727
    spr_register(env, SPR_40x_TCR, "TCR",
1728
                 SPR_NOACCESS, SPR_NOACCESS,
1729
                 &spr_read_generic, &spr_write_booke_tcr,
1730
                 0x00000000);
1731
    spr_register(env, SPR_40x_TSR, "TSR",
1732
                 SPR_NOACCESS, SPR_NOACCESS,
1733
                 &spr_read_generic, &spr_write_booke_tsr,
1734
                 0x00000000);
1735
}
1736

    
1737
/* SPR specific to PowerPC 405 implementation */
1738
static void gen_spr_405 (CPUPPCState *env)
1739
{
1740
    /* MMU */
1741
    spr_register(env, SPR_40x_PID, "PID",
1742
                 SPR_NOACCESS, SPR_NOACCESS,
1743
                 &spr_read_generic, &spr_write_generic,
1744
                 0x00000000);
1745
    spr_register(env, SPR_4xx_CCR0, "CCR0",
1746
                 SPR_NOACCESS, SPR_NOACCESS,
1747
                 &spr_read_generic, &spr_write_generic,
1748
                 0x00700000);
1749
    /* Debug interface */
1750
    /* XXX : not implemented */
1751
    spr_register(env, SPR_40x_DBCR0, "DBCR0",
1752
                 SPR_NOACCESS, SPR_NOACCESS,
1753
                 &spr_read_generic, &spr_write_40x_dbcr0,
1754
                 0x00000000);
1755
    /* XXX : not implemented */
1756
    spr_register(env, SPR_405_DBCR1, "DBCR1",
1757
                 SPR_NOACCESS, SPR_NOACCESS,
1758
                 &spr_read_generic, &spr_write_generic,
1759
                 0x00000000);
1760
    /* XXX : not implemented */
1761
    spr_register(env, SPR_40x_DBSR, "DBSR",
1762
                 SPR_NOACCESS, SPR_NOACCESS,
1763
                 &spr_read_generic, &spr_write_clear,
1764
                 /* Last reset was system reset */
1765
                 0x00000300);
1766
    /* XXX : not implemented */
1767
    spr_register(env, SPR_40x_DAC1, "DAC1",
1768
                 SPR_NOACCESS, SPR_NOACCESS,
1769
                 &spr_read_generic, &spr_write_generic,
1770
                 0x00000000);
1771
    spr_register(env, SPR_40x_DAC2, "DAC2",
1772
                 SPR_NOACCESS, SPR_NOACCESS,
1773
                 &spr_read_generic, &spr_write_generic,
1774
                 0x00000000);
1775
    /* XXX : not implemented */
1776
    spr_register(env, SPR_405_DVC1, "DVC1",
1777
                 SPR_NOACCESS, SPR_NOACCESS,
1778
                 &spr_read_generic, &spr_write_generic,
1779
                 0x00000000);
1780
    /* XXX : not implemented */
1781
    spr_register(env, SPR_405_DVC2, "DVC2",
1782
                 SPR_NOACCESS, SPR_NOACCESS,
1783
                 &spr_read_generic, &spr_write_generic,
1784
                 0x00000000);
1785
    /* XXX : not implemented */
1786
    spr_register(env, SPR_40x_IAC1, "IAC1",
1787
                 SPR_NOACCESS, SPR_NOACCESS,
1788
                 &spr_read_generic, &spr_write_generic,
1789
                 0x00000000);
1790
    spr_register(env, SPR_40x_IAC2, "IAC2",
1791
                 SPR_NOACCESS, SPR_NOACCESS,
1792
                 &spr_read_generic, &spr_write_generic,
1793
                 0x00000000);
1794
    /* XXX : not implemented */
1795
    spr_register(env, SPR_405_IAC3, "IAC3",
1796
                 SPR_NOACCESS, SPR_NOACCESS,
1797
                 &spr_read_generic, &spr_write_generic,
1798
                 0x00000000);
1799
    /* XXX : not implemented */
1800
    spr_register(env, SPR_405_IAC4, "IAC4",
1801
                 SPR_NOACCESS, SPR_NOACCESS,
1802
                 &spr_read_generic, &spr_write_generic,
1803
                 0x00000000);
1804
    /* Storage control */
1805
    /* XXX: TODO: not implemented */
1806
    spr_register(env, SPR_405_SLER, "SLER",
1807
                 SPR_NOACCESS, SPR_NOACCESS,
1808
                 &spr_read_generic, &spr_write_40x_sler,
1809
                 0x00000000);
1810
    spr_register(env, SPR_40x_ZPR, "ZPR",
1811
                 SPR_NOACCESS, SPR_NOACCESS,
1812
                 &spr_read_generic, &spr_write_generic,
1813
                 0x00000000);
1814
    /* XXX : not implemented */
1815
    spr_register(env, SPR_405_SU0R, "SU0R",
1816
                 SPR_NOACCESS, SPR_NOACCESS,
1817
                 &spr_read_generic, &spr_write_generic,
1818
                 0x00000000);
1819
    /* SPRG */
1820
    spr_register(env, SPR_USPRG0, "USPRG0",
1821
                 &spr_read_ureg, SPR_NOACCESS,
1822
                 &spr_read_ureg, SPR_NOACCESS,
1823
                 0x00000000);
1824
    spr_register(env, SPR_SPRG4, "SPRG4",
1825
                 SPR_NOACCESS, SPR_NOACCESS,
1826
                 &spr_read_generic, &spr_write_generic,
1827
                 0x00000000);
1828
    spr_register(env, SPR_SPRG5, "SPRG5",
1829
                 SPR_NOACCESS, SPR_NOACCESS,
1830
                 spr_read_generic, &spr_write_generic,
1831
                 0x00000000);
1832
    spr_register(env, SPR_SPRG6, "SPRG6",
1833
                 SPR_NOACCESS, SPR_NOACCESS,
1834
                 spr_read_generic, &spr_write_generic,
1835
                 0x00000000);
1836
    spr_register(env, SPR_SPRG7, "SPRG7",
1837
                 SPR_NOACCESS, SPR_NOACCESS,
1838
                 spr_read_generic, &spr_write_generic,
1839
                 0x00000000);
1840
    gen_spr_usprgh(env);
1841
}
1842

    
1843
/* SPR shared between PowerPC 401 & 403 implementations */
1844
static void gen_spr_401_403 (CPUPPCState *env)
1845
{
1846
    /* Time base */
1847
    spr_register(env, SPR_403_VTBL,  "TBL",
1848
                 &spr_read_tbl, SPR_NOACCESS,
1849
                 &spr_read_tbl, SPR_NOACCESS,
1850
                 0x00000000);
1851
    spr_register(env, SPR_403_TBL,   "TBL",
1852
                 SPR_NOACCESS, SPR_NOACCESS,
1853
                 SPR_NOACCESS, &spr_write_tbl,
1854
                 0x00000000);
1855
    spr_register(env, SPR_403_VTBU,  "TBU",
1856
                 &spr_read_tbu, SPR_NOACCESS,
1857
                 &spr_read_tbu, SPR_NOACCESS,
1858
                 0x00000000);
1859
    spr_register(env, SPR_403_TBU,   "TBU",
1860
                 SPR_NOACCESS, SPR_NOACCESS,
1861
                 SPR_NOACCESS, &spr_write_tbu,
1862
                 0x00000000);
1863
    /* Debug */
1864
    /* not emulated, as Qemu do not emulate caches */
1865
    spr_register(env, SPR_403_CDBCR, "CDBCR",
1866
                 SPR_NOACCESS, SPR_NOACCESS,
1867
                 &spr_read_generic, &spr_write_generic,
1868
                 0x00000000);
1869
}
1870

    
1871
/* SPR specific to PowerPC 401 implementation */
1872
static void gen_spr_401 (CPUPPCState *env)
1873
{
1874
    /* Debug interface */
1875
    /* XXX : not implemented */
1876
    spr_register(env, SPR_40x_DBCR0, "DBCR",
1877
                 SPR_NOACCESS, SPR_NOACCESS,
1878
                 &spr_read_generic, &spr_write_40x_dbcr0,
1879
                 0x00000000);
1880
    /* XXX : not implemented */
1881
    spr_register(env, SPR_40x_DBSR, "DBSR",
1882
                 SPR_NOACCESS, SPR_NOACCESS,
1883
                 &spr_read_generic, &spr_write_clear,
1884
                 /* Last reset was system reset */
1885
                 0x00000300);
1886
    /* XXX : not implemented */
1887
    spr_register(env, SPR_40x_DAC1, "DAC",
1888
                 SPR_NOACCESS, SPR_NOACCESS,
1889
                 &spr_read_generic, &spr_write_generic,
1890
                 0x00000000);
1891
    /* XXX : not implemented */
1892
    spr_register(env, SPR_40x_IAC1, "IAC",
1893
                 SPR_NOACCESS, SPR_NOACCESS,
1894
                 &spr_read_generic, &spr_write_generic,
1895
                 0x00000000);
1896
    /* Storage control */
1897
    /* XXX: TODO: not implemented */
1898
    spr_register(env, SPR_405_SLER, "SLER",
1899
                 SPR_NOACCESS, SPR_NOACCESS,
1900
                 &spr_read_generic, &spr_write_40x_sler,
1901
                 0x00000000);
1902
    /* not emulated, as Qemu never does speculative access */
1903
    spr_register(env, SPR_40x_SGR, "SGR",
1904
                 SPR_NOACCESS, SPR_NOACCESS,
1905
                 &spr_read_generic, &spr_write_generic,
1906
                 0xFFFFFFFF);
1907
    /* not emulated, as Qemu do not emulate caches */
1908
    spr_register(env, SPR_40x_DCWR, "DCWR",
1909
                 SPR_NOACCESS, SPR_NOACCESS,
1910
                 &spr_read_generic, &spr_write_generic,
1911
                 0x00000000);
1912
}
1913

    
1914
static void gen_spr_401x2 (CPUPPCState *env)
1915
{
1916
    gen_spr_401(env);
1917
    spr_register(env, SPR_40x_PID, "PID",
1918
                 SPR_NOACCESS, SPR_NOACCESS,
1919
                 &spr_read_generic, &spr_write_generic,
1920
                 0x00000000);
1921
    spr_register(env, SPR_40x_ZPR, "ZPR",
1922
                 SPR_NOACCESS, SPR_NOACCESS,
1923
                 &spr_read_generic, &spr_write_generic,
1924
                 0x00000000);
1925
}
1926

    
1927
/* SPR specific to PowerPC 403 implementation */
1928
static void gen_spr_403 (CPUPPCState *env)
1929
{
1930
    /* Debug interface */
1931
    /* XXX : not implemented */
1932
    spr_register(env, SPR_40x_DBCR0, "DBCR0",
1933
                 SPR_NOACCESS, SPR_NOACCESS,
1934
                 &spr_read_generic, &spr_write_40x_dbcr0,
1935
                 0x00000000);
1936
    /* XXX : not implemented */
1937
    spr_register(env, SPR_40x_DBSR, "DBSR",
1938
                 SPR_NOACCESS, SPR_NOACCESS,
1939
                 &spr_read_generic, &spr_write_clear,
1940
                 /* Last reset was system reset */
1941
                 0x00000300);
1942
    /* XXX : not implemented */
1943
    spr_register(env, SPR_40x_DAC1, "DAC1",
1944
                 SPR_NOACCESS, SPR_NOACCESS,
1945
                 &spr_read_generic, &spr_write_generic,
1946
                 0x00000000);
1947
    /* XXX : not implemented */
1948
    spr_register(env, SPR_40x_DAC2, "DAC2",
1949
                 SPR_NOACCESS, SPR_NOACCESS,
1950
                 &spr_read_generic, &spr_write_generic,
1951
                 0x00000000);
1952
    /* XXX : not implemented */
1953
    spr_register(env, SPR_40x_IAC1, "IAC1",
1954
                 SPR_NOACCESS, SPR_NOACCESS,
1955
                 &spr_read_generic, &spr_write_generic,
1956
                 0x00000000);
1957
    /* XXX : not implemented */
1958
    spr_register(env, SPR_40x_IAC2, "IAC2",
1959
                 SPR_NOACCESS, SPR_NOACCESS,
1960
                 &spr_read_generic, &spr_write_generic,
1961
                 0x00000000);
1962
}
1963

    
1964
static void gen_spr_403_real (CPUPPCState *env)
1965
{
1966
    spr_register(env, SPR_403_PBL1,  "PBL1",
1967
                 SPR_NOACCESS, SPR_NOACCESS,
1968
                 &spr_read_403_pbr, &spr_write_403_pbr,
1969
                 0x00000000);
1970
    spr_register(env, SPR_403_PBU1,  "PBU1",
1971
                 SPR_NOACCESS, SPR_NOACCESS,
1972
                 &spr_read_403_pbr, &spr_write_403_pbr,
1973
                 0x00000000);
1974
    spr_register(env, SPR_403_PBL2,  "PBL2",
1975
                 SPR_NOACCESS, SPR_NOACCESS,
1976
                 &spr_read_403_pbr, &spr_write_403_pbr,
1977
                 0x00000000);
1978
    spr_register(env, SPR_403_PBU2,  "PBU2",
1979
                 SPR_NOACCESS, SPR_NOACCESS,
1980
                 &spr_read_403_pbr, &spr_write_403_pbr,
1981
                 0x00000000);
1982
}
1983

    
1984
static void gen_spr_403_mmu (CPUPPCState *env)
1985
{
1986
    /* MMU */
1987
    spr_register(env, SPR_40x_PID, "PID",
1988
                 SPR_NOACCESS, SPR_NOACCESS,
1989
                 &spr_read_generic, &spr_write_generic,
1990
                 0x00000000);
1991
    spr_register(env, SPR_40x_ZPR, "ZPR",
1992
                 SPR_NOACCESS, SPR_NOACCESS,
1993
                 &spr_read_generic, &spr_write_generic,
1994
                 0x00000000);
1995
}
1996

    
1997
/* SPR specific to PowerPC compression coprocessor extension */
1998
static void gen_spr_compress (CPUPPCState *env)
1999
{
2000
    /* XXX : not implemented */
2001
    spr_register(env, SPR_401_SKR, "SKR",
2002
                 SPR_NOACCESS, SPR_NOACCESS,
2003
                 &spr_read_generic, &spr_write_generic,
2004
                 0x00000000);
2005
}
2006

    
2007
#if defined (TARGET_PPC64)
2008
/* SPR specific to PowerPC 620 */
2009
static void gen_spr_620 (CPUPPCState *env)
2010
{
2011
    /* XXX : not implemented */
2012
    spr_register(env, SPR_620_PMR0, "PMR0",
2013
                 SPR_NOACCESS, SPR_NOACCESS,
2014
                 &spr_read_generic, &spr_write_generic,
2015
                 0x00000000);
2016
    /* XXX : not implemented */
2017
    spr_register(env, SPR_620_PMR1, "PMR1",
2018
                 SPR_NOACCESS, SPR_NOACCESS,
2019
                 &spr_read_generic, &spr_write_generic,
2020
                 0x00000000);
2021
    /* XXX : not implemented */
2022
    spr_register(env, SPR_620_PMR2, "PMR2",
2023
                 SPR_NOACCESS, SPR_NOACCESS,
2024
                 &spr_read_generic, &spr_write_generic,
2025
                 0x00000000);
2026
    /* XXX : not implemented */
2027
    spr_register(env, SPR_620_PMR3, "PMR3",
2028
                 SPR_NOACCESS, SPR_NOACCESS,
2029
                 &spr_read_generic, &spr_write_generic,
2030
                 0x00000000);
2031
    /* XXX : not implemented */
2032
    spr_register(env, SPR_620_PMR4, "PMR4",
2033
                 SPR_NOACCESS, SPR_NOACCESS,
2034
                 &spr_read_generic, &spr_write_generic,
2035
                 0x00000000);
2036
    /* XXX : not implemented */
2037
    spr_register(env, SPR_620_PMR5, "PMR5",
2038
                 SPR_NOACCESS, SPR_NOACCESS,
2039
                 &spr_read_generic, &spr_write_generic,
2040
                 0x00000000);
2041
    /* XXX : not implemented */
2042
    spr_register(env, SPR_620_PMR6, "PMR6",
2043
                 SPR_NOACCESS, SPR_NOACCESS,
2044
                 &spr_read_generic, &spr_write_generic,
2045
                 0x00000000);
2046
    /* XXX : not implemented */
2047
    spr_register(env, SPR_620_PMR7, "PMR7",
2048
                 SPR_NOACCESS, SPR_NOACCESS,
2049
                 &spr_read_generic, &spr_write_generic,
2050
                 0x00000000);
2051
    /* XXX : not implemented */
2052
    spr_register(env, SPR_620_PMR8, "PMR8",
2053
                 SPR_NOACCESS, SPR_NOACCESS,
2054
                 &spr_read_generic, &spr_write_generic,
2055
                 0x00000000);
2056
    /* XXX : not implemented */
2057
    spr_register(env, SPR_620_PMR9, "PMR9",
2058
                 SPR_NOACCESS, SPR_NOACCESS,
2059
                 &spr_read_generic, &spr_write_generic,
2060
                 0x00000000);
2061
    /* XXX : not implemented */
2062
    spr_register(env, SPR_620_PMRA, "PMR10",
2063
                 SPR_NOACCESS, SPR_NOACCESS,
2064
                 &spr_read_generic, &spr_write_generic,
2065
                 0x00000000);
2066
    /* XXX : not implemented */
2067
    spr_register(env, SPR_620_PMRB, "PMR11",
2068
                 SPR_NOACCESS, SPR_NOACCESS,
2069
                 &spr_read_generic, &spr_write_generic,
2070
                 0x00000000);
2071
    /* XXX : not implemented */
2072
    spr_register(env, SPR_620_PMRC, "PMR12",
2073
                 SPR_NOACCESS, SPR_NOACCESS,
2074
                 &spr_read_generic, &spr_write_generic,
2075
                 0x00000000);
2076
    /* XXX : not implemented */
2077
    spr_register(env, SPR_620_PMRD, "PMR13",
2078
                 SPR_NOACCESS, SPR_NOACCESS,
2079
                 &spr_read_generic, &spr_write_generic,
2080
                 0x00000000);
2081
    /* XXX : not implemented */
2082
    spr_register(env, SPR_620_PMRE, "PMR14",
2083
                 SPR_NOACCESS, SPR_NOACCESS,
2084
                 &spr_read_generic, &spr_write_generic,
2085
                 0x00000000);
2086
    /* XXX : not implemented */
2087
    spr_register(env, SPR_620_PMRF, "PMR15",
2088
                 SPR_NOACCESS, SPR_NOACCESS,
2089
                 &spr_read_generic, &spr_write_generic,
2090
                 0x00000000);
2091
    /* XXX : not implemented */
2092
    spr_register(env, SPR_620_HID8, "HID8",
2093
                 SPR_NOACCESS, SPR_NOACCESS,
2094
                 &spr_read_generic, &spr_write_generic,
2095
                 0x00000000);
2096
    /* XXX : not implemented */
2097
    spr_register(env, SPR_620_HID9, "HID9",
2098
                 SPR_NOACCESS, SPR_NOACCESS,
2099
                 &spr_read_generic, &spr_write_generic,
2100
                 0x00000000);
2101
}
2102
#endif /* defined (TARGET_PPC64) */
2103

    
2104
static void gen_spr_5xx_8xx (CPUPPCState *env)
2105
{
2106
    /* Exception processing */
2107
    spr_register(env, SPR_DSISR, "DSISR",
2108
                 SPR_NOACCESS, SPR_NOACCESS,
2109
                 &spr_read_generic, &spr_write_generic,
2110
                 0x00000000);
2111
    spr_register(env, SPR_DAR, "DAR",
2112
                 SPR_NOACCESS, SPR_NOACCESS,
2113
                 &spr_read_generic, &spr_write_generic,
2114
                 0x00000000);
2115
    /* Timer */
2116
    spr_register(env, SPR_DECR, "DECR",
2117
                 SPR_NOACCESS, SPR_NOACCESS,
2118
                 &spr_read_decr, &spr_write_decr,
2119
                 0x00000000);
2120
    /* XXX : not implemented */
2121
    spr_register(env, SPR_MPC_EIE, "EIE",
2122
                 SPR_NOACCESS, SPR_NOACCESS,
2123
                 &spr_read_generic, &spr_write_generic,
2124
                 0x00000000);
2125
    /* XXX : not implemented */
2126
    spr_register(env, SPR_MPC_EID, "EID",
2127
                 SPR_NOACCESS, SPR_NOACCESS,
2128
                 &spr_read_generic, &spr_write_generic,
2129
                 0x00000000);
2130
    /* XXX : not implemented */
2131
    spr_register(env, SPR_MPC_NRI, "NRI",
2132
                 SPR_NOACCESS, SPR_NOACCESS,
2133
                 &spr_read_generic, &spr_write_generic,
2134
                 0x00000000);
2135
    /* XXX : not implemented */
2136
    spr_register(env, SPR_MPC_CMPA, "CMPA",
2137
                 SPR_NOACCESS, SPR_NOACCESS,
2138
                 &spr_read_generic, &spr_write_generic,
2139
                 0x00000000);
2140
    /* XXX : not implemented */
2141
    spr_register(env, SPR_MPC_CMPB, "CMPB",
2142
                 SPR_NOACCESS, SPR_NOACCESS,
2143
                 &spr_read_generic, &spr_write_generic,
2144
                 0x00000000);
2145
    /* XXX : not implemented */
2146
    spr_register(env, SPR_MPC_CMPC, "CMPC",
2147
                 SPR_NOACCESS, SPR_NOACCESS,
2148
                 &spr_read_generic, &spr_write_generic,
2149
                 0x00000000);
2150
    /* XXX : not implemented */
2151
    spr_register(env, SPR_MPC_CMPD, "CMPD",
2152
                 SPR_NOACCESS, SPR_NOACCESS,
2153
                 &spr_read_generic, &spr_write_generic,
2154
                 0x00000000);
2155
    /* XXX : not implemented */
2156
    spr_register(env, SPR_MPC_ECR, "ECR",
2157
                 SPR_NOACCESS, SPR_NOACCESS,
2158
                 &spr_read_generic, &spr_write_generic,
2159
                 0x00000000);
2160
    /* XXX : not implemented */
2161
    spr_register(env, SPR_MPC_DER, "DER",
2162
                 SPR_NOACCESS, SPR_NOACCESS,
2163
                 &spr_read_generic, &spr_write_generic,
2164
                 0x00000000);
2165
    /* XXX : not implemented */
2166
    spr_register(env, SPR_MPC_COUNTA, "COUNTA",
2167
                 SPR_NOACCESS, SPR_NOACCESS,
2168
                 &spr_read_generic, &spr_write_generic,
2169
                 0x00000000);
2170
    /* XXX : not implemented */
2171
    spr_register(env, SPR_MPC_COUNTB, "COUNTB",
2172
                 SPR_NOACCESS, SPR_NOACCESS,
2173
                 &spr_read_generic, &spr_write_generic,
2174
                 0x00000000);
2175
    /* XXX : not implemented */
2176
    spr_register(env, SPR_MPC_CMPE, "CMPE",
2177
                 SPR_NOACCESS, SPR_NOACCESS,
2178
                 &spr_read_generic, &spr_write_generic,
2179
                 0x00000000);
2180
    /* XXX : not implemented */
2181
    spr_register(env, SPR_MPC_CMPF, "CMPF",
2182
                 SPR_NOACCESS, SPR_NOACCESS,
2183
                 &spr_read_generic, &spr_write_generic,
2184
                 0x00000000);
2185
    /* XXX : not implemented */
2186
    spr_register(env, SPR_MPC_CMPG, "CMPG",
2187
                 SPR_NOACCESS, SPR_NOACCESS,
2188
                 &spr_read_generic, &spr_write_generic,
2189
                 0x00000000);
2190
    /* XXX : not implemented */
2191
    spr_register(env, SPR_MPC_CMPH, "CMPH",
2192
                 SPR_NOACCESS, SPR_NOACCESS,
2193
                 &spr_read_generic, &spr_write_generic,
2194
                 0x00000000);
2195
    /* XXX : not implemented */
2196
    spr_register(env, SPR_MPC_LCTRL1, "LCTRL1",
2197
                 SPR_NOACCESS, SPR_NOACCESS,
2198
                 &spr_read_generic, &spr_write_generic,
2199
                 0x00000000);
2200
    /* XXX : not implemented */
2201
    spr_register(env, SPR_MPC_LCTRL2, "LCTRL2",
2202
                 SPR_NOACCESS, SPR_NOACCESS,
2203
                 &spr_read_generic, &spr_write_generic,
2204
                 0x00000000);
2205
    /* XXX : not implemented */
2206
    spr_register(env, SPR_MPC_BAR, "BAR",
2207
                 SPR_NOACCESS, SPR_NOACCESS,
2208
                 &spr_read_generic, &spr_write_generic,
2209
                 0x00000000);
2210
    /* XXX : not implemented */
2211
    spr_register(env, SPR_MPC_DPDR, "DPDR",
2212
                 SPR_NOACCESS, SPR_NOACCESS,
2213
                 &spr_read_generic, &spr_write_generic,
2214
                 0x00000000);
2215
    /* XXX : not implemented */
2216
    spr_register(env, SPR_MPC_IMMR, "IMMR",
2217
                 SPR_NOACCESS, SPR_NOACCESS,
2218
                 &spr_read_generic, &spr_write_generic,
2219
                 0x00000000);
2220
}
2221

    
2222
static void gen_spr_5xx (CPUPPCState *env)
2223
{
2224
    /* XXX : not implemented */
2225
    spr_register(env, SPR_RCPU_MI_GRA, "MI_GRA",
2226
                 SPR_NOACCESS, SPR_NOACCESS,
2227
                 &spr_read_generic, &spr_write_generic,
2228
                 0x00000000);
2229
    /* XXX : not implemented */
2230
    spr_register(env, SPR_RCPU_L2U_GRA, "L2U_GRA",
2231
                 SPR_NOACCESS, SPR_NOACCESS,
2232
                 &spr_read_generic, &spr_write_generic,
2233
                 0x00000000);
2234
    /* XXX : not implemented */
2235
    spr_register(env, SPR_RPCU_BBCMCR, "L2U_BBCMCR",
2236
                 SPR_NOACCESS, SPR_NOACCESS,
2237
                 &spr_read_generic, &spr_write_generic,
2238
                 0x00000000);
2239
    /* XXX : not implemented */
2240
    spr_register(env, SPR_RCPU_L2U_MCR, "L2U_MCR",
2241
                 SPR_NOACCESS, SPR_NOACCESS,
2242
                 &spr_read_generic, &spr_write_generic,
2243
                 0x00000000);
2244
    /* XXX : not implemented */
2245
    spr_register(env, SPR_RCPU_MI_RBA0, "MI_RBA0",
2246
                 SPR_NOACCESS, SPR_NOACCESS,
2247
                 &spr_read_generic, &spr_write_generic,
2248
                 0x00000000);
2249
    /* XXX : not implemented */
2250
    spr_register(env, SPR_RCPU_MI_RBA1, "MI_RBA1",
2251
                 SPR_NOACCESS, SPR_NOACCESS,
2252
                 &spr_read_generic, &spr_write_generic,
2253
                 0x00000000);
2254
    /* XXX : not implemented */
2255
    spr_register(env, SPR_RCPU_MI_RBA2, "MI_RBA2",
2256
                 SPR_NOACCESS, SPR_NOACCESS,
2257
                 &spr_read_generic, &spr_write_generic,
2258
                 0x00000000);
2259
    /* XXX : not implemented */
2260
    spr_register(env, SPR_RCPU_MI_RBA3, "MI_RBA3",
2261
                 SPR_NOACCESS, SPR_NOACCESS,
2262
                 &spr_read_generic, &spr_write_generic,
2263
                 0x00000000);
2264
    /* XXX : not implemented */
2265
    spr_register(env, SPR_RCPU_L2U_RBA0, "L2U_RBA0",
2266
                 SPR_NOACCESS, SPR_NOACCESS,
2267
                 &spr_read_generic, &spr_write_generic,
2268
                 0x00000000);
2269
    /* XXX : not implemented */
2270
    spr_register(env, SPR_RCPU_L2U_RBA1, "L2U_RBA1",
2271
                 SPR_NOACCESS, SPR_NOACCESS,
2272
                 &spr_read_generic, &spr_write_generic,
2273
                 0x00000000);
2274
    /* XXX : not implemented */
2275
    spr_register(env, SPR_RCPU_L2U_RBA2, "L2U_RBA2",
2276
                 SPR_NOACCESS, SPR_NOACCESS,
2277
                 &spr_read_generic, &spr_write_generic,
2278
                 0x00000000);
2279
    /* XXX : not implemented */
2280
    spr_register(env, SPR_RCPU_L2U_RBA3, "L2U_RBA3",
2281
                 SPR_NOACCESS, SPR_NOACCESS,
2282
                 &spr_read_generic, &spr_write_generic,
2283
                 0x00000000);
2284
    /* XXX : not implemented */
2285
    spr_register(env, SPR_RCPU_MI_RA0, "MI_RA0",
2286
                 SPR_NOACCESS, SPR_NOACCESS,
2287
                 &spr_read_generic, &spr_write_generic,
2288
                 0x00000000);
2289
    /* XXX : not implemented */
2290
    spr_register(env, SPR_RCPU_MI_RA1, "MI_RA1",
2291
                 SPR_NOACCESS, SPR_NOACCESS,
2292
                 &spr_read_generic, &spr_write_generic,
2293
                 0x00000000);
2294
    /* XXX : not implemented */
2295
    spr_register(env, SPR_RCPU_MI_RA2, "MI_RA2",
2296
                 SPR_NOACCESS, SPR_NOACCESS,
2297
                 &spr_read_generic, &spr_write_generic,
2298
                 0x00000000);
2299
    /* XXX : not implemented */
2300
    spr_register(env, SPR_RCPU_MI_RA3, "MI_RA3",
2301
                 SPR_NOACCESS, SPR_NOACCESS,
2302
                 &spr_read_generic, &spr_write_generic,
2303
                 0x00000000);
2304
    /* XXX : not implemented */
2305
    spr_register(env, SPR_RCPU_L2U_RA0, "L2U_RA0",
2306
                 SPR_NOACCESS, SPR_NOACCESS,
2307
                 &spr_read_generic, &spr_write_generic,
2308
                 0x00000000);
2309
    /* XXX : not implemented */
2310
    spr_register(env, SPR_RCPU_L2U_RA1, "L2U_RA1",
2311
                 SPR_NOACCESS, SPR_NOACCESS,
2312
                 &spr_read_generic, &spr_write_generic,
2313
                 0x00000000);
2314
    /* XXX : not implemented */
2315
    spr_register(env, SPR_RCPU_L2U_RA2, "L2U_RA2",
2316
                 SPR_NOACCESS, SPR_NOACCESS,
2317
                 &spr_read_generic, &spr_write_generic,
2318
                 0x00000000);
2319
    /* XXX : not implemented */
2320
    spr_register(env, SPR_RCPU_L2U_RA3, "L2U_RA3",
2321
                 SPR_NOACCESS, SPR_NOACCESS,
2322
                 &spr_read_generic, &spr_write_generic,
2323
                 0x00000000);
2324
    /* XXX : not implemented */
2325
    spr_register(env, SPR_RCPU_FPECR, "FPECR",
2326
                 SPR_NOACCESS, SPR_NOACCESS,
2327
                 &spr_read_generic, &spr_write_generic,
2328
                 0x00000000);
2329
}
2330

    
2331
static void gen_spr_8xx (CPUPPCState *env)
2332
{
2333
    /* XXX : not implemented */
2334
    spr_register(env, SPR_MPC_IC_CST, "IC_CST",
2335
                 SPR_NOACCESS, SPR_NOACCESS,
2336
                 &spr_read_generic, &spr_write_generic,
2337
                 0x00000000);
2338
    /* XXX : not implemented */
2339
    spr_register(env, SPR_MPC_IC_ADR, "IC_ADR",
2340
                 SPR_NOACCESS, SPR_NOACCESS,
2341
                 &spr_read_generic, &spr_write_generic,
2342
                 0x00000000);
2343
    /* XXX : not implemented */
2344
    spr_register(env, SPR_MPC_IC_DAT, "IC_DAT",
2345
                 SPR_NOACCESS, SPR_NOACCESS,
2346
                 &spr_read_generic, &spr_write_generic,
2347
                 0x00000000);
2348
    /* XXX : not implemented */
2349
    spr_register(env, SPR_MPC_DC_CST, "DC_CST",
2350
                 SPR_NOACCESS, SPR_NOACCESS,
2351
                 &spr_read_generic, &spr_write_generic,
2352
                 0x00000000);
2353
    /* XXX : not implemented */
2354
    spr_register(env, SPR_MPC_DC_ADR, "DC_ADR",
2355
                 SPR_NOACCESS, SPR_NOACCESS,
2356
                 &spr_read_generic, &spr_write_generic,
2357
                 0x00000000);
2358
    /* XXX : not implemented */
2359
    spr_register(env, SPR_MPC_DC_DAT, "DC_DAT",
2360
                 SPR_NOACCESS, SPR_NOACCESS,
2361
                 &spr_read_generic, &spr_write_generic,
2362
                 0x00000000);
2363
    /* XXX : not implemented */
2364
    spr_register(env, SPR_MPC_MI_CTR, "MI_CTR",
2365
                 SPR_NOACCESS, SPR_NOACCESS,
2366
                 &spr_read_generic, &spr_write_generic,
2367
                 0x00000000);
2368
    /* XXX : not implemented */
2369
    spr_register(env, SPR_MPC_MI_AP, "MI_AP",
2370
                 SPR_NOACCESS, SPR_NOACCESS,
2371
                 &spr_read_generic, &spr_write_generic,
2372
                 0x00000000);
2373
    /* XXX : not implemented */
2374
    spr_register(env, SPR_MPC_MI_EPN, "MI_EPN",
2375
                 SPR_NOACCESS, SPR_NOACCESS,
2376
                 &spr_read_generic, &spr_write_generic,
2377
                 0x00000000);
2378
    /* XXX : not implemented */
2379
    spr_register(env, SPR_MPC_MI_TWC, "MI_TWC",
2380
                 SPR_NOACCESS, SPR_NOACCESS,
2381
                 &spr_read_generic, &spr_write_generic,
2382
                 0x00000000);
2383
    /* XXX : not implemented */
2384
    spr_register(env, SPR_MPC_MI_RPN, "MI_RPN",
2385
                 SPR_NOACCESS, SPR_NOACCESS,
2386
                 &spr_read_generic, &spr_write_generic,
2387
                 0x00000000);
2388
    /* XXX : not implemented */
2389
    spr_register(env, SPR_MPC_MI_DBCAM, "MI_DBCAM",
2390
                 SPR_NOACCESS, SPR_NOACCESS,
2391
                 &spr_read_generic, &spr_write_generic,
2392
                 0x00000000);
2393
    /* XXX : not implemented */
2394
    spr_register(env, SPR_MPC_MI_DBRAM0, "MI_DBRAM0",
2395
                 SPR_NOACCESS, SPR_NOACCESS,
2396
                 &spr_read_generic, &spr_write_generic,
2397
                 0x00000000);
2398
    /* XXX : not implemented */
2399
    spr_register(env, SPR_MPC_MI_DBRAM1, "MI_DBRAM1",
2400
                 SPR_NOACCESS, SPR_NOACCESS,
2401
                 &spr_read_generic, &spr_write_generic,
2402
                 0x00000000);
2403
    /* XXX : not implemented */
2404
    spr_register(env, SPR_MPC_MD_CTR, "MD_CTR",
2405
                 SPR_NOACCESS, SPR_NOACCESS,
2406
                 &spr_read_generic, &spr_write_generic,
2407
                 0x00000000);
2408
    /* XXX : not implemented */
2409
    spr_register(env, SPR_MPC_MD_CASID, "MD_CASID",
2410
                 SPR_NOACCESS, SPR_NOACCESS,
2411
                 &spr_read_generic, &spr_write_generic,
2412
                 0x00000000);
2413
    /* XXX : not implemented */
2414
    spr_register(env, SPR_MPC_MD_AP, "MD_AP",
2415
                 SPR_NOACCESS, SPR_NOACCESS,
2416
                 &spr_read_generic, &spr_write_generic,
2417
                 0x00000000);
2418
    /* XXX : not implemented */
2419
    spr_register(env, SPR_MPC_MD_EPN, "MD_EPN",
2420
                 SPR_NOACCESS, SPR_NOACCESS,
2421
                 &spr_read_generic, &spr_write_generic,
2422
                 0x00000000);
2423
    /* XXX : not implemented */
2424
    spr_register(env, SPR_MPC_MD_TWB, "MD_TWB",
2425
                 SPR_NOACCESS, SPR_NOACCESS,
2426
                 &spr_read_generic, &spr_write_generic,
2427
                 0x00000000);
2428
    /* XXX : not implemented */
2429
    spr_register(env, SPR_MPC_MD_TWC, "MD_TWC",
2430
                 SPR_NOACCESS, SPR_NOACCESS,
2431
                 &spr_read_generic, &spr_write_generic,
2432
                 0x00000000);
2433
    /* XXX : not implemented */
2434
    spr_register(env, SPR_MPC_MD_RPN, "MD_RPN",
2435
                 SPR_NOACCESS, SPR_NOACCESS,
2436
                 &spr_read_generic, &spr_write_generic,
2437
                 0x00000000);
2438
    /* XXX : not implemented */
2439
    spr_register(env, SPR_MPC_MD_TW, "MD_TW",
2440
                 SPR_NOACCESS, SPR_NOACCESS,
2441
                 &spr_read_generic, &spr_write_generic,
2442
                 0x00000000);
2443
    /* XXX : not implemented */
2444
    spr_register(env, SPR_MPC_MD_DBCAM, "MD_DBCAM",
2445
                 SPR_NOACCESS, SPR_NOACCESS,
2446
                 &spr_read_generic, &spr_write_generic,
2447
                 0x00000000);
2448
    /* XXX : not implemented */
2449
    spr_register(env, SPR_MPC_MD_DBRAM0, "MD_DBRAM0",
2450
                 SPR_NOACCESS, SPR_NOACCESS,
2451
                 &spr_read_generic, &spr_write_generic,
2452
                 0x00000000);
2453
    /* XXX : not implemented */
2454
    spr_register(env, SPR_MPC_MD_DBRAM1, "MD_DBRAM1",
2455
                 SPR_NOACCESS, SPR_NOACCESS,
2456
                 &spr_read_generic, &spr_write_generic,
2457
                 0x00000000);
2458
}
2459

    
2460
// XXX: TODO
2461
/*
2462
 * AMR     => SPR 29 (Power 2.04)
2463
 * CTRL    => SPR 136 (Power 2.04)
2464
 * CTRL    => SPR 152 (Power 2.04)
2465
 * SCOMC   => SPR 276 (64 bits ?)
2466
 * SCOMD   => SPR 277 (64 bits ?)
2467
 * TBU40   => SPR 286 (Power 2.04 hypv)
2468
 * HSPRG0  => SPR 304 (Power 2.04 hypv)
2469
 * HSPRG1  => SPR 305 (Power 2.04 hypv)
2470
 * HDSISR  => SPR 306 (Power 2.04 hypv)
2471
 * HDAR    => SPR 307 (Power 2.04 hypv)
2472
 * PURR    => SPR 309 (Power 2.04 hypv)
2473
 * HDEC    => SPR 310 (Power 2.04 hypv)
2474
 * HIOR    => SPR 311 (hypv)
2475
 * RMOR    => SPR 312 (970)
2476
 * HRMOR   => SPR 313 (Power 2.04 hypv)
2477
 * HSRR0   => SPR 314 (Power 2.04 hypv)
2478
 * HSRR1   => SPR 315 (Power 2.04 hypv)
2479
 * LPCR    => SPR 316 (970)
2480
 * LPIDR   => SPR 317 (970)
2481
 * SPEFSCR => SPR 512 (Power 2.04 emb)
2482
 * EPR     => SPR 702 (Power 2.04 emb)
2483
 * perf    => 768-783 (Power 2.04)
2484
 * perf    => 784-799 (Power 2.04)
2485
 * PPR     => SPR 896 (Power 2.04)
2486
 * EPLC    => SPR 947 (Power 2.04 emb)
2487
 * EPSC    => SPR 948 (Power 2.04 emb)
2488
 * DABRX   => 1015    (Power 2.04 hypv)
2489
 * FPECR   => SPR 1022 (?)
2490
 * ... and more (thermal management, performance counters, ...)
2491
 */
2492

    
2493
/*****************************************************************************/
2494
/* Exception vectors models                                                  */
2495
static void init_excp_4xx_real (CPUPPCState *env)
2496
{
2497
#if !defined(CONFIG_USER_ONLY)
2498
    env->excp_vectors[POWERPC_EXCP_CRITICAL] = 0x00000100;
2499
    env->excp_vectors[POWERPC_EXCP_MCHECK]   = 0x00000200;
2500
    env->excp_vectors[POWERPC_EXCP_EXTERNAL] = 0x00000500;
2501
    env->excp_vectors[POWERPC_EXCP_ALIGN]    = 0x00000600;
2502
    env->excp_vectors[POWERPC_EXCP_PROGRAM]  = 0x00000700;
2503
    env->excp_vectors[POWERPC_EXCP_SYSCALL]  = 0x00000C00;
2504
    env->excp_vectors[POWERPC_EXCP_PIT]      = 0x00001000;
2505
    env->excp_vectors[POWERPC_EXCP_FIT]      = 0x00001010;
2506
    env->excp_vectors[POWERPC_EXCP_WDT]      = 0x00001020;
2507
    env->excp_vectors[POWERPC_EXCP_DEBUG]    = 0x00002000;
2508
    env->excp_prefix = 0x00000000UL;
2509
    env->ivor_mask = 0x0000FFF0UL;
2510
    env->ivpr_mask = 0xFFFF0000UL;
2511
    /* Hardware reset vector */
2512
    env->hreset_vector = 0xFFFFFFFCUL;
2513
#endif
2514
}
2515

    
2516
static void init_excp_4xx_softmmu (CPUPPCState *env)
2517
{
2518
#if !defined(CONFIG_USER_ONLY)
2519
    env->excp_vectors[POWERPC_EXCP_CRITICAL] = 0x00000100;
2520
    env->excp_vectors[POWERPC_EXCP_MCHECK]   = 0x00000200;
2521
    env->excp_vectors[POWERPC_EXCP_DSI]      = 0x00000300;
2522
    env->excp_vectors[POWERPC_EXCP_ISI]      = 0x00000400;
2523
    env->excp_vectors[POWERPC_EXCP_EXTERNAL] = 0x00000500;
2524
    env->excp_vectors[POWERPC_EXCP_ALIGN]    = 0x00000600;
2525
    env->excp_vectors[POWERPC_EXCP_PROGRAM]  = 0x00000700;
2526
    env->excp_vectors[POWERPC_EXCP_SYSCALL]  = 0x00000C00;
2527
    env->excp_vectors[POWERPC_EXCP_PIT]      = 0x00001000;
2528
    env->excp_vectors[POWERPC_EXCP_FIT]      = 0x00001010;
2529
    env->excp_vectors[POWERPC_EXCP_WDT]      = 0x00001020;
2530
    env->excp_vectors[POWERPC_EXCP_DTLB]     = 0x00001100;
2531
    env->excp_vectors[POWERPC_EXCP_ITLB]     = 0x00001200;
2532
    env->excp_vectors[POWERPC_EXCP_DEBUG]    = 0x00002000;
2533
    env->excp_prefix = 0x00000000UL;
2534
    env->ivor_mask = 0x0000FFF0UL;
2535
    env->ivpr_mask = 0xFFFF0000UL;
2536
    /* Hardware reset vector */
2537
    env->hreset_vector = 0xFFFFFFFCUL;
2538
#endif
2539
}
2540

    
2541
static void init_excp_MPC5xx (CPUPPCState *env)
2542
{
2543
#if !defined(CONFIG_USER_ONLY)
2544
    env->excp_vectors[POWERPC_EXCP_RESET]    = 0x00000100;
2545
    env->excp_vectors[POWERPC_EXCP_MCHECK]   = 0x00000200;
2546
    env->excp_vectors[POWERPC_EXCP_EXTERNAL] = 0x00000500;
2547
    env->excp_vectors[POWERPC_EXCP_ALIGN]    = 0x00000600;
2548
    env->excp_vectors[POWERPC_EXCP_PROGRAM]  = 0x00000700;
2549
    env->excp_vectors[POWERPC_EXCP_FPU]      = 0x00000900;
2550
    env->excp_vectors[POWERPC_EXCP_DECR]     = 0x00000900;
2551
    env->excp_vectors[POWERPC_EXCP_SYSCALL]  = 0x00000C00;
2552
    env->excp_vectors[POWERPC_EXCP_TRACE]    = 0x00000D00;
2553
    env->excp_vectors[POWERPC_EXCP_FPA]      = 0x00000E00;
2554
    env->excp_vectors[POWERPC_EXCP_EMUL]     = 0x00001000;
2555
    env->excp_vectors[POWERPC_EXCP_DABR]     = 0x00001C00;
2556
    env->excp_vectors[POWERPC_EXCP_IABR]     = 0x00001C00;
2557
    env->excp_vectors[POWERPC_EXCP_MEXTBR]   = 0x00001E00;
2558
    env->excp_vectors[POWERPC_EXCP_NMEXTBR]  = 0x00001F00;
2559
    env->excp_prefix = 0x00000000UL;
2560
    env->ivor_mask = 0x0000FFF0UL;
2561
    env->ivpr_mask = 0xFFFF0000UL;
2562
    /* Hardware reset vector */
2563
    env->hreset_vector = 0xFFFFFFFCUL;
2564
#endif
2565
}
2566

    
2567
static void init_excp_MPC8xx (CPUPPCState *env)
2568
{
2569
#if !defined(CONFIG_USER_ONLY)
2570
    env->excp_vectors[POWERPC_EXCP_RESET]    = 0x00000100;
2571
    env->excp_vectors[POWERPC_EXCP_MCHECK]   = 0x00000200;
2572
    env->excp_vectors[POWERPC_EXCP_DSI]      = 0x00000300;
2573
    env->excp_vectors[POWERPC_EXCP_ISI]      = 0x00000400;
2574
    env->excp_vectors[POWERPC_EXCP_EXTERNAL] = 0x00000500;
2575
    env->excp_vectors[POWERPC_EXCP_ALIGN]    = 0x00000600;
2576
    env->excp_vectors[POWERPC_EXCP_PROGRAM]  = 0x00000700;
2577
    env->excp_vectors[POWERPC_EXCP_FPU]      = 0x00000900;
2578
    env->excp_vectors[POWERPC_EXCP_DECR]     = 0x00000900;
2579
    env->excp_vectors[POWERPC_EXCP_SYSCALL]  = 0x00000C00;
2580
    env->excp_vectors[POWERPC_EXCP_TRACE]    = 0x00000D00;
2581
    env->excp_vectors[POWERPC_EXCP_FPA]      = 0x00000E00;
2582
    env->excp_vectors[POWERPC_EXCP_EMUL]     = 0x00001000;
2583
    env->excp_vectors[POWERPC_EXCP_ITLB]     = 0x00001100;
2584
    env->excp_vectors[POWERPC_EXCP_DTLB]     = 0x00001200;
2585
    env->excp_vectors[POWERPC_EXCP_ITLBE]    = 0x00001300;
2586
    env->excp_vectors[POWERPC_EXCP_DTLBE]    = 0x00001400;
2587
    env->excp_vectors[POWERPC_EXCP_DABR]     = 0x00001C00;
2588
    env->excp_vectors[POWERPC_EXCP_IABR]     = 0x00001C00;
2589
    env->excp_vectors[POWERPC_EXCP_MEXTBR]   = 0x00001E00;
2590
    env->excp_vectors[POWERPC_EXCP_NMEXTBR]  = 0x00001F00;
2591
    env->excp_prefix = 0x00000000UL;
2592
    env->ivor_mask = 0x0000FFF0UL;
2593
    env->ivpr_mask = 0xFFFF0000UL;
2594
    /* Hardware reset vector */
2595
    env->hreset_vector = 0xFFFFFFFCUL;
2596
#endif
2597
}
2598

    
2599
static void init_excp_G2 (CPUPPCState *env)
2600
{
2601
#if !defined(CONFIG_USER_ONLY)
2602
    env->excp_vectors[POWERPC_EXCP_RESET]    = 0x00000100;
2603
    env->excp_vectors[POWERPC_EXCP_MCHECK]   = 0x00000200;
2604
    env->excp_vectors[POWERPC_EXCP_DSI]      = 0x00000300;
2605
    env->excp_vectors[POWERPC_EXCP_ISI]      = 0x00000400;
2606
    env->excp_vectors[POWERPC_EXCP_EXTERNAL] = 0x00000500;
2607
    env->excp_vectors[POWERPC_EXCP_ALIGN]    = 0x00000600;
2608
    env->excp_vectors[POWERPC_EXCP_PROGRAM]  = 0x00000700;
2609
    env->excp_vectors[POWERPC_EXCP_FPU]      = 0x00000800;
2610
    env->excp_vectors[POWERPC_EXCP_DECR]     = 0x00000900;
2611
    env->excp_vectors[POWERPC_EXCP_CRITICAL] = 0x00000A00;
2612
    env->excp_vectors[POWERPC_EXCP_SYSCALL]  = 0x00000C00;
2613
    env->excp_vectors[POWERPC_EXCP_TRACE]    = 0x00000D00;
2614
    env->excp_vectors[POWERPC_EXCP_IFTLB]    = 0x00001000;
2615
    env->excp_vectors[POWERPC_EXCP_DLTLB]    = 0x00001100;
2616
    env->excp_vectors[POWERPC_EXCP_DSTLB]    = 0x00001200;
2617
    env->excp_vectors[POWERPC_EXCP_IABR]     = 0x00001300;
2618
    env->excp_vectors[POWERPC_EXCP_SMI]      = 0x00001400;
2619
    env->excp_prefix = 0x00000000UL;
2620
    /* Hardware reset vector */
2621
    env->hreset_vector = 0xFFFFFFFCUL;
2622
#endif
2623
}
2624

    
2625
static void init_excp_e200 (CPUPPCState *env)
2626
{
2627
#if !defined(CONFIG_USER_ONLY)
2628
    env->excp_vectors[POWERPC_EXCP_RESET]    = 0x00000FFC;
2629
    env->excp_vectors[POWERPC_EXCP_CRITICAL] = 0x00000000;
2630
    env->excp_vectors[POWERPC_EXCP_MCHECK]   = 0x00000000;
2631
    env->excp_vectors[POWERPC_EXCP_DSI]      = 0x00000000;
2632
    env->excp_vectors[POWERPC_EXCP_ISI]      = 0x00000000;
2633
    env->excp_vectors[POWERPC_EXCP_EXTERNAL] = 0x00000000;
2634
    env->excp_vectors[POWERPC_EXCP_ALIGN]    = 0x00000000;
2635
    env->excp_vectors[POWERPC_EXCP_PROGRAM]  = 0x00000000;
2636
    env->excp_vectors[POWERPC_EXCP_FPU]      = 0x00000000;
2637
    env->excp_vectors[POWERPC_EXCP_SYSCALL]  = 0x00000000;
2638
    env->excp_vectors[POWERPC_EXCP_APU]      = 0x00000000;
2639
    env->excp_vectors[POWERPC_EXCP_DECR]     = 0x00000000;
2640
    env->excp_vectors[POWERPC_EXCP_FIT]      = 0x00000000;
2641
    env->excp_vectors[POWERPC_EXCP_WDT]      = 0x00000000;
2642
    env->excp_vectors[POWERPC_EXCP_DTLB]     = 0x00000000;
2643
    env->excp_vectors[POWERPC_EXCP_ITLB]     = 0x00000000;
2644
    env->excp_vectors[POWERPC_EXCP_DEBUG]    = 0x00000000;
2645
    env->excp_vectors[POWERPC_EXCP_SPEU]     = 0x00000000;
2646
    env->excp_vectors[POWERPC_EXCP_EFPDI]    = 0x00000000;
2647
    env->excp_vectors[POWERPC_EXCP_EFPRI]    = 0x00000000;
2648
    env->excp_prefix = 0x00000000UL;
2649
    env->ivor_mask = 0x0000FFF7UL;
2650
    env->ivpr_mask = 0xFFFF0000UL;
2651
    /* Hardware reset vector */
2652
    env->hreset_vector = 0xFFFFFFFCUL;
2653
#endif
2654
}
2655

    
2656
static void init_excp_BookE (CPUPPCState *env)
2657
{
2658
#if !defined(CONFIG_USER_ONLY)
2659
    env->excp_vectors[POWERPC_EXCP_CRITICAL] = 0x00000000;
2660
    env->excp_vectors[POWERPC_EXCP_MCHECK]   = 0x00000000;
2661
    env->excp_vectors[POWERPC_EXCP_DSI]      = 0x00000000;
2662
    env->excp_vectors[POWERPC_EXCP_ISI]      = 0x00000000;
2663
    env->excp_vectors[POWERPC_EXCP_EXTERNAL] = 0x00000000;
2664
    env->excp_vectors[POWERPC_EXCP_ALIGN]    = 0x00000000;
2665
    env->excp_vectors[POWERPC_EXCP_PROGRAM]  = 0x00000000;
2666
    env->excp_vectors[POWERPC_EXCP_FPU]      = 0x00000000;
2667
    env->excp_vectors[POWERPC_EXCP_SYSCALL]  = 0x00000000;
2668
    env->excp_vectors[POWERPC_EXCP_APU]      = 0x00000000;
2669
    env->excp_vectors[POWERPC_EXCP_DECR]     = 0x00000000;
2670
    env->excp_vectors[POWERPC_EXCP_FIT]      = 0x00000000;
2671
    env->excp_vectors[POWERPC_EXCP_WDT]      = 0x00000000;
2672
    env->excp_vectors[POWERPC_EXCP_DTLB]     = 0x00000000;
2673
    env->excp_vectors[POWERPC_EXCP_ITLB]     = 0x00000000;
2674
    env->excp_vectors[POWERPC_EXCP_DEBUG]    = 0x00000000;
2675
    env->excp_prefix = 0x00000000UL;
2676
    env->ivor_mask = 0x0000FFE0UL;
2677
    env->ivpr_mask = 0xFFFF0000UL;
2678
    /* Hardware reset vector */
2679
    env->hreset_vector = 0xFFFFFFFCUL;
2680
#endif
2681
}
2682

    
2683
static void init_excp_601 (CPUPPCState *env)
2684
{
2685
#if !defined(CONFIG_USER_ONLY)
2686
    env->excp_vectors[POWERPC_EXCP_RESET]    = 0x00000100;
2687
    env->excp_vectors[POWERPC_EXCP_MCHECK]   = 0x00000200;
2688
    env->excp_vectors[POWERPC_EXCP_DSI]      = 0x00000300;
2689
    env->excp_vectors[POWERPC_EXCP_ISI]      = 0x00000400;
2690
    env->excp_vectors[POWERPC_EXCP_EXTERNAL] = 0x00000500;
2691
    env->excp_vectors[POWERPC_EXCP_ALIGN]    = 0x00000600;
2692
    env->excp_vectors[POWERPC_EXCP_PROGRAM]  = 0x00000700;
2693
    env->excp_vectors[POWERPC_EXCP_FPU]      = 0x00000800;
2694
    env->excp_vectors[POWERPC_EXCP_DECR]     = 0x00000900;
2695
    env->excp_vectors[POWERPC_EXCP_IO]       = 0x00000A00;
2696
    env->excp_vectors[POWERPC_EXCP_SYSCALL]  = 0x00000C00;
2697
    env->excp_vectors[POWERPC_EXCP_RUNM]     = 0x00002000;
2698
    env->excp_prefix = 0xFFF00000UL;
2699
    /* Hardware reset vector */
2700
    env->hreset_vector = 0x00000100UL;
2701
#endif
2702
}
2703

    
2704
static void init_excp_602 (CPUPPCState *env)
2705
{
2706
#if !defined(CONFIG_USER_ONLY)
2707
    env->excp_vectors[POWERPC_EXCP_RESET]    = 0x00000100;
2708
    env->excp_vectors[POWERPC_EXCP_MCHECK]   = 0x00000200;
2709
    env->excp_vectors[POWERPC_EXCP_DSI]      = 0x00000300;
2710
    env->excp_vectors[POWERPC_EXCP_ISI]      = 0x00000400;
2711
    env->excp_vectors[POWERPC_EXCP_EXTERNAL] = 0x00000500;
2712
    env->excp_vectors[POWERPC_EXCP_ALIGN]    = 0x00000600;
2713
    env->excp_vectors[POWERPC_EXCP_PROGRAM]  = 0x00000700;
2714
    env->excp_vectors[POWERPC_EXCP_FPU]      = 0x00000800;
2715
    env->excp_vectors[POWERPC_EXCP_DECR]     = 0x00000900;
2716
    env->excp_vectors[POWERPC_EXCP_SYSCALL]  = 0x00000C00;
2717
    env->excp_vectors[POWERPC_EXCP_TRACE]    = 0x00000D00;
2718
    env->excp_vectors[POWERPC_EXCP_FPA]      = 0x00000E00;
2719
    env->excp_vectors[POWERPC_EXCP_IFTLB]    = 0x00001000;
2720
    env->excp_vectors[POWERPC_EXCP_DLTLB]    = 0x00001100;
2721
    env->excp_vectors[POWERPC_EXCP_DSTLB]    = 0x00001200;
2722
    env->excp_vectors[POWERPC_EXCP_IABR]     = 0x00001300;
2723
    env->excp_vectors[POWERPC_EXCP_SMI]      = 0x00001400;
2724
    env->excp_vectors[POWERPC_EXCP_WDT]      = 0x00001500;
2725
    env->excp_vectors[POWERPC_EXCP_EMUL]     = 0x00001600;
2726
    env->excp_prefix = 0xFFF00000UL;
2727
    /* Hardware reset vector */
2728
    env->hreset_vector = 0xFFFFFFFCUL;
2729
#endif
2730
}
2731

    
2732
static void init_excp_603 (CPUPPCState *env)
2733
{
2734
#if !defined(CONFIG_USER_ONLY)
2735
    env->excp_vectors[POWERPC_EXCP_RESET]    = 0x00000100;
2736
    env->excp_vectors[POWERPC_EXCP_MCHECK]   = 0x00000200;
2737
    env->excp_vectors[POWERPC_EXCP_DSI]      = 0x00000300;
2738
    env->excp_vectors[POWERPC_EXCP_ISI]      = 0x00000400;
2739
    env->excp_vectors[POWERPC_EXCP_EXTERNAL] = 0x00000500;
2740
    env->excp_vectors[POWERPC_EXCP_ALIGN]    = 0x00000600;
2741
    env->excp_vectors[POWERPC_EXCP_PROGRAM]  = 0x00000700;
2742
    env->excp_vectors[POWERPC_EXCP_FPU]      = 0x00000800;
2743
    env->excp_vectors[POWERPC_EXCP_DECR]     = 0x00000900;
2744
    env->excp_vectors[POWERPC_EXCP_SYSCALL]  = 0x00000C00;
2745
    env->excp_vectors[POWERPC_EXCP_TRACE]    = 0x00000D00;
2746
    env->excp_vectors[POWERPC_EXCP_IFTLB]    = 0x00001000;
2747
    env->excp_vectors[POWERPC_EXCP_DLTLB]    = 0x00001100;
2748
    env->excp_vectors[POWERPC_EXCP_DSTLB]    = 0x00001200;
2749
    env->excp_vectors[POWERPC_EXCP_IABR]     = 0x00001300;
2750
    env->excp_vectors[POWERPC_EXCP_SMI]      = 0x00001400;
2751
    env->excp_prefix = 0x00000000UL;
2752
    /* Hardware reset vector */
2753
    env->hreset_vector = 0xFFFFFFFCUL;
2754
#endif
2755
}
2756

    
2757
static void init_excp_604 (CPUPPCState *env)
2758
{
2759
#if !defined(CONFIG_USER_ONLY)
2760
    env->excp_vectors[POWERPC_EXCP_RESET]    = 0x00000100;
2761
    env->excp_vectors[POWERPC_EXCP_MCHECK]   = 0x00000200;
2762
    env->excp_vectors[POWERPC_EXCP_DSI]      = 0x00000300;
2763
    env->excp_vectors[POWERPC_EXCP_ISI]      = 0x00000400;
2764
    env->excp_vectors[POWERPC_EXCP_EXTERNAL] = 0x00000500;
2765
    env->excp_vectors[POWERPC_EXCP_ALIGN]    = 0x00000600;
2766
    env->excp_vectors[POWERPC_EXCP_PROGRAM]  = 0x00000700;
2767
    env->excp_vectors[POWERPC_EXCP_FPU]      = 0x00000800;
2768
    env->excp_vectors[POWERPC_EXCP_DECR]     = 0x00000900;
2769
    env->excp_vectors[POWERPC_EXCP_SYSCALL]  = 0x00000C00;
2770
    env->excp_vectors[POWERPC_EXCP_TRACE]    = 0x00000D00;
2771
    env->excp_vectors[POWERPC_EXCP_PERFM]    = 0x00000F00;
2772
    env->excp_vectors[POWERPC_EXCP_IABR]     = 0x00001300;
2773
    env->excp_vectors[POWERPC_EXCP_SMI]      = 0x00001400;
2774
    env->excp_prefix = 0x00000000UL;
2775
    /* Hardware reset vector */
2776
    env->hreset_vector = 0xFFFFFFFCUL;
2777
#endif
2778
}
2779

    
2780
#if defined(TARGET_PPC64)
2781
static void init_excp_620 (CPUPPCState *env)
2782
{
2783
#if !defined(CONFIG_USER_ONLY)
2784
    env->excp_vectors[POWERPC_EXCP_RESET]    = 0x00000100;
2785
    env->excp_vectors[POWERPC_EXCP_MCHECK]   = 0x00000200;
2786
    env->excp_vectors[POWERPC_EXCP_DSI]      = 0x00000300;
2787
    env->excp_vectors[POWERPC_EXCP_DSEG]     = 0x00000380;
2788
    env->excp_vectors[POWERPC_EXCP_ISI]      = 0x00000400;
2789
    env->excp_vectors[POWERPC_EXCP_ISEG]     = 0x00000480;
2790
    env->excp_vectors[POWERPC_EXCP_EXTERNAL] = 0x00000500;
2791
    env->excp_vectors[POWERPC_EXCP_ALIGN]    = 0x00000600;
2792
    env->excp_vectors[POWERPC_EXCP_PROGRAM]  = 0x00000700;
2793
    env->excp_vectors[POWERPC_EXCP_FPU]      = 0x00000800;
2794
    env->excp_vectors[POWERPC_EXCP_DECR]     = 0x00000900;
2795
    env->excp_vectors[POWERPC_EXCP_SYSCALL]  = 0x00000C00;
2796
    env->excp_vectors[POWERPC_EXCP_TRACE]    = 0x00000D00;
2797
    env->excp_vectors[POWERPC_EXCP_FPA]      = 0x00000E00;
2798
    env->excp_vectors[POWERPC_EXCP_PERFM]    = 0x00000F00;
2799
    env->excp_vectors[POWERPC_EXCP_IABR]     = 0x00001300;
2800
    env->excp_vectors[POWERPC_EXCP_SMI]      = 0x00001400;
2801
    env->excp_prefix = 0xFFF00000UL;
2802
    /* Hardware reset vector */
2803
    env->hreset_vector = 0x0000000000000100ULL;
2804
#endif
2805
}
2806
#endif /* defined(TARGET_PPC64) */
2807

    
2808
static void init_excp_7x0 (CPUPPCState *env)
2809
{
2810
#if !defined(CONFIG_USER_ONLY)
2811
    env->excp_vectors[POWERPC_EXCP_RESET]    = 0x00000100;
2812
    env->excp_vectors[POWERPC_EXCP_MCHECK]   = 0x00000200;
2813
    env->excp_vectors[POWERPC_EXCP_DSI]      = 0x00000300;
2814
    env->excp_vectors[POWERPC_EXCP_ISI]      = 0x00000400;
2815
    env->excp_vectors[POWERPC_EXCP_EXTERNAL] = 0x00000500;
2816
    env->excp_vectors[POWERPC_EXCP_ALIGN]    = 0x00000600;
2817
    env->excp_vectors[POWERPC_EXCP_PROGRAM]  = 0x00000700;
2818
    env->excp_vectors[POWERPC_EXCP_FPU]      = 0x00000800;
2819
    env->excp_vectors[POWERPC_EXCP_DECR]     = 0x00000900;
2820
    env->excp_vectors[POWERPC_EXCP_SYSCALL]  = 0x00000C00;
2821
    env->excp_vectors[POWERPC_EXCP_TRACE]    = 0x00000D00;
2822
    env->excp_vectors[POWERPC_EXCP_PERFM]    = 0x00000F00;
2823
    env->excp_vectors[POWERPC_EXCP_IABR]     = 0x00001300;
2824
    env->excp_vectors[POWERPC_EXCP_THERM]    = 0x00001700;
2825
    env->excp_prefix = 0x00000000UL;
2826
    /* Hardware reset vector */
2827
    env->hreset_vector = 0xFFFFFFFCUL;
2828
#endif
2829
}
2830

    
2831
static void init_excp_750FX (CPUPPCState *env)
2832
{
2833
#if !defined(CONFIG_USER_ONLY)
2834
    env->excp_vectors[POWERPC_EXCP_RESET]    = 0x00000100;
2835
    env->excp_vectors[POWERPC_EXCP_MCHECK]   = 0x00000200;
2836
    env->excp_vectors[POWERPC_EXCP_DSI]      = 0x00000300;
2837
    env->excp_vectors[POWERPC_EXCP_ISI]      = 0x00000400;
2838
    env->excp_vectors[POWERPC_EXCP_EXTERNAL] = 0x00000500;
2839
    env->excp_vectors[POWERPC_EXCP_ALIGN]    = 0x00000600;
2840
    env->excp_vectors[POWERPC_EXCP_PROGRAM]  = 0x00000700;
2841
    env->excp_vectors[POWERPC_EXCP_FPU]      = 0x00000800;
2842
    env->excp_vectors[POWERPC_EXCP_DECR]     = 0x00000900;
2843
    env->excp_vectors[POWERPC_EXCP_SYSCALL]  = 0x00000C00;
2844
    env->excp_vectors[POWERPC_EXCP_TRACE]    = 0x00000D00;
2845
    env->excp_vectors[POWERPC_EXCP_PERFM]    = 0x00000F00;
2846
    env->excp_vectors[POWERPC_EXCP_IABR]     = 0x00001300;
2847
    env->excp_vectors[POWERPC_EXCP_SMI]      = 0x00001400;
2848
    env->excp_vectors[POWERPC_EXCP_THERM]    = 0x00001700;
2849
    env->excp_prefix = 0x00000000UL;
2850
    /* Hardware reset vector */
2851
    env->hreset_vector = 0xFFFFFFFCUL;
2852
#endif
2853
}
2854

    
2855
/* XXX: Check if this is correct */
2856
static void init_excp_7x5 (CPUPPCState *env)
2857
{
2858
#if !defined(CONFIG_USER_ONLY)
2859
    env->excp_vectors[POWERPC_EXCP_RESET]    = 0x00000100;
2860
    env->excp_vectors[POWERPC_EXCP_MCHECK]   = 0x00000200;
2861
    env->excp_vectors[POWERPC_EXCP_DSI]      = 0x00000300;
2862
    env->excp_vectors[POWERPC_EXCP_ISI]      = 0x00000400;
2863
    env->excp_vectors[POWERPC_EXCP_EXTERNAL] = 0x00000500;
2864
    env->excp_vectors[POWERPC_EXCP_ALIGN]    = 0x00000600;
2865
    env->excp_vectors[POWERPC_EXCP_PROGRAM]  = 0x00000700;
2866
    env->excp_vectors[POWERPC_EXCP_FPU]      = 0x00000800;
2867
    env->excp_vectors[POWERPC_EXCP_DECR]     = 0x00000900;
2868
    env->excp_vectors[POWERPC_EXCP_SYSCALL]  = 0x00000C00;
2869
    env->excp_vectors[POWERPC_EXCP_TRACE]    = 0x00000D00;
2870
    env->excp_vectors[POWERPC_EXCP_IFTLB]    = 0x00001000;
2871
    env->excp_vectors[POWERPC_EXCP_DLTLB]    = 0x00001100;
2872
    env->excp_vectors[POWERPC_EXCP_DSTLB]    = 0x00001200;
2873
    env->excp_vectors[POWERPC_EXCP_PERFM]    = 0x00000F00;
2874
    env->excp_vectors[POWERPC_EXCP_IABR]     = 0x00001300;
2875
    env->excp_vectors[POWERPC_EXCP_SMI]      = 0x00001400;
2876
    env->excp_prefix = 0x00000000UL;
2877
    /* Hardware reset vector */
2878
    env->hreset_vector = 0xFFFFFFFCUL;
2879
#endif
2880
}
2881

    
2882
static void init_excp_7400 (CPUPPCState *env)
2883
{
2884
#if !defined(CONFIG_USER_ONLY)
2885
    env->excp_vectors[POWERPC_EXCP_RESET]    = 0x00000100;
2886
    env->excp_vectors[POWERPC_EXCP_MCHECK]   = 0x00000200;
2887
    env->excp_vectors[POWERPC_EXCP_DSI]      = 0x00000300;
2888
    env->excp_vectors[POWERPC_EXCP_ISI]      = 0x00000400;
2889
    env->excp_vectors[POWERPC_EXCP_EXTERNAL] = 0x00000500;
2890
    env->excp_vectors[POWERPC_EXCP_ALIGN]    = 0x00000600;
2891
    env->excp_vectors[POWERPC_EXCP_PROGRAM]  = 0x00000700;
2892
    env->excp_vectors[POWERPC_EXCP_FPU]      = 0x00000800;
2893
    env->excp_vectors[POWERPC_EXCP_DECR]     = 0x00000900;
2894
    env->excp_vectors[POWERPC_EXCP_SYSCALL]  = 0x00000C00;
2895
    env->excp_vectors[POWERPC_EXCP_TRACE]    = 0x00000D00;
2896
    env->excp_vectors[POWERPC_EXCP_PERFM]    = 0x00000F00;
2897
    env->excp_vectors[POWERPC_EXCP_VPU]      = 0x00000F20;
2898
    env->excp_vectors[POWERPC_EXCP_IABR]     = 0x00001300;
2899
    env->excp_vectors[POWERPC_EXCP_SMI]      = 0x00001400;
2900
    env->excp_vectors[POWERPC_EXCP_VPUA]     = 0x00001600;
2901
    env->excp_vectors[POWERPC_EXCP_THERM]    = 0x00001700;
2902
    env->excp_prefix = 0x00000000UL;
2903
    /* Hardware reset vector */
2904
    env->hreset_vector = 0xFFFFFFFCUL;
2905
#endif
2906
}
2907

    
2908
static void init_excp_7450 (CPUPPCState *env)
2909
{
2910
#if !defined(CONFIG_USER_ONLY)
2911
    env->excp_vectors[POWERPC_EXCP_RESET]    = 0x00000100;
2912
    env->excp_vectors[POWERPC_EXCP_MCHECK]   = 0x00000200;
2913
    env->excp_vectors[POWERPC_EXCP_DSI]      = 0x00000300;
2914
    env->excp_vectors[POWERPC_EXCP_ISI]      = 0x00000400;
2915
    env->excp_vectors[POWERPC_EXCP_EXTERNAL] = 0x00000500;
2916
    env->excp_vectors[POWERPC_EXCP_ALIGN]    = 0x00000600;
2917
    env->excp_vectors[POWERPC_EXCP_PROGRAM]  = 0x00000700;
2918
    env->excp_vectors[POWERPC_EXCP_FPU]      = 0x00000800;
2919
    env->excp_vectors[POWERPC_EXCP_DECR]     = 0x00000900;
2920
    env->excp_vectors[POWERPC_EXCP_SYSCALL]  = 0x00000C00;
2921
    env->excp_vectors[POWERPC_EXCP_TRACE]    = 0x00000D00;
2922
    env->excp_vectors[POWERPC_EXCP_PERFM]    = 0x00000F00;
2923
    env->excp_vectors[POWERPC_EXCP_VPU]      = 0x00000F20;
2924
    env->excp_vectors[POWERPC_EXCP_IFTLB]    = 0x00001000;
2925
    env->excp_vectors[POWERPC_EXCP_DLTLB]    = 0x00001100;
2926
    env->excp_vectors[POWERPC_EXCP_DSTLB]    = 0x00001200;
2927
    env->excp_vectors[POWERPC_EXCP_IABR]     = 0x00001300;
2928
    env->excp_vectors[POWERPC_EXCP_SMI]      = 0x00001400;
2929
    env->excp_vectors[POWERPC_EXCP_VPUA]     = 0x00001600;
2930
    env->excp_prefix = 0x00000000UL;
2931
    /* Hardware reset vector */
2932
    env->hreset_vector = 0xFFFFFFFCUL;
2933
#endif
2934
}
2935

    
2936
#if defined (TARGET_PPC64)
2937
static void init_excp_970 (CPUPPCState *env)
2938
{
2939
#if !defined(CONFIG_USER_ONLY)
2940
    env->excp_vectors[POWERPC_EXCP_RESET]    = 0x00000100;
2941
    env->excp_vectors[POWERPC_EXCP_MCHECK]   = 0x00000200;
2942
    env->excp_vectors[POWERPC_EXCP_DSI]      = 0x00000300;
2943
    env->excp_vectors[POWERPC_EXCP_DSEG]     = 0x00000380;
2944
    env->excp_vectors[POWERPC_EXCP_ISI]      = 0x00000400;
2945
    env->excp_vectors[POWERPC_EXCP_ISEG]     = 0x00000480;
2946
    env->excp_vectors[POWERPC_EXCP_EXTERNAL] = 0x00000500;
2947
    env->excp_vectors[POWERPC_EXCP_ALIGN]    = 0x00000600;
2948
    env->excp_vectors[POWERPC_EXCP_PROGRAM]  = 0x00000700;
2949
    env->excp_vectors[POWERPC_EXCP_FPU]      = 0x00000800;
2950
    env->excp_vectors[POWERPC_EXCP_DECR]     = 0x00000900;
2951
    env->excp_vectors[POWERPC_EXCP_HDECR]    = 0x00000980;
2952
    env->excp_vectors[POWERPC_EXCP_SYSCALL]  = 0x00000C00;
2953
    env->excp_vectors[POWERPC_EXCP_TRACE]    = 0x00000D00;
2954
    env->excp_vectors[POWERPC_EXCP_PERFM]    = 0x00000F00;
2955
    env->excp_vectors[POWERPC_EXCP_VPU]      = 0x00000F20;
2956
    env->excp_vectors[POWERPC_EXCP_IABR]     = 0x00001300;
2957
    env->excp_vectors[POWERPC_EXCP_MAINT]    = 0x00001600;
2958
    env->excp_vectors[POWERPC_EXCP_VPUA]     = 0x00001700;
2959
    env->excp_vectors[POWERPC_EXCP_THERM]    = 0x00001800;
2960
    env->excp_prefix   = 0x00000000FFF00000ULL;
2961
    /* Hardware reset vector */
2962
    env->hreset_vector = 0x0000000000000100ULL;
2963
#endif
2964
}
2965
#endif
2966

    
2967
/*****************************************************************************/
2968
/* Power management enable checks                                            */
2969
static int check_pow_none (CPUPPCState *env)
2970
{
2971
    return 0;
2972
}
2973

    
2974
static int check_pow_nocheck (CPUPPCState *env)
2975
{
2976
    return 1;
2977
}
2978

    
2979
static int check_pow_hid0 (CPUPPCState *env)
2980
{
2981
    if (env->spr[SPR_HID0] & 0x00E00000)
2982
        return 1;
2983

    
2984
    return 0;
2985
}
2986

    
2987
/*****************************************************************************/
2988
/* PowerPC implementations definitions                                       */
2989

    
2990
/* PowerPC 40x instruction set                                               */
2991
#define POWERPC_INSNS_EMB    (PPC_INSNS_BASE | PPC_WRTEE |                    \
2992
                              PPC_CACHE | PPC_CACHE_ICBI | PPC_CACHE_DCBZ)
2993

    
2994
/* PowerPC 401                                                               */
2995
#define POWERPC_INSNS_401    (POWERPC_INSNS_EMB | PPC_STRING | PPC_DCR |      \
2996
                              PPC_MEM_SYNC | PPC_MEM_EIEIO |                  \
2997
                              PPC_4xx_COMMON | PPC_40x_EXCP | PPC_40x_ICBT)
2998
#define POWERPC_MSRM_401     (0x00000000000FD201ULL)
2999
#define POWERPC_MMU_401      (POWERPC_MMU_REAL)
3000
#define POWERPC_EXCP_401     (POWERPC_EXCP_40x)
3001
#define POWERPC_INPUT_401    (PPC_FLAGS_INPUT_401)
3002
#define POWERPC_BFDM_401     (bfd_mach_ppc_403)
3003
#define POWERPC_FLAG_401     (POWERPC_FLAG_CE | POWERPC_FLAG_DE |             \
3004
                              POWERPC_FLAG_BUS_CLK)
3005
#define check_pow_401        check_pow_nocheck
3006

    
3007
static void init_proc_401 (CPUPPCState *env)
3008
{
3009
    gen_spr_40x(env);
3010
    gen_spr_401_403(env);
3011
    gen_spr_401(env);
3012
    init_excp_4xx_real(env);
3013
    env->dcache_line_size = 32;
3014
    env->icache_line_size = 32;
3015
    /* Allocate hardware IRQ controller */
3016
    ppc40x_irq_init(env);
3017
}
3018

    
3019
/* PowerPC 401x2                                                             */
3020
#define POWERPC_INSNS_401x2  (POWERPC_INSNS_EMB | PPC_STRING | PPC_DCR |      \
3021
                              PPC_MEM_SYNC | PPC_MEM_EIEIO |                  \
3022
                              PPC_40x_TLB | PPC_MEM_TLBIA | PPC_MEM_TLBSYNC | \
3023
                              PPC_CACHE_DCBA | PPC_MFTB |                     \
3024
                              PPC_4xx_COMMON | PPC_40x_EXCP | PPC_40x_ICBT)
3025
#define POWERPC_MSRM_401x2   (0x00000000001FD231ULL)
3026
#define POWERPC_MMU_401x2    (POWERPC_MMU_SOFT_4xx_Z)
3027
#define POWERPC_EXCP_401x2   (POWERPC_EXCP_40x)
3028
#define POWERPC_INPUT_401x2  (PPC_FLAGS_INPUT_401)
3029
#define POWERPC_BFDM_401x2   (bfd_mach_ppc_403)
3030
#define POWERPC_FLAG_401x2   (POWERPC_FLAG_CE | POWERPC_FLAG_DE |             \
3031
                              POWERPC_FLAG_BUS_CLK)
3032
#define check_pow_401x2      check_pow_nocheck
3033

    
3034
static void init_proc_401x2 (CPUPPCState *env)
3035
{
3036
    gen_spr_40x(env);
3037
    gen_spr_401_403(env);
3038
    gen_spr_401x2(env);
3039
    gen_spr_compress(env);
3040
    /* Memory management */
3041
#if !defined(CONFIG_USER_ONLY)
3042
    env->nb_tlb = 64;
3043
    env->nb_ways = 1;
3044
    env->id_tlbs = 0;
3045
#endif
3046
    init_excp_4xx_softmmu(env);
3047
    env->dcache_line_size = 32;
3048
    env->icache_line_size = 32;
3049
    /* Allocate hardware IRQ controller */
3050
    ppc40x_irq_init(env);
3051
}
3052

    
3053
/* PowerPC 401x3                                                             */
3054
#define POWERPC_INSNS_401x3  (POWERPC_INSNS_EMB | PPC_STRING | PPC_DCR |      \
3055
                              PPC_MEM_SYNC | PPC_MEM_EIEIO |                  \
3056
                              PPC_40x_TLB | PPC_MEM_TLBIA | PPC_MEM_TLBSYNC | \
3057
                              PPC_CACHE_DCBA | PPC_MFTB |                     \
3058
                              PPC_4xx_COMMON | PPC_40x_EXCP | PPC_40x_ICBT)
3059
#define POWERPC_MSRM_401x3   (0x00000000001FD631ULL)
3060
#define POWERPC_MMU_401x3    (POWERPC_MMU_SOFT_4xx_Z)
3061
#define POWERPC_EXCP_401x3   (POWERPC_EXCP_40x)
3062
#define POWERPC_INPUT_401x3  (PPC_FLAGS_INPUT_401)
3063
#define POWERPC_BFDM_401x3   (bfd_mach_ppc_403)
3064
#define POWERPC_FLAG_401x3   (POWERPC_FLAG_CE | POWERPC_FLAG_DE |             \
3065
                              POWERPC_FLAG_BUS_CLK)
3066
#define check_pow_401x3      check_pow_nocheck
3067

    
3068
__attribute__ (( unused ))
3069
static void init_proc_401x3 (CPUPPCState *env)
3070
{
3071
    gen_spr_40x(env);
3072
    gen_spr_401_403(env);
3073
    gen_spr_401(env);
3074
    gen_spr_401x2(env);
3075
    gen_spr_compress(env);
3076
    init_excp_4xx_softmmu(env);
3077
    env->dcache_line_size = 32;
3078
    env->icache_line_size = 32;
3079
    /* Allocate hardware IRQ controller */
3080
    ppc40x_irq_init(env);
3081
}
3082

    
3083
/* IOP480                                                                    */
3084
#define POWERPC_INSNS_IOP480 (POWERPC_INSNS_EMB | PPC_STRING | PPC_DCR |      \
3085
                              PPC_MEM_SYNC | PPC_MEM_EIEIO |                  \
3086
                              PPC_40x_TLB | PPC_MEM_TLBIA | PPC_MEM_TLBSYNC | \
3087
                              PPC_CACHE_DCBA |                                \
3088
                              PPC_4xx_COMMON | PPC_40x_EXCP |  PPC_40x_ICBT)
3089
#define POWERPC_MSRM_IOP480  (0x00000000001FD231ULL)
3090
#define POWERPC_MMU_IOP480   (POWERPC_MMU_SOFT_4xx_Z)
3091
#define POWERPC_EXCP_IOP480  (POWERPC_EXCP_40x)
3092
#define POWERPC_INPUT_IOP480 (PPC_FLAGS_INPUT_401)
3093
#define POWERPC_BFDM_IOP480  (bfd_mach_ppc_403)
3094
#define POWERPC_FLAG_IOP480  (POWERPC_FLAG_CE | POWERPC_FLAG_DE |             \
3095
                              POWERPC_FLAG_BUS_CLK)
3096
#define check_pow_IOP480     check_pow_nocheck
3097

    
3098
static void init_proc_IOP480 (CPUPPCState *env)
3099
{
3100
    gen_spr_40x(env);
3101
    gen_spr_401_403(env);
3102
    gen_spr_401x2(env);
3103
    gen_spr_compress(env);
3104
    /* Memory management */
3105
#if !defined(CONFIG_USER_ONLY)
3106
    env->nb_tlb = 64;
3107
    env->nb_ways = 1;
3108
    env->id_tlbs = 0;
3109
#endif
3110
    init_excp_4xx_softmmu(env);
3111
    env->dcache_line_size = 32;
3112
    env->icache_line_size = 32;
3113
    /* Allocate hardware IRQ controller */
3114
    ppc40x_irq_init(env);
3115
}
3116

    
3117
/* PowerPC 403                                                               */
3118
#define POWERPC_INSNS_403    (POWERPC_INSNS_EMB | PPC_STRING | PPC_DCR |      \
3119
                              PPC_MEM_SYNC | PPC_MEM_EIEIO |                  \
3120
                              PPC_4xx_COMMON | PPC_40x_EXCP | PPC_40x_ICBT)
3121
#define POWERPC_MSRM_403     (0x000000000007D00DULL)
3122
#define POWERPC_MMU_403      (POWERPC_MMU_REAL)
3123
#define POWERPC_EXCP_403     (POWERPC_EXCP_40x)
3124
#define POWERPC_INPUT_403    (PPC_FLAGS_INPUT_401)
3125
#define POWERPC_BFDM_403     (bfd_mach_ppc_403)
3126
#define POWERPC_FLAG_403     (POWERPC_FLAG_CE | POWERPC_FLAG_PX |             \
3127
                              POWERPC_FLAG_BUS_CLK)
3128
#define check_pow_403        check_pow_nocheck
3129

    
3130
static void init_proc_403 (CPUPPCState *env)
3131
{
3132
    gen_spr_40x(env);
3133
    gen_spr_401_403(env);
3134
    gen_spr_403(env);
3135
    gen_spr_403_real(env);
3136
    init_excp_4xx_real(env);
3137
    env->dcache_line_size = 32;
3138
    env->icache_line_size = 32;
3139
    /* Allocate hardware IRQ controller */
3140
    ppc40x_irq_init(env);
3141
#if !defined(CONFIG_USER_ONLY)
3142
    /* Hardware reset vector */
3143
    env->hreset_vector = 0xFFFFFFFCUL;
3144
#endif
3145
}
3146

    
3147
/* PowerPC 403 GCX                                                           */
3148
#define POWERPC_INSNS_403GCX (POWERPC_INSNS_EMB | PPC_STRING | PPC_DCR |      \
3149
                              PPC_MEM_SYNC | PPC_MEM_EIEIO |                  \
3150
                              PPC_40x_TLB | PPC_MEM_TLBIA | PPC_MEM_TLBSYNC | \
3151
                              PPC_4xx_COMMON | PPC_40x_EXCP | PPC_40x_ICBT)
3152
#define POWERPC_MSRM_403GCX  (0x000000000007D00DULL)
3153
#define POWERPC_MMU_403GCX   (POWERPC_MMU_SOFT_4xx_Z)
3154
#define POWERPC_EXCP_403GCX  (POWERPC_EXCP_40x)
3155
#define POWERPC_INPUT_403GCX (PPC_FLAGS_INPUT_401)
3156
#define POWERPC_BFDM_403GCX  (bfd_mach_ppc_403)
3157
#define POWERPC_FLAG_403GCX  (POWERPC_FLAG_CE | POWERPC_FLAG_PX |             \
3158
                              POWERPC_FLAG_BUS_CLK)
3159
#define check_pow_403GCX     check_pow_nocheck
3160

    
3161
static void init_proc_403GCX (CPUPPCState *env)
3162
{
3163
    gen_spr_40x(env);
3164
    gen_spr_401_403(env);
3165
    gen_spr_403(env);
3166
    gen_spr_403_real(env);
3167
    gen_spr_403_mmu(env);
3168
    /* Bus access control */
3169
    /* not emulated, as Qemu never does speculative access */
3170
    spr_register(env, SPR_40x_SGR, "SGR",
3171
                 SPR_NOACCESS, SPR_NOACCESS,
3172
                 &spr_read_generic, &spr_write_generic,
3173
                 0xFFFFFFFF);
3174
    /* not emulated, as Qemu do not emulate caches */
3175
    spr_register(env, SPR_40x_DCWR, "DCWR",
3176
                 SPR_NOACCESS, SPR_NOACCESS,
3177
                 &spr_read_generic, &spr_write_generic,
3178
                 0x00000000);
3179
    /* Memory management */
3180
#if !defined(CONFIG_USER_ONLY)
3181
    env->nb_tlb = 64;
3182
    env->nb_ways = 1;
3183
    env->id_tlbs = 0;
3184
#endif
3185
    init_excp_4xx_softmmu(env);
3186
    env->dcache_line_size = 32;
3187
    env->icache_line_size = 32;
3188
    /* Allocate hardware IRQ controller */
3189
    ppc40x_irq_init(env);
3190
}
3191

    
3192
/* PowerPC 405                                                               */
3193
#define POWERPC_INSNS_405    (POWERPC_INSNS_EMB | PPC_STRING | PPC_DCR |      \
3194
                              PPC_MFTB |                                      \
3195
                              PPC_MEM_SYNC | PPC_MEM_EIEIO | PPC_CACHE_DCBA | \
3196
                              PPC_40x_TLB | PPC_MEM_TLBIA | PPC_MEM_TLBSYNC | \
3197
                              PPC_4xx_COMMON | PPC_40x_EXCP | PPC_40x_ICBT |  \
3198
                              PPC_405_MAC)
3199
#define POWERPC_MSRM_405     (0x000000000006E630ULL)
3200
#define POWERPC_MMU_405      (POWERPC_MMU_SOFT_4xx)
3201
#define POWERPC_EXCP_405     (POWERPC_EXCP_40x)
3202
#define POWERPC_INPUT_405    (PPC_FLAGS_INPUT_405)
3203
#define POWERPC_BFDM_405     (bfd_mach_ppc_403)
3204
#define POWERPC_FLAG_405     (POWERPC_FLAG_CE | POWERPC_FLAG_DWE |            \
3205
                              POWERPC_FLAG_DE | POWERPC_FLAG_BUS_CLK)
3206
#define check_pow_405        check_pow_nocheck
3207

    
3208
static void init_proc_405 (CPUPPCState *env)
3209
{
3210
    /* Time base */
3211
    gen_tbl(env);
3212
    gen_spr_40x(env);
3213
    gen_spr_405(env);
3214
    /* Bus access control */
3215
    /* not emulated, as Qemu never does speculative access */
3216
    spr_register(env, SPR_40x_SGR, "SGR",
3217
                 SPR_NOACCESS, SPR_NOACCESS,
3218
                 &spr_read_generic, &spr_write_generic,
3219
                 0xFFFFFFFF);
3220
    /* not emulated, as Qemu do not emulate caches */
3221
    spr_register(env, SPR_40x_DCWR, "DCWR",
3222
                 SPR_NOACCESS, SPR_NOACCESS,
3223
                 &spr_read_generic, &spr_write_generic,
3224
                 0x00000000);
3225
    /* Memory management */
3226
#if !defined(CONFIG_USER_ONLY)
3227
    env->nb_tlb = 64;
3228
    env->nb_ways = 1;
3229
    env->id_tlbs = 0;
3230
#endif
3231
    init_excp_4xx_softmmu(env);
3232
    env->dcache_line_size = 32;
3233
    env->icache_line_size = 32;
3234
    /* Allocate hardware IRQ controller */
3235
    ppc40x_irq_init(env);
3236
}
3237

    
3238
/* PowerPC 440 EP                                                            */
3239
#define POWERPC_INSNS_440EP  (POWERPC_INSNS_EMB | PPC_STRING | PPC_DCR |      \
3240
                              PPC_CACHE_DCBA | PPC_MEM_TLBSYNC |              \
3241
                              PPC_BOOKE | PPC_4xx_COMMON | PPC_405_MAC |      \
3242
                              PPC_440_SPEC | PPC_RFMCI)
3243
#define POWERPC_MSRM_440EP   (0x000000000006D630ULL)
3244
#define POWERPC_MMU_440EP    (POWERPC_MMU_BOOKE)
3245
#define POWERPC_EXCP_440EP   (POWERPC_EXCP_BOOKE)
3246
#define POWERPC_INPUT_440EP  (PPC_FLAGS_INPUT_BookE)
3247
#define POWERPC_BFDM_440EP   (bfd_mach_ppc_403)
3248
#define POWERPC_FLAG_440EP   (POWERPC_FLAG_CE | POWERPC_FLAG_DWE |            \
3249
                              POWERPC_FLAG_DE | POWERPC_FLAG_BUS_CLK)
3250
#define check_pow_440EP      check_pow_nocheck
3251

    
3252
__attribute__ (( unused ))
3253
static void init_proc_440EP (CPUPPCState *env)
3254
{
3255
    /* Time base */
3256
    gen_tbl(env);
3257
    gen_spr_BookE(env, 0x000000000000FFFFULL);
3258
    gen_spr_440(env);
3259
    gen_spr_usprgh(env);
3260
    /* Processor identification */
3261
    spr_register(env, SPR_BOOKE_PIR, "PIR",
3262
                 SPR_NOACCESS, SPR_NOACCESS,
3263
                 &spr_read_generic, &spr_write_pir,
3264
                 0x00000000);
3265
    /* XXX : not implemented */
3266
    spr_register(env, SPR_BOOKE_IAC3, "IAC3",
3267
                 SPR_NOACCESS, SPR_NOACCESS,
3268
                 &spr_read_generic, &spr_write_generic,
3269
                 0x00000000);
3270
    /* XXX : not implemented */
3271
    spr_register(env, SPR_BOOKE_IAC4, "IAC4",
3272
                 SPR_NOACCESS, SPR_NOACCESS,
3273
                 &spr_read_generic, &spr_write_generic,
3274
                 0x00000000);
3275
    /* XXX : not implemented */
3276
    spr_register(env, SPR_BOOKE_DVC1, "DVC1",
3277
                 SPR_NOACCESS, SPR_NOACCESS,
3278
                 &spr_read_generic, &spr_write_generic,
3279
                 0x00000000);
3280
    /* XXX : not implemented */
3281
    spr_register(env, SPR_BOOKE_DVC2, "DVC2",
3282
                 SPR_NOACCESS, SPR_NOACCESS,
3283
                 &spr_read_generic, &spr_write_generic,
3284
                 0x00000000);
3285
    /* XXX : not implemented */
3286
    spr_register(env, SPR_BOOKE_MCSR, "MCSR",
3287
                 SPR_NOACCESS, SPR_NOACCESS,
3288
                 &spr_read_generic, &spr_write_generic,
3289
                 0x00000000);
3290
    spr_register(env, SPR_BOOKE_MCSRR0, "MCSRR0",
3291
                 SPR_NOACCESS, SPR_NOACCESS,
3292
                 &spr_read_generic, &spr_write_generic,
3293
                 0x00000000);
3294
    spr_register(env, SPR_BOOKE_MCSRR1, "MCSRR1",
3295
                 SPR_NOACCESS, SPR_NOACCESS,
3296
                 &spr_read_generic, &spr_write_generic,
3297
                 0x00000000);
3298
    /* XXX : not implemented */
3299
    spr_register(env, SPR_440_CCR1, "CCR1",
3300
                 SPR_NOACCESS, SPR_NOACCESS,
3301
                 &spr_read_generic, &spr_write_generic,
3302
                 0x00000000);
3303
    /* Memory management */
3304
#if !defined(CONFIG_USER_ONLY)
3305
    env->nb_tlb = 64;
3306
    env->nb_ways = 1;
3307
    env->id_tlbs = 0;
3308
#endif
3309
    init_excp_BookE(env);
3310
    env->dcache_line_size = 32;
3311
    env->icache_line_size = 32;
3312
    /* XXX: TODO: allocate internal IRQ controller */
3313
}
3314

    
3315
/* PowerPC 440 GP                                                            */
3316
#define POWERPC_INSNS_440GP  (POWERPC_INSNS_EMB | PPC_STRING |                \
3317
                              PPC_DCR | PPC_DCRX |                            \
3318
                              PPC_CACHE_DCBA | PPC_MEM_TLBSYNC |              \
3319
                              PPC_BOOKE | PPC_MFAPIDI | PPC_TLBIVA |          \
3320
                              PPC_4xx_COMMON | PPC_405_MAC | PPC_440_SPEC)
3321
#define POWERPC_MSRM_440GP   (0x000000000006FF30ULL)
3322
#define POWERPC_MMU_440GP    (POWERPC_MMU_BOOKE)
3323
#define POWERPC_EXCP_440GP   (POWERPC_EXCP_BOOKE)
3324
#define POWERPC_INPUT_440GP  (PPC_FLAGS_INPUT_BookE)
3325
#define POWERPC_BFDM_440GP   (bfd_mach_ppc_403)
3326
#define POWERPC_FLAG_440GP   (POWERPC_FLAG_CE | POWERPC_FLAG_DWE |            \
3327
                              POWERPC_FLAG_DE | POWERPC_FLAG_BUS_CLK)
3328
#define check_pow_440GP      check_pow_nocheck
3329

    
3330
__attribute__ (( unused ))
3331
static void init_proc_440GP (CPUPPCState *env)
3332
{
3333
    /* Time base */
3334
    gen_tbl(env);
3335
    gen_spr_BookE(env, 0x000000000000FFFFULL);
3336
    gen_spr_440(env);
3337
    gen_spr_usprgh(env);
3338
    /* Processor identification */
3339
    spr_register(env, SPR_BOOKE_PIR, "PIR",
3340
                 SPR_NOACCESS, SPR_NOACCESS,
3341
                 &spr_read_generic, &spr_write_pir,
3342
                 0x00000000);
3343
    /* XXX : not implemented */
3344
    spr_register(env, SPR_BOOKE_IAC3, "IAC3",
3345
                 SPR_NOACCESS, SPR_NOACCESS,
3346
                 &spr_read_generic, &spr_write_generic,
3347
                 0x00000000);
3348
    /* XXX : not implemented */
3349
    spr_register(env, SPR_BOOKE_IAC4, "IAC4",
3350
                 SPR_NOACCESS, SPR_NOACCESS,
3351
                 &spr_read_generic, &spr_write_generic,
3352
                 0x00000000);
3353
    /* XXX : not implemented */
3354
    spr_register(env, SPR_BOOKE_DVC1, "DVC1",
3355
                 SPR_NOACCESS, SPR_NOACCESS,
3356
                 &spr_read_generic, &spr_write_generic,
3357
                 0x00000000);
3358
    /* XXX : not implemented */
3359
    spr_register(env, SPR_BOOKE_DVC2, "DVC2",
3360
                 SPR_NOACCESS, SPR_NOACCESS,
3361
                 &spr_read_generic, &spr_write_generic,
3362
                 0x00000000);
3363
    /* Memory management */
3364
#if !defined(CONFIG_USER_ONLY)
3365
    env->nb_tlb = 64;
3366
    env->nb_ways = 1;
3367
    env->id_tlbs = 0;
3368
#endif
3369
    init_excp_BookE(env);
3370
    env->dcache_line_size = 32;
3371
    env->icache_line_size = 32;
3372
    /* XXX: TODO: allocate internal IRQ controller */
3373
}
3374

    
3375
/* PowerPC 440x4                                                             */
3376
#define POWERPC_INSNS_440x4  (POWERPC_INSNS_EMB | PPC_STRING | PPC_DCR |      \
3377
                              PPC_CACHE_DCBA | PPC_MEM_TLBSYNC |              \
3378
                              PPC_BOOKE | PPC_4xx_COMMON | PPC_405_MAC |      \
3379
                              PPC_440_SPEC)
3380
#define POWERPC_MSRM_440x4   (0x000000000006FF30ULL)
3381
#define POWERPC_MMU_440x4    (POWERPC_MMU_BOOKE)
3382
#define POWERPC_EXCP_440x4   (POWERPC_EXCP_BOOKE)
3383
#define POWERPC_INPUT_440x4  (PPC_FLAGS_INPUT_BookE)
3384
#define POWERPC_BFDM_440x4   (bfd_mach_ppc_403)
3385
#define POWERPC_FLAG_440x4   (POWERPC_FLAG_CE | POWERPC_FLAG_DWE |            \
3386
                              POWERPC_FLAG_DE | POWERPC_FLAG_BUS_CLK)
3387
#define check_pow_440x4      check_pow_nocheck
3388

    
3389
__attribute__ (( unused ))
3390
static void init_proc_440x4 (CPUPPCState *env)
3391
{
3392
    /* Time base */
3393
    gen_tbl(env);
3394
    gen_spr_BookE(env, 0x000000000000FFFFULL);
3395
    gen_spr_440(env);
3396
    gen_spr_usprgh(env);
3397
    /* Processor identification */
3398
    spr_register(env, SPR_BOOKE_PIR, "PIR",
3399
                 SPR_NOACCESS, SPR_NOACCESS,
3400
                 &spr_read_generic, &spr_write_pir,
3401
                 0x00000000);
3402
    /* XXX : not implemented */
3403
    spr_register(env, SPR_BOOKE_IAC3, "IAC3",
3404
                 SPR_NOACCESS, SPR_NOACCESS,
3405
                 &spr_read_generic, &spr_write_generic,
3406
                 0x00000000);
3407
    /* XXX : not implemented */
3408
    spr_register(env, SPR_BOOKE_IAC4, "IAC4",
3409
                 SPR_NOACCESS, SPR_NOACCESS,
3410
                 &spr_read_generic, &spr_write_generic,
3411
                 0x00000000);
3412
    /* XXX : not implemented */
3413
    spr_register(env, SPR_BOOKE_DVC1, "DVC1",
3414
                 SPR_NOACCESS, SPR_NOACCESS,
3415
                 &spr_read_generic, &spr_write_generic,
3416
                 0x00000000);
3417
    /* XXX : not implemented */
3418
    spr_register(env, SPR_BOOKE_DVC2, "DVC2",
3419
                 SPR_NOACCESS, SPR_NOACCESS,
3420
                 &spr_read_generic, &spr_write_generic,
3421
                 0x00000000);
3422
    /* Memory management */
3423
#if !defined(CONFIG_USER_ONLY)
3424
    env->nb_tlb = 64;
3425
    env->nb_ways = 1;
3426
    env->id_tlbs = 0;
3427
#endif
3428
    init_excp_BookE(env);
3429
    env->dcache_line_size = 32;
3430
    env->icache_line_size = 32;
3431
    /* XXX: TODO: allocate internal IRQ controller */
3432
}
3433

    
3434
/* PowerPC 440x5                                                             */
3435
#define POWERPC_INSNS_440x5  (POWERPC_INSNS_EMB | PPC_STRING | PPC_DCR |      \
3436
                              PPC_CACHE_DCBA | PPC_MEM_TLBSYNC |              \
3437
                              PPC_BOOKE | PPC_4xx_COMMON | PPC_405_MAC |      \
3438
                              PPC_440_SPEC | PPC_RFMCI)
3439
#define POWERPC_MSRM_440x5   (0x000000000006FF30ULL)
3440
#define POWERPC_MMU_440x5    (POWERPC_MMU_BOOKE)
3441
#define POWERPC_EXCP_440x5   (POWERPC_EXCP_BOOKE)
3442
#define POWERPC_INPUT_440x5  (PPC_FLAGS_INPUT_BookE)
3443
#define POWERPC_BFDM_440x5   (bfd_mach_ppc_403)
3444
#define POWERPC_FLAG_440x5   (POWERPC_FLAG_CE | POWERPC_FLAG_DWE |           \
3445
                              POWERPC_FLAG_DE | POWERPC_FLAG_BUS_CLK)
3446
#define check_pow_440x5      check_pow_nocheck
3447

    
3448
__attribute__ (( unused ))
3449
static void init_proc_440x5 (CPUPPCState *env)
3450
{
3451
    /* Time base */
3452
    gen_tbl(env);
3453
    gen_spr_BookE(env, 0x000000000000FFFFULL);
3454
    gen_spr_440(env);
3455
    gen_spr_usprgh(env);
3456
    /* Processor identification */
3457
    spr_register(env, SPR_BOOKE_PIR, "PIR",
3458
                 SPR_NOACCESS, SPR_NOACCESS,
3459
                 &spr_read_generic, &spr_write_pir,
3460
                 0x00000000);
3461
    /* XXX : not implemented */
3462
    spr_register(env, SPR_BOOKE_IAC3, "IAC3",
3463
                 SPR_NOACCESS, SPR_NOACCESS,
3464
                 &spr_read_generic, &spr_write_generic,
3465
                 0x00000000);
3466
    /* XXX : not implemented */
3467
    spr_register(env, SPR_BOOKE_IAC4, "IAC4",
3468
                 SPR_NOACCESS, SPR_NOACCESS,
3469
                 &spr_read_generic, &spr_write_generic,
3470
                 0x00000000);
3471
    /* XXX : not implemented */
3472
    spr_register(env, SPR_BOOKE_DVC1, "DVC1",
3473
                 SPR_NOACCESS, SPR_NOACCESS,
3474
                 &spr_read_generic, &spr_write_generic,
3475
                 0x00000000);
3476
    /* XXX : not implemented */
3477
    spr_register(env, SPR_BOOKE_DVC2, "DVC2",
3478
                 SPR_NOACCESS, SPR_NOACCESS,
3479
                 &spr_read_generic, &spr_write_generic,
3480
                 0x00000000);
3481
    /* XXX : not implemented */
3482
    spr_register(env, SPR_BOOKE_MCSR, "MCSR",
3483
                 SPR_NOACCESS, SPR_NOACCESS,
3484
                 &spr_read_generic, &spr_write_generic,
3485
                 0x00000000);
3486
    spr_register(env, SPR_BOOKE_MCSRR0, "MCSRR0",
3487
                 SPR_NOACCESS, SPR_NOACCESS,
3488
                 &spr_read_generic, &spr_write_generic,
3489
                 0x00000000);
3490
    spr_register(env, SPR_BOOKE_MCSRR1, "MCSRR1",
3491
                 SPR_NOACCESS, SPR_NOACCESS,
3492
                 &spr_read_generic, &spr_write_generic,
3493
                 0x00000000);
3494
    /* XXX : not implemented */
3495
    spr_register(env, SPR_440_CCR1, "CCR1",
3496
                 SPR_NOACCESS, SPR_NOACCESS,
3497
                 &spr_read_generic, &spr_write_generic,
3498
                 0x00000000);
3499
    /* Memory management */
3500
#if !defined(CONFIG_USER_ONLY)
3501
    env->nb_tlb = 64;
3502
    env->nb_ways = 1;
3503
    env->id_tlbs = 0;
3504
#endif
3505
    init_excp_BookE(env);
3506
    env->dcache_line_size = 32;
3507
    env->icache_line_size = 32;
3508
    /* XXX: TODO: allocate internal IRQ controller */
3509
}
3510

    
3511
/* PowerPC 460 (guessed)                                                     */
3512
#define POWERPC_INSNS_460    (POWERPC_INSNS_EMB | PPC_STRING |                \
3513
                              PPC_DCR | PPC_DCRX  | PPC_DCRUX |               \
3514
                              PPC_CACHE_DCBA | PPC_MEM_TLBSYNC |              \
3515
                              PPC_BOOKE | PPC_MFAPIDI | PPC_TLBIVA |          \
3516
                              PPC_4xx_COMMON | PPC_405_MAC | PPC_440_SPEC)
3517
#define POWERPC_MSRM_460     (0x000000000006FF30ULL)
3518
#define POWERPC_MMU_460      (POWERPC_MMU_BOOKE)
3519
#define POWERPC_EXCP_460     (POWERPC_EXCP_BOOKE)
3520
#define POWERPC_INPUT_460    (PPC_FLAGS_INPUT_BookE)
3521
#define POWERPC_BFDM_460     (bfd_mach_ppc_403)
3522
#define POWERPC_FLAG_460     (POWERPC_FLAG_CE | POWERPC_FLAG_DWE |            \
3523
                              POWERPC_FLAG_DE | POWERPC_FLAG_BUS_CLK)
3524
#define check_pow_460        check_pow_nocheck
3525

    
3526
__attribute__ (( unused ))
3527
static void init_proc_460 (CPUPPCState *env)
3528
{
3529
    /* Time base */
3530
    gen_tbl(env);
3531
    gen_spr_BookE(env, 0x000000000000FFFFULL);
3532
    gen_spr_440(env);
3533
    gen_spr_usprgh(env);
3534
    /* Processor identification */
3535
    spr_register(env, SPR_BOOKE_PIR, "PIR",
3536
                 SPR_NOACCESS, SPR_NOACCESS,
3537
                 &spr_read_generic, &spr_write_pir,
3538
                 0x00000000);
3539
    /* XXX : not implemented */
3540
    spr_register(env, SPR_BOOKE_IAC3, "IAC3",
3541
                 SPR_NOACCESS, SPR_NOACCESS,
3542
                 &spr_read_generic, &spr_write_generic,
3543
                 0x00000000);
3544
    /* XXX : not implemented */
3545
    spr_register(env, SPR_BOOKE_IAC4, "IAC4",
3546
                 SPR_NOACCESS, SPR_NOACCESS,
3547
                 &spr_read_generic, &spr_write_generic,
3548
                 0x00000000);
3549
    /* XXX : not implemented */
3550
    spr_register(env, SPR_BOOKE_DVC1, "DVC1",
3551
                 SPR_NOACCESS, SPR_NOACCESS,
3552
                 &spr_read_generic, &spr_write_generic,
3553
                 0x00000000);
3554
    /* XXX : not implemented */
3555
    spr_register(env, SPR_BOOKE_DVC2, "DVC2",
3556
                 SPR_NOACCESS, SPR_NOACCESS,
3557
                 &spr_read_generic, &spr_write_generic,
3558
                 0x00000000);
3559
    /* XXX : not implemented */
3560
    spr_register(env, SPR_BOOKE_MCSR, "MCSR",
3561
                 SPR_NOACCESS, SPR_NOACCESS,
3562
                 &spr_read_generic, &spr_write_generic,
3563
                 0x00000000);
3564
    spr_register(env, SPR_BOOKE_MCSRR0, "MCSRR0",
3565
                 SPR_NOACCESS, SPR_NOACCESS,
3566
                 &spr_read_generic, &spr_write_generic,
3567
                 0x00000000);
3568
    spr_register(env, SPR_BOOKE_MCSRR1, "MCSRR1",
3569
                 SPR_NOACCESS, SPR_NOACCESS,
3570
                 &spr_read_generic, &spr_write_generic,
3571
                 0x00000000);
3572
    /* XXX : not implemented */
3573
    spr_register(env, SPR_440_CCR1, "CCR1",
3574
                 SPR_NOACCESS, SPR_NOACCESS,
3575
                 &spr_read_generic, &spr_write_generic,
3576
                 0x00000000);
3577
    /* XXX : not implemented */
3578
    spr_register(env, SPR_DCRIPR, "SPR_DCRIPR",
3579
                 &spr_read_generic, &spr_write_generic,
3580
                 &spr_read_generic, &spr_write_generic,
3581
                 0x00000000);
3582
    /* Memory management */
3583
#if !defined(CONFIG_USER_ONLY)
3584
    env->nb_tlb = 64;
3585
    env->nb_ways = 1;
3586
    env->id_tlbs = 0;
3587
#endif
3588
    init_excp_BookE(env);
3589
    env->dcache_line_size = 32;
3590
    env->icache_line_size = 32;
3591
    /* XXX: TODO: allocate internal IRQ controller */
3592
}
3593

    
3594
/* PowerPC 460F (guessed)                                                    */
3595
#define POWERPC_INSNS_460F   (POWERPC_INSNS_EMB | PPC_STRING |                \
3596
                              PPC_DCR | PPC_DCRX | PPC_DCRUX |                \
3597
                              PPC_CACHE_DCBA | PPC_MEM_TLBSYNC |              \
3598
                              PPC_FLOAT | PPC_FLOAT_FSQRT | PPC_FLOAT_FRES |  \
3599
                              PPC_FLOAT_FRSQRTE | PPC_FLOAT_FSEL |            \
3600
                              PPC_FLOAT_STFIWX |                              \
3601
                              PPC_BOOKE | PPC_MFAPIDI | PPC_TLBIVA |          \
3602
                              PPC_4xx_COMMON | PPC_405_MAC | PPC_440_SPEC)
3603
#define POWERPC_MSRM_460     (0x000000000006FF30ULL)
3604
#define POWERPC_MMU_460F     (POWERPC_MMU_BOOKE)
3605
#define POWERPC_EXCP_460F    (POWERPC_EXCP_BOOKE)
3606
#define POWERPC_INPUT_460F   (PPC_FLAGS_INPUT_BookE)
3607
#define POWERPC_BFDM_460F    (bfd_mach_ppc_403)
3608
#define POWERPC_FLAG_460F    (POWERPC_FLAG_CE | POWERPC_FLAG_DWE |            \
3609
                              POWERPC_FLAG_DE | POWERPC_FLAG_BUS_CLK)
3610
#define check_pow_460F       check_pow_nocheck
3611

    
3612
__attribute__ (( unused ))
3613
static void init_proc_460F (CPUPPCState *env)
3614
{
3615
    /* Time base */
3616
    gen_tbl(env);
3617
    gen_spr_BookE(env, 0x000000000000FFFFULL);
3618
    gen_spr_440(env);
3619
    gen_spr_usprgh(env);
3620
    /* Processor identification */
3621
    spr_register(env, SPR_BOOKE_PIR, "PIR",
3622
                 SPR_NOACCESS, SPR_NOACCESS,
3623
                 &spr_read_generic, &spr_write_pir,
3624
                 0x00000000);
3625
    /* XXX : not implemented */
3626
    spr_register(env, SPR_BOOKE_IAC3, "IAC3",
3627
                 SPR_NOACCESS, SPR_NOACCESS,
3628
                 &spr_read_generic, &spr_write_generic,
3629
                 0x00000000);
3630
    /* XXX : not implemented */
3631
    spr_register(env, SPR_BOOKE_IAC4, "IAC4",
3632
                 SPR_NOACCESS, SPR_NOACCESS,
3633
                 &spr_read_generic, &spr_write_generic,
3634
                 0x00000000);
3635
    /* XXX : not implemented */
3636
    spr_register(env, SPR_BOOKE_DVC1, "DVC1",
3637
                 SPR_NOACCESS, SPR_NOACCESS,
3638
                 &spr_read_generic, &spr_write_generic,
3639
                 0x00000000);
3640
    /* XXX : not implemented */
3641
    spr_register(env, SPR_BOOKE_DVC2, "DVC2",
3642
                 SPR_NOACCESS, SPR_NOACCESS,
3643
                 &spr_read_generic, &spr_write_generic,
3644
                 0x00000000);
3645
    /* XXX : not implemented */
3646
    spr_register(env, SPR_BOOKE_MCSR, "MCSR",
3647
                 SPR_NOACCESS, SPR_NOACCESS,
3648
                 &spr_read_generic, &spr_write_generic,
3649
                 0x00000000);
3650
    spr_register(env, SPR_BOOKE_MCSRR0, "MCSRR0",
3651
                 SPR_NOACCESS, SPR_NOACCESS,
3652
                 &spr_read_generic, &spr_write_generic,
3653
                 0x00000000);
3654
    spr_register(env, SPR_BOOKE_MCSRR1, "MCSRR1",
3655
                 SPR_NOACCESS, SPR_NOACCESS,
3656
                 &spr_read_generic, &spr_write_generic,
3657
                 0x00000000);
3658
    /* XXX : not implemented */
3659
    spr_register(env, SPR_440_CCR1, "CCR1",
3660
                 SPR_NOACCESS, SPR_NOACCESS,
3661
                 &spr_read_generic, &spr_write_generic,
3662
                 0x00000000);
3663
    /* XXX : not implemented */
3664
    spr_register(env, SPR_DCRIPR, "SPR_DCRIPR",
3665
                 &spr_read_generic, &spr_write_generic,
3666
                 &spr_read_generic, &spr_write_generic,
3667
                 0x00000000);
3668
    /* Memory management */
3669
#if !defined(CONFIG_USER_ONLY)
3670
    env->nb_tlb = 64;
3671
    env->nb_ways = 1;
3672
    env->id_tlbs = 0;
3673
#endif
3674
    init_excp_BookE(env);
3675
    env->dcache_line_size = 32;
3676
    env->icache_line_size = 32;
3677
    /* XXX: TODO: allocate internal IRQ controller */
3678
}
3679

    
3680
/* Freescale 5xx cores (aka RCPU) */
3681
#define POWERPC_INSNS_MPC5xx (PPC_INSNS_BASE | PPC_STRING |                   \
3682
                              PPC_MEM_EIEIO | PPC_MEM_SYNC |                  \
3683
                              PPC_CACHE_ICBI | PPC_FLOAT | PPC_FLOAT_STFIWX | \
3684
                              PPC_MFTB)
3685
#define POWERPC_MSRM_MPC5xx  (0x000000000001FF43ULL)
3686
#define POWERPC_MMU_MPC5xx   (POWERPC_MMU_REAL)
3687
#define POWERPC_EXCP_MPC5xx  (POWERPC_EXCP_603)
3688
#define POWERPC_INPUT_MPC5xx (PPC_FLAGS_INPUT_RCPU)
3689
#define POWERPC_BFDM_MPC5xx  (bfd_mach_ppc_505)
3690
#define POWERPC_FLAG_MPC5xx  (POWERPC_FLAG_SE | POWERPC_FLAG_BE |             \
3691
                              POWERPC_FLAG_BUS_CLK)
3692
#define check_pow_MPC5xx     check_pow_none
3693

    
3694
__attribute__ (( unused ))
3695
static void init_proc_MPC5xx (CPUPPCState *env)
3696
{
3697
    /* Time base */
3698
    gen_tbl(env);
3699
    gen_spr_5xx_8xx(env);
3700
    gen_spr_5xx(env);
3701
    init_excp_MPC5xx(env);
3702
    env->dcache_line_size = 32;
3703
    env->icache_line_size = 32;
3704
    /* XXX: TODO: allocate internal IRQ controller */
3705
}
3706

    
3707
/* Freescale 8xx cores (aka PowerQUICC) */
3708
#define POWERPC_INSNS_MPC8xx (PPC_INSNS_BASE | PPC_STRING  |                  \
3709
                              PPC_MEM_EIEIO | PPC_MEM_SYNC |                  \
3710
                              PPC_CACHE_ICBI | PPC_MFTB)
3711
#define POWERPC_MSRM_MPC8xx  (0x000000000001F673ULL)
3712
#define POWERPC_MMU_MPC8xx   (POWERPC_MMU_MPC8xx)
3713
#define POWERPC_EXCP_MPC8xx  (POWERPC_EXCP_603)
3714
#define POWERPC_INPUT_MPC8xx (PPC_FLAGS_INPUT_RCPU)
3715
#define POWERPC_BFDM_MPC8xx  (bfd_mach_ppc_860)
3716
#define POWERPC_FLAG_MPC8xx  (POWERPC_FLAG_SE | POWERPC_FLAG_BE |             \
3717
                              POWERPC_FLAG_BUS_CLK)
3718
#define check_pow_MPC8xx     check_pow_none
3719

    
3720
__attribute__ (( unused ))
3721
static void init_proc_MPC8xx (CPUPPCState *env)
3722
{
3723
    /* Time base */
3724
    gen_tbl(env);
3725
    gen_spr_5xx_8xx(env);
3726
    gen_spr_8xx(env);
3727
    init_excp_MPC8xx(env);
3728
    env->dcache_line_size = 32;
3729
    env->icache_line_size = 32;
3730
    /* XXX: TODO: allocate internal IRQ controller */
3731
}
3732

    
3733
/* Freescale 82xx cores (aka PowerQUICC-II)                                  */
3734
/* PowerPC G2                                                                */
3735
#define POWERPC_INSNS_G2     (POWERPC_INSNS_WORKS | PPC_6xx_TLB | PPC_EXTERN)
3736
#define POWERPC_MSRM_G2      (0x000000000006FFF2ULL)
3737
#define POWERPC_MMU_G2       (POWERPC_MMU_SOFT_6xx)
3738
//#define POWERPC_EXCP_G2      (POWERPC_EXCP_G2)
3739
#define POWERPC_INPUT_G2     (PPC_FLAGS_INPUT_6xx)
3740
#define POWERPC_BFDM_G2      (bfd_mach_ppc_ec603e)
3741
#define POWERPC_FLAG_G2      (POWERPC_FLAG_TGPR | POWERPC_FLAG_SE |           \
3742
                              POWERPC_FLAG_BE | POWERPC_FLAG_BUS_CLK)
3743
#define check_pow_G2         check_pow_hid0
3744

    
3745
static void init_proc_G2 (CPUPPCState *env)
3746
{
3747
    gen_spr_ne_601(env);
3748
    gen_spr_G2_755(env);
3749
    gen_spr_G2(env);
3750
    /* Time base */
3751
    gen_tbl(env);
3752
    /* Hardware implementation register */
3753
    /* XXX : not implemented */
3754
    spr_register(env, SPR_HID0, "HID0",
3755
                 SPR_NOACCESS, SPR_NOACCESS,
3756
                 &spr_read_generic, &spr_write_generic,
3757
                 0x00000000);
3758
    /* XXX : not implemented */
3759
    spr_register(env, SPR_HID1, "HID1",
3760
                 SPR_NOACCESS, SPR_NOACCESS,
3761
                 &spr_read_generic, &spr_write_generic,
3762
                 0x00000000);
3763
    /* XXX : not implemented */
3764
    spr_register(env, SPR_HID2, "HID2",
3765
                 SPR_NOACCESS, SPR_NOACCESS,
3766
                 &spr_read_generic, &spr_write_generic,
3767
                 0x00000000);
3768
    /* Memory management */
3769
    gen_low_BATs(env);
3770
    gen_high_BATs(env);
3771
    gen_6xx_7xx_soft_tlb(env, 64, 2);
3772
    init_excp_G2(env);
3773
    env->dcache_line_size = 32;
3774
    env->icache_line_size = 32;
3775
    /* Allocate hardware IRQ controller */
3776
    ppc6xx_irq_init(env);
3777
}
3778

    
3779
/* PowerPC G2LE                                                              */
3780
#define POWERPC_INSNS_G2LE   (POWERPC_INSNS_WORKS | PPC_6xx_TLB | PPC_EXTERN)
3781
#define POWERPC_MSRM_G2LE    (0x000000000007FFF3ULL)
3782
#define POWERPC_MMU_G2LE     (POWERPC_MMU_SOFT_6xx)
3783
#define POWERPC_EXCP_G2LE    (POWERPC_EXCP_G2)
3784
#define POWERPC_INPUT_G2LE   (PPC_FLAGS_INPUT_6xx)
3785
#define POWERPC_BFDM_G2LE    (bfd_mach_ppc_ec603e)
3786
#define POWERPC_FLAG_G2LE    (POWERPC_FLAG_TGPR | POWERPC_FLAG_SE |           \
3787
                              POWERPC_FLAG_BE | POWERPC_FLAG_BUS_CLK)
3788
#define check_pow_G2LE       check_pow_hid0
3789

    
3790
static void init_proc_G2LE (CPUPPCState *env)
3791
{
3792
    gen_spr_ne_601(env);
3793
    gen_spr_G2_755(env);
3794
    gen_spr_G2(env);
3795
    /* Time base */
3796
    gen_tbl(env);
3797
    /* Hardware implementation register */
3798
    /* XXX : not implemented */
3799
    spr_register(env, SPR_HID0, "HID0",
3800
                 SPR_NOACCESS, SPR_NOACCESS,
3801
                 &spr_read_generic, &spr_write_generic,
3802
                 0x00000000);
3803
    /* XXX : not implemented */
3804
    spr_register(env, SPR_HID1, "HID1",
3805
                 SPR_NOACCESS, SPR_NOACCESS,
3806
                 &spr_read_generic, &spr_write_generic,
3807
                 0x00000000);
3808
    /* XXX : not implemented */
3809
    spr_register(env, SPR_HID2, "HID2",
3810
                 SPR_NOACCESS, SPR_NOACCESS,
3811
                 &spr_read_generic, &spr_write_generic,
3812
                 0x00000000);
3813
    /* Memory management */
3814
    gen_low_BATs(env);
3815
    gen_high_BATs(env);
3816
    gen_6xx_7xx_soft_tlb(env, 64, 2);
3817
    init_excp_G2(env);
3818
    env->dcache_line_size = 32;
3819
    env->icache_line_size = 32;
3820
    /* Allocate hardware IRQ controller */
3821
    ppc6xx_irq_init(env);
3822
}
3823

    
3824
/* e200 core                                                                 */
3825
/* XXX: unimplemented instructions:
3826
 * dcblc
3827
 * dcbtlst
3828
 * dcbtstls
3829
 * icblc
3830
 * icbtls
3831
 * tlbivax
3832
 * all SPE multiply-accumulate instructions
3833
 */
3834
#define POWERPC_INSNS_e200   (POWERPC_INSNS_EMB | PPC_ISEL |                  \
3835
                              PPC_SPE | PPC_SPEFPU |                          \
3836
                              PPC_MEM_TLBSYNC | PPC_TLBIVAX |                 \
3837
                              PPC_CACHE_DCBA | PPC_CACHE_LOCK |               \
3838
                              PPC_BOOKE | PPC_RFDI)
3839
#define POWERPC_MSRM_e200    (0x000000000606FF30ULL)
3840
#define POWERPC_MMU_e200     (POWERPC_MMU_BOOKE_FSL)
3841
#define POWERPC_EXCP_e200    (POWERPC_EXCP_BOOKE)
3842
#define POWERPC_INPUT_e200   (PPC_FLAGS_INPUT_BookE)
3843
#define POWERPC_BFDM_e200    (bfd_mach_ppc_860)
3844
#define POWERPC_FLAG_e200    (POWERPC_FLAG_SPE | POWERPC_FLAG_CE |            \
3845
                              POWERPC_FLAG_UBLE | POWERPC_FLAG_DE |           \
3846
                              POWERPC_FLAG_BUS_CLK)
3847
#define check_pow_e200       check_pow_hid0
3848

    
3849
__attribute__ (( unused ))
3850
static void init_proc_e200 (CPUPPCState *env)
3851
{
3852
    /* Time base */
3853
    gen_tbl(env);
3854
    gen_spr_BookE(env, 0x000000070000FFFFULL);
3855
    /* XXX : not implemented */
3856
    spr_register(env, SPR_BOOKE_SPEFSCR, "SPEFSCR",
3857
                 SPR_NOACCESS, SPR_NOACCESS,
3858
                 &spr_read_generic, &spr_write_generic,
3859
                 0x00000000);
3860
    /* Memory management */
3861
    gen_spr_BookE_FSL(env, 0x0000005D);
3862
    /* XXX : not implemented */
3863
    spr_register(env, SPR_HID0, "HID0",
3864
                 SPR_NOACCESS, SPR_NOACCESS,
3865
                 &spr_read_generic, &spr_write_generic,
3866
                 0x00000000);
3867
    /* XXX : not implemented */
3868
    spr_register(env, SPR_HID1, "HID1",
3869
                 SPR_NOACCESS, SPR_NOACCESS,
3870
                 &spr_read_generic, &spr_write_generic,
3871
                 0x00000000);
3872
    /* XXX : not implemented */
3873
    spr_register(env, SPR_Exxx_ALTCTXCR, "ALTCTXCR",
3874
                 SPR_NOACCESS, SPR_NOACCESS,
3875
                 &spr_read_generic, &spr_write_generic,
3876
                 0x00000000);
3877
    /* XXX : not implemented */
3878
    spr_register(env, SPR_Exxx_BUCSR, "BUCSR",
3879
                 SPR_NOACCESS, SPR_NOACCESS,
3880
                 &spr_read_generic, &spr_write_generic,
3881
                 0x00000000);
3882
    /* XXX : not implemented */
3883
    spr_register(env, SPR_Exxx_CTXCR, "CTXCR",
3884
                 SPR_NOACCESS, SPR_NOACCESS,
3885
                 &spr_read_generic, &spr_write_generic,
3886
                 0x00000000);
3887
    /* XXX : not implemented */
3888
    spr_register(env, SPR_Exxx_DBCNT, "DBCNT",
3889
                 SPR_NOACCESS, SPR_NOACCESS,
3890
                 &spr_read_generic, &spr_write_generic,
3891
                 0x00000000);
3892
    /* XXX : not implemented */
3893
    spr_register(env, SPR_Exxx_DBCR3, "DBCR3",
3894
                 SPR_NOACCESS, SPR_NOACCESS,
3895
                 &spr_read_generic, &spr_write_generic,
3896
                 0x00000000);
3897
    /* XXX : not implemented */
3898
    spr_register(env, SPR_Exxx_L1CFG0, "L1CFG0",
3899
                 SPR_NOACCESS, SPR_NOACCESS,
3900
                 &spr_read_generic, &spr_write_generic,
3901
                 0x00000000);
3902
    /* XXX : not implemented */
3903
    spr_register(env, SPR_Exxx_L1CSR0, "L1CSR0",
3904
                 SPR_NOACCESS, SPR_NOACCESS,
3905
                 &spr_read_generic, &spr_write_generic,
3906
                 0x00000000);
3907
    /* XXX : not implemented */
3908
    spr_register(env, SPR_Exxx_L1FINV0, "L1FINV0",
3909
                 SPR_NOACCESS, SPR_NOACCESS,
3910
                 &spr_read_generic, &spr_write_generic,
3911
                 0x00000000);
3912
    /* XXX : not implemented */
3913
    spr_register(env, SPR_BOOKE_TLB0CFG, "TLB0CFG",
3914
                 SPR_NOACCESS, SPR_NOACCESS,
3915
                 &spr_read_generic, &spr_write_generic,
3916
                 0x00000000);
3917
    /* XXX : not implemented */
3918
    spr_register(env, SPR_BOOKE_TLB1CFG, "TLB1CFG",
3919
                 SPR_NOACCESS, SPR_NOACCESS,
3920
                 &spr_read_generic, &spr_write_generic,
3921
                 0x00000000);
3922
    /* XXX : not implemented */
3923
    spr_register(env, SPR_BOOKE_IAC3, "IAC3",
3924
                 SPR_NOACCESS, SPR_NOACCESS,
3925
                 &spr_read_generic, &spr_write_generic,
3926
                 0x00000000);
3927
    /* XXX : not implemented */
3928
    spr_register(env, SPR_BOOKE_IAC4, "IAC4",
3929
                 SPR_NOACCESS, SPR_NOACCESS,
3930
                 &spr_read_generic, &spr_write_generic,
3931
                 0x00000000);
3932
    spr_register(env, SPR_BOOKE_DSRR0, "DSRR0",
3933
                 SPR_NOACCESS, SPR_NOACCESS,
3934
                 &spr_read_generic, &spr_write_generic,
3935
                 0x00000000);
3936
    spr_register(env, SPR_BOOKE_DSRR1, "DSRR1",
3937
                 SPR_NOACCESS, SPR_NOACCESS,
3938
                 &spr_read_generic, &spr_write_generic,
3939
                 0x00000000);
3940
#if !defined(CONFIG_USER_ONLY)
3941
    env->nb_tlb = 64;
3942
    env->nb_ways = 1;
3943
    env->id_tlbs = 0;
3944
#endif
3945
    init_excp_e200(env);
3946
    env->dcache_line_size = 32;
3947
    env->icache_line_size = 32;
3948
    /* XXX: TODO: allocate internal IRQ controller */
3949
}
3950

    
3951
/* e300 core                                                                 */
3952
#define POWERPC_INSNS_e300   (POWERPC_INSNS_WORKS | PPC_6xx_TLB | PPC_EXTERN)
3953
#define POWERPC_MSRM_e300    (0x000000000007FFF3ULL)
3954
#define POWERPC_MMU_e300     (POWERPC_MMU_SOFT_6xx)
3955
#define POWERPC_EXCP_e300    (POWERPC_EXCP_603)
3956
#define POWERPC_INPUT_e300   (PPC_FLAGS_INPUT_6xx)
3957
#define POWERPC_BFDM_e300    (bfd_mach_ppc_603)
3958
#define POWERPC_FLAG_e300    (POWERPC_FLAG_TGPR | POWERPC_FLAG_SE |           \
3959
                              POWERPC_FLAG_BE | POWERPC_FLAG_BUS_CLK)
3960
#define check_pow_e300       check_pow_hid0
3961

    
3962
__attribute__ (( unused ))
3963
static void init_proc_e300 (CPUPPCState *env)
3964
{
3965
    gen_spr_ne_601(env);
3966
    gen_spr_603(env);
3967
    /* Time base */
3968
    gen_tbl(env);
3969
    /* hardware implementation registers */
3970
    /* XXX : not implemented */
3971
    spr_register(env, SPR_HID0, "HID0",
3972
                 SPR_NOACCESS, SPR_NOACCESS,
3973
                 &spr_read_generic, &spr_write_generic,
3974
                 0x00000000);
3975
    /* XXX : not implemented */
3976
    spr_register(env, SPR_HID1, "HID1",
3977
                 SPR_NOACCESS, SPR_NOACCESS,
3978
                 &spr_read_generic, &spr_write_generic,
3979
                 0x00000000);
3980
    /* Memory management */
3981
    gen_low_BATs(env);
3982
    gen_6xx_7xx_soft_tlb(env, 64, 2);
3983
    init_excp_603(env);
3984
    env->dcache_line_size = 32;
3985
    env->icache_line_size = 32;
3986
    /* Allocate hardware IRQ controller */
3987
    ppc6xx_irq_init(env);
3988
}
3989

    
3990
/* e500 core                                                                 */
3991
#define POWERPC_INSNS_e500   (POWERPC_INSNS_EMB | PPC_ISEL |                  \
3992
                              PPC_SPE | PPC_SPEFPU |                          \
3993
                              PPC_MEM_TLBSYNC | PPC_TLBIVAX |                 \
3994
                              PPC_CACHE_DCBA | PPC_CACHE_LOCK |               \
3995
                              PPC_BOOKE | PPC_RFDI)
3996
#define POWERPC_MSRM_e500    (0x000000000606FF30ULL)
3997
#define POWERPC_MMU_e500     (POWERPC_MMU_BOOKE_FSL)
3998
#define POWERPC_EXCP_e500    (POWERPC_EXCP_BOOKE)
3999
#define POWERPC_INPUT_e500   (PPC_FLAGS_INPUT_BookE)
4000
#define POWERPC_BFDM_e500    (bfd_mach_ppc_860)
4001
#define POWERPC_FLAG_e500    (POWERPC_FLAG_SPE | POWERPC_FLAG_CE |            \
4002
                              POWERPC_FLAG_UBLE | POWERPC_FLAG_DE |           \
4003
                              POWERPC_FLAG_BUS_CLK)
4004
#define check_pow_e500       check_pow_hid0
4005

    
4006
__attribute__ (( unused ))
4007
static void init_proc_e500 (CPUPPCState *env)
4008
{
4009
    /* Time base */
4010
    gen_tbl(env);
4011
    gen_spr_BookE(env, 0x0000000F0000FD7FULL);
4012
    /* Processor identification */
4013
    spr_register(env, SPR_BOOKE_PIR, "PIR",
4014
                 SPR_NOACCESS, SPR_NOACCESS,
4015
                 &spr_read_generic, &spr_write_pir,
4016
                 0x00000000);
4017
    /* XXX : not implemented */
4018
    spr_register(env, SPR_BOOKE_SPEFSCR, "SPEFSCR",
4019
                 SPR_NOACCESS, SPR_NOACCESS,
4020
                 &spr_read_generic, &spr_write_generic,
4021
                 0x00000000);
4022
    /* Memory management */
4023
#if !defined(CONFIG_USER_ONLY)
4024
    env->nb_pids = 3;
4025
#endif
4026
    gen_spr_BookE_FSL(env, 0x0000005F);
4027
    /* XXX : not implemented */
4028
    spr_register(env, SPR_HID0, "HID0",
4029
                 SPR_NOACCESS, SPR_NOACCESS,
4030
                 &spr_read_generic, &spr_write_generic,
4031
                 0x00000000);
4032
    /* XXX : not implemented */
4033
    spr_register(env, SPR_HID1, "HID1",
4034
                 SPR_NOACCESS, SPR_NOACCESS,
4035
                 &spr_read_generic, &spr_write_generic,
4036
                 0x00000000);
4037
    /* XXX : not implemented */
4038
    spr_register(env, SPR_Exxx_BBEAR, "BBEAR",
4039
                 SPR_NOACCESS, SPR_NOACCESS,
4040
                 &spr_read_generic, &spr_write_generic,
4041
                 0x00000000);
4042
    /* XXX : not implemented */
4043
    spr_register(env, SPR_Exxx_BBTAR, "BBTAR",
4044
                 SPR_NOACCESS, SPR_NOACCESS,
4045
                 &spr_read_generic, &spr_write_generic,
4046
                 0x00000000);
4047
    /* XXX : not implemented */
4048
    spr_register(env, SPR_Exxx_MCAR, "MCAR",
4049
                 SPR_NOACCESS, SPR_NOACCESS,
4050
                 &spr_read_generic, &spr_write_generic,
4051
                 0x00000000);
4052
    /* XXX : not implemented */
4053
    spr_register(env, SPR_BOOKE_MCSR, "MCSR",
4054
                 SPR_NOACCESS, SPR_NOACCESS,
4055
                 &spr_read_generic, &spr_write_generic,
4056
                 0x00000000);
4057
    /* XXX : not implemented */
4058
    spr_register(env, SPR_Exxx_NPIDR, "NPIDR",
4059
                 SPR_NOACCESS, SPR_NOACCESS,
4060
                 &spr_read_generic, &spr_write_generic,
4061
                 0x00000000);
4062
    /* XXX : not implemented */
4063
    spr_register(env, SPR_Exxx_BUCSR, "BUCSR",
4064
                 SPR_NOACCESS, SPR_NOACCESS,
4065
                 &spr_read_generic, &spr_write_generic,
4066
                 0x00000000);
4067
    /* XXX : not implemented */
4068
    spr_register(env, SPR_Exxx_L1CFG0, "L1CFG0",
4069
                 SPR_NOACCESS, SPR_NOACCESS,
4070
                 &spr_read_generic, &spr_write_generic,
4071
                 0x00000000);
4072
    /* XXX : not implemented */
4073
    spr_register(env, SPR_Exxx_L1CSR0, "L1CSR0",
4074
                 SPR_NOACCESS, SPR_NOACCESS,
4075
                 &spr_read_generic, &spr_write_generic,
4076
                 0x00000000);
4077
    /* XXX : not implemented */
4078
    spr_register(env, SPR_Exxx_L1CSR1, "L1CSR1",
4079
                 SPR_NOACCESS, SPR_NOACCESS,
4080
                 &spr_read_generic, &spr_write_generic,
4081
                 0x00000000);
4082
    /* XXX : not implemented */
4083
    spr_register(env, SPR_BOOKE_TLB0CFG, "TLB0CFG",
4084
                 SPR_NOACCESS, SPR_NOACCESS,
4085
                 &spr_read_generic, &spr_write_generic,
4086
                 0x00000000);
4087
    /* XXX : not implemented */
4088
    spr_register(env, SPR_BOOKE_TLB1CFG, "TLB1CFG",
4089
                 SPR_NOACCESS, SPR_NOACCESS,
4090
                 &spr_read_generic, &spr_write_generic,
4091
                 0x00000000);
4092
    spr_register(env, SPR_BOOKE_MCSRR0, "MCSRR0",
4093
                 SPR_NOACCESS, SPR_NOACCESS,
4094
                 &spr_read_generic, &spr_write_generic,
4095
                 0x00000000);
4096
    spr_register(env, SPR_BOOKE_MCSRR1, "MCSRR1",
4097
                 SPR_NOACCESS, SPR_NOACCESS,
4098
                 &spr_read_generic, &spr_write_generic,
4099
                 0x00000000);
4100
#if !defined(CONFIG_USER_ONLY)
4101
    env->nb_tlb = 64;
4102
    env->nb_ways = 1;
4103
    env->id_tlbs = 0;
4104
#endif
4105
    init_excp_e200(env);
4106
    env->dcache_line_size = 32;
4107
    env->icache_line_size = 32;
4108
    /* XXX: TODO: allocate internal IRQ controller */
4109
}
4110

    
4111
/* Non-embedded PowerPC                                                      */
4112
/* Base instructions set for all 6xx/7xx/74xx/970 PowerPC                    */
4113
#define POWERPC_INSNS_6xx    (PPC_INSNS_BASE | PPC_STRING | PPC_FLOAT |       \
4114
                              PPC_CACHE | PPC_CACHE_ICBI |                    \
4115
                              PPC_MEM_SYNC | PPC_MEM_EIEIO | PPC_MEM_TLBIE)
4116
/* Instructions common to all 6xx/7xx/74xx/970 PowerPC except 601 & 602      */
4117
#define POWERPC_INSNS_WORKS  (POWERPC_INSNS_6xx | PPC_FLOAT_FSQRT |           \
4118
                              PPC_FLOAT_FRES | PPC_FLOAT_FRSQRTE |            \
4119
                              PPC_FLOAT_FSEL | PPC_FLOAT_STFIWX |             \
4120
                              PPC_MEM_TLBSYNC | PPC_CACHE_DCBZ | PPC_MFTB |   \
4121
                              PPC_SEGMENT)
4122

    
4123
/* POWER : same as 601, without mfmsr, mfsr                                  */
4124
#if defined(TODO)
4125
#define POWERPC_INSNS_POWER  (XXX_TODO)
4126
/* POWER RSC (from RAD6000) */
4127
#define POWERPC_MSRM_POWER   (0x00000000FEF0ULL)
4128
#endif /* TODO */
4129

    
4130
/* PowerPC 601                                                               */
4131
#define POWERPC_INSNS_601    (POWERPC_INSNS_6xx | PPC_CACHE_DCBZ |            \
4132
                              PPC_SEGMENT | PPC_EXTERN | PPC_POWER_BR)
4133
#define POWERPC_MSRM_601     (0x000000000000FD70ULL)
4134
//#define POWERPC_MMU_601      (POWERPC_MMU_601)
4135
//#define POWERPC_EXCP_601     (POWERPC_EXCP_601)
4136
#define POWERPC_INPUT_601    (PPC_FLAGS_INPUT_6xx)
4137
#define POWERPC_BFDM_601     (bfd_mach_ppc_601)
4138
#define POWERPC_FLAG_601     (POWERPC_FLAG_SE | POWERPC_FLAG_RTC_CLK)
4139
#define check_pow_601        check_pow_none
4140

    
4141
static void init_proc_601 (CPUPPCState *env)
4142
{
4143
    gen_spr_ne_601(env);
4144
    gen_spr_601(env);
4145
    /* Hardware implementation registers */
4146
    /* XXX : not implemented */
4147
    spr_register(env, SPR_HID0, "HID0",
4148
                 SPR_NOACCESS, SPR_NOACCESS,
4149
                 &spr_read_generic, &spr_write_hid0_601,
4150
                 0x80010080);
4151
    /* XXX : not implemented */
4152
    spr_register(env, SPR_HID1, "HID1",
4153
                 SPR_NOACCESS, SPR_NOACCESS,
4154
                 &spr_read_generic, &spr_write_generic,
4155
                 0x00000000);
4156
    /* XXX : not implemented */
4157
    spr_register(env, SPR_601_HID2, "HID2",
4158
                 SPR_NOACCESS, SPR_NOACCESS,
4159
                 &spr_read_generic, &spr_write_generic,
4160
                 0x00000000);
4161
    /* XXX : not implemented */
4162
    spr_register(env, SPR_601_HID5, "HID5",
4163
                 SPR_NOACCESS, SPR_NOACCESS,
4164
                 &spr_read_generic, &spr_write_generic,
4165
                 0x00000000);
4166
    /* XXX : not implemented */
4167
    spr_register(env, SPR_601_HID15, "HID15",
4168
                 SPR_NOACCESS, SPR_NOACCESS,
4169
                 &spr_read_generic, &spr_write_generic,
4170
                 0x00000000);
4171
    /* Memory management */
4172
#if !defined(CONFIG_USER_ONLY)
4173
    env->nb_tlb = 64;
4174
    env->nb_ways = 2;
4175
    env->id_tlbs = 0;
4176
#endif
4177
    init_excp_601(env);
4178
    env->dcache_line_size = 64;
4179
    env->icache_line_size = 64;
4180
    /* Allocate hardware IRQ controller */
4181
    ppc6xx_irq_init(env);
4182
}
4183

    
4184
/* PowerPC 602                                                               */
4185
#define POWERPC_INSNS_602    (POWERPC_INSNS_6xx | PPC_MFTB |                  \
4186
                              PPC_FLOAT_FRES | PPC_FLOAT_FRSQRTE |            \
4187
                              PPC_FLOAT_FSEL | PPC_FLOAT_STFIWX |             \
4188
                              PPC_6xx_TLB | PPC_MEM_TLBSYNC | PPC_CACHE_DCBZ |\
4189
                              PPC_SEGMENT | PPC_602_SPEC)
4190
#define POWERPC_MSRM_602     (0x000000000033FF73ULL)
4191
#define POWERPC_MMU_602      (POWERPC_MMU_SOFT_6xx)
4192
//#define POWERPC_EXCP_602     (POWERPC_EXCP_602)
4193
#define POWERPC_INPUT_602    (PPC_FLAGS_INPUT_6xx)
4194
#define POWERPC_BFDM_602     (bfd_mach_ppc_602)
4195
#define POWERPC_FLAG_602     (POWERPC_FLAG_TGPR | POWERPC_FLAG_SE |           \
4196
                              POWERPC_FLAG_BE | POWERPC_FLAG_BUS_CLK)
4197
#define check_pow_602        check_pow_hid0
4198

    
4199
static void init_proc_602 (CPUPPCState *env)
4200
{
4201
    gen_spr_ne_601(env);
4202
    gen_spr_602(env);
4203
    /* Time base */
4204
    gen_tbl(env);
4205
    /* hardware implementation registers */
4206
    /* XXX : not implemented */
4207
    spr_register(env, SPR_HID0, "HID0",
4208
                 SPR_NOACCESS, SPR_NOACCESS,
4209
                 &spr_read_generic, &spr_write_generic,
4210
                 0x00000000);
4211
    /* XXX : not implemented */
4212
    spr_register(env, SPR_HID1, "HID1",
4213
                 SPR_NOACCESS, SPR_NOACCESS,
4214
                 &spr_read_generic, &spr_write_generic,
4215
                 0x00000000);
4216
    /* Memory management */
4217
    gen_low_BATs(env);
4218
    gen_6xx_7xx_soft_tlb(env, 64, 2);
4219
    init_excp_602(env);
4220
    env->dcache_line_size = 32;
4221
    env->icache_line_size = 32;
4222
    /* Allocate hardware IRQ controller */
4223
    ppc6xx_irq_init(env);
4224
}
4225

    
4226
/* PowerPC 603                                                               */
4227
#define POWERPC_INSNS_603    (POWERPC_INSNS_WORKS | PPC_6xx_TLB | PPC_EXTERN)
4228
#define POWERPC_MSRM_603     (0x000000000007FF73ULL)
4229
#define POWERPC_MMU_603      (POWERPC_MMU_SOFT_6xx)
4230
//#define POWERPC_EXCP_603     (POWERPC_EXCP_603)
4231
#define POWERPC_INPUT_603    (PPC_FLAGS_INPUT_6xx)
4232
#define POWERPC_BFDM_603     (bfd_mach_ppc_603)
4233
#define POWERPC_FLAG_603     (POWERPC_FLAG_TGPR | POWERPC_FLAG_SE |           \
4234
                              POWERPC_FLAG_BE | POWERPC_FLAG_BUS_CLK)
4235
#define check_pow_603        check_pow_hid0
4236

    
4237
static void init_proc_603 (CPUPPCState *env)
4238
{
4239
    gen_spr_ne_601(env);
4240
    gen_spr_603(env);
4241
    /* Time base */
4242
    gen_tbl(env);
4243
    /* hardware implementation registers */
4244
    /* XXX : not implemented */
4245
    spr_register(env, SPR_HID0, "HID0",
4246
                 SPR_NOACCESS, SPR_NOACCESS,
4247
                 &spr_read_generic, &spr_write_generic,
4248
                 0x00000000);
4249
    /* XXX : not implemented */
4250
    spr_register(env, SPR_HID1, "HID1",
4251
                 SPR_NOACCESS, SPR_NOACCESS,
4252
                 &spr_read_generic, &spr_write_generic,
4253
                 0x00000000);
4254
    /* Memory management */
4255
    gen_low_BATs(env);
4256
    gen_6xx_7xx_soft_tlb(env, 64, 2);
4257
    init_excp_603(env);
4258
    env->dcache_line_size = 32;
4259
    env->icache_line_size = 32;
4260
    /* Allocate hardware IRQ controller */
4261
    ppc6xx_irq_init(env);
4262
}
4263

    
4264
/* PowerPC 603e                                                              */
4265
#define POWERPC_INSNS_603E   (POWERPC_INSNS_WORKS | PPC_6xx_TLB | PPC_EXTERN)
4266
#define POWERPC_MSRM_603E    (0x000000000007FF73ULL)
4267
#define POWERPC_MMU_603E     (POWERPC_MMU_SOFT_6xx)
4268
//#define POWERPC_EXCP_603E    (POWERPC_EXCP_603E)
4269
#define POWERPC_INPUT_603E   (PPC_FLAGS_INPUT_6xx)
4270
#define POWERPC_BFDM_603E    (bfd_mach_ppc_ec603e)
4271
#define POWERPC_FLAG_603E    (POWERPC_FLAG_TGPR | POWERPC_FLAG_SE |           \
4272
                              POWERPC_FLAG_BE | POWERPC_FLAG_BUS_CLK)
4273
#define check_pow_603E       check_pow_hid0
4274

    
4275
static void init_proc_603E (CPUPPCState *env)
4276
{
4277
    gen_spr_ne_601(env);
4278
    gen_spr_603(env);
4279
    /* Time base */
4280
    gen_tbl(env);
4281
    /* hardware implementation registers */
4282
    /* XXX : not implemented */
4283
    spr_register(env, SPR_HID0, "HID0",
4284
                 SPR_NOACCESS, SPR_NOACCESS,
4285
                 &spr_read_generic, &spr_write_generic,
4286
                 0x00000000);
4287
    /* XXX : not implemented */
4288
    spr_register(env, SPR_HID1, "HID1",
4289
                 SPR_NOACCESS, SPR_NOACCESS,
4290
                 &spr_read_generic, &spr_write_generic,
4291
                 0x00000000);
4292
    /* XXX : not implemented */
4293
    spr_register(env, SPR_IABR, "IABR",
4294
                 SPR_NOACCESS, SPR_NOACCESS,
4295
                 &spr_read_generic, &spr_write_generic,
4296
                 0x00000000);
4297
    /* Memory management */
4298
    gen_low_BATs(env);
4299
    gen_6xx_7xx_soft_tlb(env, 64, 2);
4300
    init_excp_603(env);
4301
    env->dcache_line_size = 32;
4302
    env->icache_line_size = 32;
4303
    /* Allocate hardware IRQ controller */
4304
    ppc6xx_irq_init(env);
4305
}
4306

    
4307
/* PowerPC 604                                                               */
4308
#define POWERPC_INSNS_604    (POWERPC_INSNS_WORKS | PPC_EXTERN)
4309
#define POWERPC_MSRM_604     (0x000000000005FF77ULL)
4310
#define POWERPC_MMU_604      (POWERPC_MMU_32B)
4311
//#define POWERPC_EXCP_604     (POWERPC_EXCP_604)
4312
#define POWERPC_INPUT_604    (PPC_FLAGS_INPUT_6xx)
4313
#define POWERPC_BFDM_604     (bfd_mach_ppc_604)
4314
#define POWERPC_FLAG_604     (POWERPC_FLAG_SE | POWERPC_FLAG_BE |             \
4315
                              POWERPC_FLAG_PMM | POWERPC_FLAG_BUS_CLK)
4316
#define check_pow_604        check_pow_nocheck
4317

    
4318
static void init_proc_604 (CPUPPCState *env)
4319
{
4320
    gen_spr_ne_601(env);
4321
    gen_spr_604(env);
4322
    /* Time base */
4323
    gen_tbl(env);
4324
    /* Hardware implementation registers */
4325
    /* XXX : not implemented */
4326
    spr_register(env, SPR_HID0, "HID0",
4327
                 SPR_NOACCESS, SPR_NOACCESS,
4328
                 &spr_read_generic, &spr_write_generic,
4329
                 0x00000000);
4330
    /* XXX : not implemented */
4331
    spr_register(env, SPR_HID1, "HID1",
4332
                 SPR_NOACCESS, SPR_NOACCESS,
4333
                 &spr_read_generic, &spr_write_generic,
4334
                 0x00000000);
4335
    /* Memory management */
4336
    gen_low_BATs(env);
4337
    init_excp_604(env);
4338
    env->dcache_line_size = 32;
4339
    env->icache_line_size = 32;
4340
    /* Allocate hardware IRQ controller */
4341
    ppc6xx_irq_init(env);
4342
}
4343

    
4344
/* PowerPC 740/750 (aka G3)                                                  */
4345
#define POWERPC_INSNS_7x0    (POWERPC_INSNS_WORKS | PPC_EXTERN)
4346
#define POWERPC_MSRM_7x0     (0x000000000005FF77ULL)
4347
#define POWERPC_MMU_7x0      (POWERPC_MMU_32B)
4348
//#define POWERPC_EXCP_7x0     (POWERPC_EXCP_7x0)
4349
#define POWERPC_INPUT_7x0    (PPC_FLAGS_INPUT_6xx)
4350
#define POWERPC_BFDM_7x0     (bfd_mach_ppc_750)
4351
#define POWERPC_FLAG_7x0     (POWERPC_FLAG_SE | POWERPC_FLAG_BE |             \
4352
                              POWERPC_FLAG_PMM | POWERPC_FLAG_BUS_CLK)
4353
#define check_pow_7x0        check_pow_hid0
4354

    
4355
static void init_proc_7x0 (CPUPPCState *env)
4356
{
4357
    gen_spr_ne_601(env);
4358
    gen_spr_7xx(env);
4359
    /* Time base */
4360
    gen_tbl(env);
4361
    /* Thermal management */
4362
    gen_spr_thrm(env);
4363
    /* Hardware implementation registers */
4364
    /* XXX : not implemented */
4365
    spr_register(env, SPR_HID0, "HID0",
4366
                 SPR_NOACCESS, SPR_NOACCESS,
4367
                 &spr_read_generic, &spr_write_generic,
4368
                 0x00000000);
4369
    /* XXX : not implemented */
4370
    spr_register(env, SPR_HID1, "HID1",
4371
                 SPR_NOACCESS, SPR_NOACCESS,
4372
                 &spr_read_generic, &spr_write_generic,
4373
                 0x00000000);
4374
    /* Memory management */
4375
    gen_low_BATs(env);
4376
    init_excp_7x0(env);
4377
    env->dcache_line_size = 32;
4378
    env->icache_line_size = 32;
4379
    /* Allocate hardware IRQ controller */
4380
    ppc6xx_irq_init(env);
4381
}
4382

    
4383
/* PowerPC 750FX/GX                                                          */
4384
#define POWERPC_INSNS_750fx  (POWERPC_INSNS_WORKS | PPC_EXTERN)
4385
#define POWERPC_MSRM_750fx   (0x000000000005FF77ULL)
4386
#define POWERPC_MMU_750fx    (POWERPC_MMU_32B)
4387
#define POWERPC_EXCP_750fx   (POWERPC_EXCP_7x0)
4388
#define POWERPC_INPUT_750fx  (PPC_FLAGS_INPUT_6xx)
4389
#define POWERPC_BFDM_750fx   (bfd_mach_ppc_750)
4390
#define POWERPC_FLAG_750fx   (POWERPC_FLAG_SE | POWERPC_FLAG_BE |             \
4391
                              POWERPC_FLAG_PMM | POWERPC_FLAG_BUS_CLK)
4392
#define check_pow_750fx      check_pow_hid0
4393

    
4394
static void init_proc_750fx (CPUPPCState *env)
4395
{
4396
    gen_spr_ne_601(env);
4397
    gen_spr_7xx(env);
4398
    /* Time base */
4399
    gen_tbl(env);
4400
    /* Thermal management */
4401
    gen_spr_thrm(env);
4402
    /* Hardware implementation registers */
4403
    /* XXX : not implemented */
4404
    spr_register(env, SPR_HID0, "HID0",
4405
                 SPR_NOACCESS, SPR_NOACCESS,
4406
                 &spr_read_generic, &spr_write_generic,
4407
                 0x00000000);
4408
    /* XXX : not implemented */
4409
    spr_register(env, SPR_HID1, "HID1",
4410
                 SPR_NOACCESS, SPR_NOACCESS,
4411
                 &spr_read_generic, &spr_write_generic,
4412
                 0x00000000);
4413
    /* XXX : not implemented */
4414
    spr_register(env, SPR_750_HID2, "HID2",
4415
                 SPR_NOACCESS, SPR_NOACCESS,
4416
                 &spr_read_generic, &spr_write_generic,
4417
                 0x00000000);
4418
    /* Memory management */
4419
    gen_low_BATs(env);
4420
    /* PowerPC 750fx & 750gx has 8 DBATs and 8 IBATs */
4421
    gen_high_BATs(env);
4422
    init_excp_750FX(env);
4423
    env->dcache_line_size = 32;
4424
    env->icache_line_size = 32;
4425
    /* Allocate hardware IRQ controller */
4426
    ppc6xx_irq_init(env);
4427
}
4428

    
4429
/* PowerPC 745/755                                                           */
4430
#define POWERPC_INSNS_7x5    (POWERPC_INSNS_WORKS | PPC_EXTERN | PPC_6xx_TLB)
4431
#define POWERPC_MSRM_7x5     (0x000000000005FF77ULL)
4432
#define POWERPC_MMU_7x5      (POWERPC_MMU_SOFT_6xx)
4433
//#define POWERPC_EXCP_7x5     (POWERPC_EXCP_7x5)
4434
#define POWERPC_INPUT_7x5    (PPC_FLAGS_INPUT_6xx)
4435
#define POWERPC_BFDM_7x5     (bfd_mach_ppc_750)
4436
#define POWERPC_FLAG_7x5     (POWERPC_FLAG_SE | POWERPC_FLAG_BE |             \
4437
                              POWERPC_FLAG_PMM | POWERPC_FLAG_BUS_CLK)
4438
#define check_pow_7x5        check_pow_hid0
4439

    
4440
static void init_proc_7x5 (CPUPPCState *env)
4441
{
4442
    gen_spr_ne_601(env);
4443
    gen_spr_G2_755(env);
4444
    /* Time base */
4445
    gen_tbl(env);
4446
    /* L2 cache control */
4447
    /* XXX : not implemented */
4448
    spr_register(env, SPR_ICTC, "ICTC",
4449
                 SPR_NOACCESS, SPR_NOACCESS,
4450
                 &spr_read_generic, &spr_write_generic,
4451
                 0x00000000);
4452
    /* XXX : not implemented */
4453
    spr_register(env, SPR_L2PMCR, "L2PMCR",
4454
                 SPR_NOACCESS, SPR_NOACCESS,
4455
                 &spr_read_generic, &spr_write_generic,
4456
                 0x00000000);
4457
    /* Hardware implementation registers */
4458
    /* XXX : not implemented */
4459
    spr_register(env, SPR_HID0, "HID0",
4460
                 SPR_NOACCESS, SPR_NOACCESS,
4461
                 &spr_read_generic, &spr_write_generic,
4462
                 0x00000000);
4463
    /* XXX : not implemented */
4464
    spr_register(env, SPR_HID1, "HID1",
4465
                 SPR_NOACCESS, SPR_NOACCESS,
4466
                 &spr_read_generic, &spr_write_generic,
4467
                 0x00000000);
4468
    /* XXX : not implemented */
4469
    spr_register(env, SPR_HID2, "HID2",
4470
                 SPR_NOACCESS, SPR_NOACCESS,
4471
                 &spr_read_generic, &spr_write_generic,
4472
                 0x00000000);
4473
    /* Memory management */
4474
    gen_low_BATs(env);
4475
    gen_high_BATs(env);
4476
    gen_6xx_7xx_soft_tlb(env, 64, 2);
4477
    init_excp_7x5(env);
4478
    env->dcache_line_size = 32;
4479
    env->icache_line_size = 32;
4480
    /* Allocate hardware IRQ controller */
4481
    ppc6xx_irq_init(env);
4482
#if !defined(CONFIG_USER_ONLY)
4483
    /* Hardware reset vector */
4484
    env->hreset_vector = 0xFFFFFFFCUL;
4485
#endif
4486
}
4487

    
4488
/* PowerPC 7400 (aka G4)                                                     */
4489
#define POWERPC_INSNS_7400   (POWERPC_INSNS_WORKS | PPC_CACHE_DCBA |          \
4490
                              PPC_EXTERN | PPC_MEM_TLBIA |                    \
4491
                              PPC_ALTIVEC)
4492
#define POWERPC_MSRM_7400    (0x000000000205FF77ULL)
4493
#define POWERPC_MMU_7400     (POWERPC_MMU_32B)
4494
#define POWERPC_EXCP_7400    (POWERPC_EXCP_74xx)
4495
#define POWERPC_INPUT_7400   (PPC_FLAGS_INPUT_6xx)
4496
#define POWERPC_BFDM_7400    (bfd_mach_ppc_7400)
4497
#define POWERPC_FLAG_7400    (POWERPC_FLAG_VRE | POWERPC_FLAG_SE |            \
4498
                              POWERPC_FLAG_BE | POWERPC_FLAG_PMM |            \
4499
                              POWERPC_FLAG_BUS_CLK)
4500
#define check_pow_7400       check_pow_hid0
4501

    
4502
static void init_proc_7400 (CPUPPCState *env)
4503
{
4504
    gen_spr_ne_601(env);
4505
    gen_spr_7xx(env);
4506
    /* Time base */
4507
    gen_tbl(env);
4508
    /* 74xx specific SPR */
4509
    gen_spr_74xx(env);
4510
    /* Thermal management */
4511
    gen_spr_thrm(env);
4512
    /* Memory management */
4513
    gen_low_BATs(env);
4514
    init_excp_7400(env);
4515
    env->dcache_line_size = 32;
4516
    env->icache_line_size = 32;
4517
    /* Allocate hardware IRQ controller */
4518
    ppc6xx_irq_init(env);
4519
}
4520

    
4521
/* PowerPC 7410 (aka G4)                                                     */
4522
#define POWERPC_INSNS_7410   (POWERPC_INSNS_WORKS | PPC_CACHE_DCBA |          \
4523
                              PPC_EXTERN | PPC_MEM_TLBIA |                    \
4524
                              PPC_ALTIVEC)
4525
#define POWERPC_MSRM_7410    (0x000000000205FF77ULL)
4526
#define POWERPC_MMU_7410     (POWERPC_MMU_32B)
4527
#define POWERPC_EXCP_7410    (POWERPC_EXCP_74xx)
4528
#define POWERPC_INPUT_7410   (PPC_FLAGS_INPUT_6xx)
4529
#define POWERPC_BFDM_7410    (bfd_mach_ppc_7400)
4530
#define POWERPC_FLAG_7410    (POWERPC_FLAG_VRE | POWERPC_FLAG_SE |            \
4531
                              POWERPC_FLAG_BE | POWERPC_FLAG_PMM |            \
4532
                              POWERPC_FLAG_BUS_CLK)
4533
#define check_pow_7410       check_pow_hid0
4534

    
4535
static void init_proc_7410 (CPUPPCState *env)
4536
{
4537
    gen_spr_ne_601(env);
4538
    gen_spr_7xx(env);
4539
    /* Time base */
4540
    gen_tbl(env);
4541
    /* 74xx specific SPR */
4542
    gen_spr_74xx(env);
4543
    /* Thermal management */
4544
    gen_spr_thrm(env);
4545
    /* L2PMCR */
4546
    /* XXX : not implemented */
4547
    spr_register(env, SPR_L2PMCR, "L2PMCR",
4548
                 SPR_NOACCESS, SPR_NOACCESS,
4549
                 &spr_read_generic, &spr_write_generic,
4550
                 0x00000000);
4551
    /* LDSTDB */
4552
    /* XXX : not implemented */
4553
    spr_register(env, SPR_LDSTDB, "LDSTDB",
4554
                 SPR_NOACCESS, SPR_NOACCESS,
4555
                 &spr_read_generic, &spr_write_generic,
4556
                 0x00000000);
4557
    /* Memory management */
4558
    gen_low_BATs(env);
4559
    init_excp_7400(env);
4560
    env->dcache_line_size = 32;
4561
    env->icache_line_size = 32;
4562
    /* Allocate hardware IRQ controller */
4563
    ppc6xx_irq_init(env);
4564
}
4565

    
4566
/* PowerPC 7440 (aka G4)                                                     */
4567
#define POWERPC_INSNS_7440   (POWERPC_INSNS_WORKS | PPC_CACHE_DCBA |          \
4568
                              PPC_EXTERN | PPC_74xx_TLB | PPC_MEM_TLBIA |     \
4569
                              PPC_ALTIVEC)
4570
#define POWERPC_MSRM_7440    (0x000000000205FF77ULL)
4571
#define POWERPC_MMU_7440     (POWERPC_MMU_SOFT_74xx)
4572
#define POWERPC_EXCP_7440    (POWERPC_EXCP_74xx)
4573
#define POWERPC_INPUT_7440   (PPC_FLAGS_INPUT_6xx)
4574
#define POWERPC_BFDM_7440    (bfd_mach_ppc_7400)
4575
#define POWERPC_FLAG_7440    (POWERPC_FLAG_VRE | POWERPC_FLAG_SE |            \
4576
                              POWERPC_FLAG_BE | POWERPC_FLAG_PMM |            \
4577
                              POWERPC_FLAG_BUS_CLK)
4578
#define check_pow_7440       check_pow_hid0
4579

    
4580
__attribute__ (( unused ))
4581
static void init_proc_7440 (CPUPPCState *env)
4582
{
4583
    gen_spr_ne_601(env);
4584
    gen_spr_7xx(env);
4585
    /* Time base */
4586
    gen_tbl(env);
4587
    /* 74xx specific SPR */
4588
    gen_spr_74xx(env);
4589
    /* LDSTCR */
4590
    /* XXX : not implemented */
4591
    spr_register(env, SPR_LDSTCR, "LDSTCR",
4592
                 SPR_NOACCESS, SPR_NOACCESS,
4593
                 &spr_read_generic, &spr_write_generic,
4594
                 0x00000000);
4595
    /* ICTRL */
4596
    /* XXX : not implemented */
4597
    spr_register(env, SPR_ICTRL, "ICTRL",
4598
                 SPR_NOACCESS, SPR_NOACCESS,
4599
                 &spr_read_generic, &spr_write_generic,
4600
                 0x00000000);
4601
    /* MSSSR0 */
4602
    /* XXX : not implemented */
4603
    spr_register(env, SPR_MSSSR0, "MSSSR0",
4604
                 SPR_NOACCESS, SPR_NOACCESS,
4605
                 &spr_read_generic, &spr_write_generic,
4606
                 0x00000000);
4607
    /* PMC */
4608
    /* XXX : not implemented */
4609
    spr_register(env, SPR_PMC5, "PMC5",
4610
                 SPR_NOACCESS, SPR_NOACCESS,
4611
                 &spr_read_generic, &spr_write_generic,
4612
                 0x00000000);
4613
    /* XXX : not implemented */
4614
    spr_register(env, SPR_UPMC5, "UPMC5",
4615
                 &spr_read_ureg, SPR_NOACCESS,
4616
                 &spr_read_ureg, SPR_NOACCESS,
4617
                 0x00000000);
4618
    /* XXX : not implemented */
4619
    spr_register(env, SPR_PMC6, "PMC6",
4620
                 SPR_NOACCESS, SPR_NOACCESS,
4621
                 &spr_read_generic, &spr_write_generic,
4622
                 0x00000000);
4623
    /* XXX : not implemented */
4624
    spr_register(env, SPR_UPMC6, "UPMC6",
4625
                 &spr_read_ureg, SPR_NOACCESS,
4626
                 &spr_read_ureg, SPR_NOACCESS,
4627
                 0x00000000);
4628
    /* Memory management */
4629
    gen_low_BATs(env);
4630
    gen_74xx_soft_tlb(env, 128, 2);
4631
    init_excp_7450(env);
4632
    env->dcache_line_size = 32;
4633
    env->icache_line_size = 32;
4634
    /* Allocate hardware IRQ controller */
4635
    ppc6xx_irq_init(env);
4636
}
4637

    
4638
/* PowerPC 7450 (aka G4)                                                     */
4639
#define POWERPC_INSNS_7450   (POWERPC_INSNS_WORKS | PPC_CACHE_DCBA |          \
4640
                              PPC_EXTERN | PPC_74xx_TLB | PPC_MEM_TLBIA |     \
4641
                              PPC_ALTIVEC)
4642
#define POWERPC_MSRM_7450    (0x000000000205FF77ULL)
4643
#define POWERPC_MMU_7450     (POWERPC_MMU_SOFT_74xx)
4644
#define POWERPC_EXCP_7450    (POWERPC_EXCP_74xx)
4645
#define POWERPC_INPUT_7450   (PPC_FLAGS_INPUT_6xx)
4646
#define POWERPC_BFDM_7450    (bfd_mach_ppc_7400)
4647
#define POWERPC_FLAG_7450    (POWERPC_FLAG_VRE | POWERPC_FLAG_SE |            \
4648
                              POWERPC_FLAG_BE | POWERPC_FLAG_PMM |            \
4649
                              POWERPC_FLAG_BUS_CLK)
4650
#define check_pow_7450       check_pow_hid0
4651

    
4652
__attribute__ (( unused ))
4653
static void init_proc_7450 (CPUPPCState *env)
4654
{
4655
    gen_spr_ne_601(env);
4656
    gen_spr_7xx(env);
4657
    /* Time base */
4658
    gen_tbl(env);
4659
    /* 74xx specific SPR */
4660
    gen_spr_74xx(env);
4661
    /* Level 3 cache control */
4662
    gen_l3_ctrl(env);
4663
    /* LDSTCR */
4664
    /* XXX : not implemented */
4665
    spr_register(env, SPR_LDSTCR, "LDSTCR",
4666
                 SPR_NOACCESS, SPR_NOACCESS,
4667
                 &spr_read_generic, &spr_write_generic,
4668
                 0x00000000);
4669
    /* ICTRL */
4670
    /* XXX : not implemented */
4671
    spr_register(env, SPR_ICTRL, "ICTRL",
4672
                 SPR_NOACCESS, SPR_NOACCESS,
4673
                 &spr_read_generic, &spr_write_generic,
4674
                 0x00000000);
4675
    /* MSSSR0 */
4676
    /* XXX : not implemented */
4677
    spr_register(env, SPR_MSSSR0, "MSSSR0",
4678
                 SPR_NOACCESS, SPR_NOACCESS,
4679
                 &spr_read_generic, &spr_write_generic,
4680
                 0x00000000);
4681
    /* PMC */
4682
    /* XXX : not implemented */
4683
    spr_register(env, SPR_PMC5, "PMC5",
4684
                 SPR_NOACCESS, SPR_NOACCESS,
4685
                 &spr_read_generic, &spr_write_generic,
4686
                 0x00000000);
4687
    /* XXX : not implemented */
4688
    spr_register(env, SPR_UPMC5, "UPMC5",
4689
                 &spr_read_ureg, SPR_NOACCESS,
4690
                 &spr_read_ureg, SPR_NOACCESS,
4691
                 0x00000000);
4692
    /* XXX : not implemented */
4693
    spr_register(env, SPR_PMC6, "PMC6",
4694
                 SPR_NOACCESS, SPR_NOACCESS,
4695
                 &spr_read_generic, &spr_write_generic,
4696
                 0x00000000);
4697
    /* XXX : not implemented */
4698
    spr_register(env, SPR_UPMC6, "UPMC6",
4699
                 &spr_read_ureg, SPR_NOACCESS,
4700
                 &spr_read_ureg, SPR_NOACCESS,
4701
                 0x00000000);
4702
    /* Memory management */
4703
    gen_low_BATs(env);
4704
    gen_74xx_soft_tlb(env, 128, 2);
4705
    init_excp_7450(env);
4706
    env->dcache_line_size = 32;
4707
    env->icache_line_size = 32;
4708
    /* Allocate hardware IRQ controller */
4709
    ppc6xx_irq_init(env);
4710
}
4711

    
4712
/* PowerPC 7445 (aka G4)                                                     */
4713
#define POWERPC_INSNS_7445   (POWERPC_INSNS_WORKS | PPC_CACHE_DCBA |          \
4714
                              PPC_EXTERN | PPC_74xx_TLB | PPC_MEM_TLBIA |     \
4715
                              PPC_ALTIVEC)
4716
#define POWERPC_MSRM_7445    (0x000000000205FF77ULL)
4717
#define POWERPC_MMU_7445     (POWERPC_MMU_SOFT_74xx)
4718
#define POWERPC_EXCP_7445    (POWERPC_EXCP_74xx)
4719
#define POWERPC_INPUT_7445   (PPC_FLAGS_INPUT_6xx)
4720
#define POWERPC_BFDM_7445    (bfd_mach_ppc_7400)
4721
#define POWERPC_FLAG_7445    (POWERPC_FLAG_VRE | POWERPC_FLAG_SE |            \
4722
                              POWERPC_FLAG_BE | POWERPC_FLAG_PMM |            \
4723
                              POWERPC_FLAG_BUS_CLK)
4724
#define check_pow_7445       check_pow_hid0
4725

    
4726
__attribute__ (( unused ))
4727
static void init_proc_7445 (CPUPPCState *env)
4728
{
4729
    gen_spr_ne_601(env);
4730
    gen_spr_7xx(env);
4731
    /* Time base */
4732
    gen_tbl(env);
4733
    /* 74xx specific SPR */
4734
    gen_spr_74xx(env);
4735
    /* LDSTCR */
4736
    /* XXX : not implemented */
4737
    spr_register(env, SPR_LDSTCR, "LDSTCR",
4738
                 SPR_NOACCESS, SPR_NOACCESS,
4739
                 &spr_read_generic, &spr_write_generic,
4740
                 0x00000000);
4741
    /* ICTRL */
4742
    /* XXX : not implemented */
4743
    spr_register(env, SPR_ICTRL, "ICTRL",
4744
                 SPR_NOACCESS, SPR_NOACCESS,
4745
                 &spr_read_generic, &spr_write_generic,
4746
                 0x00000000);
4747
    /* MSSSR0 */
4748
    /* XXX : not implemented */
4749
    spr_register(env, SPR_MSSSR0, "MSSSR0",
4750
                 SPR_NOACCESS, SPR_NOACCESS,
4751
                 &spr_read_generic, &spr_write_generic,
4752
                 0x00000000);
4753
    /* PMC */
4754
    /* XXX : not implemented */
4755
    spr_register(env, SPR_PMC5, "PMC5",
4756
                 SPR_NOACCESS, SPR_NOACCESS,
4757
                 &spr_read_generic, &spr_write_generic,
4758
                 0x00000000);
4759
    /* XXX : not implemented */
4760
    spr_register(env, SPR_UPMC5, "UPMC5",
4761
                 &spr_read_ureg, SPR_NOACCESS,
4762
                 &spr_read_ureg, SPR_NOACCESS,
4763
                 0x00000000);
4764
    /* XXX : not implemented */
4765
    spr_register(env, SPR_PMC6, "PMC6",
4766
                 SPR_NOACCESS, SPR_NOACCESS,
4767
                 &spr_read_generic, &spr_write_generic,
4768
                 0x00000000);
4769
    /* XXX : not implemented */
4770
    spr_register(env, SPR_UPMC6, "UPMC6",
4771
                 &spr_read_ureg, SPR_NOACCESS,
4772
                 &spr_read_ureg, SPR_NOACCESS,
4773
                 0x00000000);
4774
    /* SPRGs */
4775
    spr_register(env, SPR_SPRG4, "SPRG4",
4776
                 SPR_NOACCESS, SPR_NOACCESS,
4777
                 &spr_read_generic, &spr_write_generic,
4778
                 0x00000000);
4779
    spr_register(env, SPR_USPRG4, "USPRG4",
4780
                 &spr_read_ureg, SPR_NOACCESS,
4781
                 &spr_read_ureg, SPR_NOACCESS,
4782
                 0x00000000);
4783
    spr_register(env, SPR_SPRG5, "SPRG5",
4784
                 SPR_NOACCESS, SPR_NOACCESS,
4785
                 &spr_read_generic, &spr_write_generic,
4786
                 0x00000000);
4787
    spr_register(env, SPR_USPRG5, "USPRG5",
4788
                 &spr_read_ureg, SPR_NOACCESS,
4789
                 &spr_read_ureg, SPR_NOACCESS,
4790
                 0x00000000);
4791
    spr_register(env, SPR_SPRG6, "SPRG6",
4792
                 SPR_NOACCESS, SPR_NOACCESS,
4793
                 &spr_read_generic, &spr_write_generic,
4794
                 0x00000000);
4795
    spr_register(env, SPR_USPRG6, "USPRG6",
4796
                 &spr_read_ureg, SPR_NOACCESS,
4797
                 &spr_read_ureg, SPR_NOACCESS,
4798
                 0x00000000);
4799
    spr_register(env, SPR_SPRG7, "SPRG7",
4800
                 SPR_NOACCESS, SPR_NOACCESS,
4801
                 &spr_read_generic, &spr_write_generic,
4802
                 0x00000000);
4803
    spr_register(env, SPR_USPRG7, "USPRG7",
4804
                 &spr_read_ureg, SPR_NOACCESS,
4805
                 &spr_read_ureg, SPR_NOACCESS,
4806
                 0x00000000);
4807
    /* Memory management */
4808
    gen_low_BATs(env);
4809
    gen_high_BATs(env);
4810
    gen_74xx_soft_tlb(env, 128, 2);
4811
    init_excp_7450(env);
4812
    env->dcache_line_size = 32;
4813
    env->icache_line_size = 32;
4814
    /* Allocate hardware IRQ controller */
4815
    ppc6xx_irq_init(env);
4816
}
4817

    
4818
/* PowerPC 7455 (aka G4)                                                     */
4819
#define POWERPC_INSNS_7455   (POWERPC_INSNS_WORKS | PPC_CACHE_DCBA |          \
4820
                              PPC_EXTERN | PPC_74xx_TLB | PPC_MEM_TLBIA |     \
4821
                              PPC_ALTIVEC)
4822
#define POWERPC_MSRM_7455    (0x000000000205FF77ULL)
4823
#define POWERPC_MMU_7455     (POWERPC_MMU_SOFT_74xx)
4824
#define POWERPC_EXCP_7455    (POWERPC_EXCP_74xx)
4825
#define POWERPC_INPUT_7455   (PPC_FLAGS_INPUT_6xx)
4826
#define POWERPC_BFDM_7455    (bfd_mach_ppc_7400)
4827
#define POWERPC_FLAG_7455    (POWERPC_FLAG_VRE | POWERPC_FLAG_SE |            \
4828
                              POWERPC_FLAG_BE | POWERPC_FLAG_PMM |            \
4829
                              POWERPC_FLAG_BUS_CLK)
4830
#define check_pow_7455       check_pow_hid0
4831

    
4832
__attribute__ (( unused ))
4833
static void init_proc_7455 (CPUPPCState *env)
4834
{
4835
    gen_spr_ne_601(env);
4836
    gen_spr_7xx(env);
4837
    /* Time base */
4838
    gen_tbl(env);
4839
    /* 74xx specific SPR */
4840
    gen_spr_74xx(env);
4841
    /* Level 3 cache control */
4842
    gen_l3_ctrl(env);
4843
    /* LDSTCR */
4844
    /* XXX : not implemented */
4845
    spr_register(env, SPR_LDSTCR, "LDSTCR",
4846
                 SPR_NOACCESS, SPR_NOACCESS,
4847
                 &spr_read_generic, &spr_write_generic,
4848
                 0x00000000);
4849
    /* ICTRL */
4850
    /* XXX : not implemented */
4851
    spr_register(env, SPR_ICTRL, "ICTRL",
4852
                 SPR_NOACCESS, SPR_NOACCESS,
4853
                 &spr_read_generic, &spr_write_generic,
4854
                 0x00000000);
4855
    /* MSSSR0 */
4856
    /* XXX : not implemented */
4857
    spr_register(env, SPR_MSSSR0, "MSSSR0",
4858
                 SPR_NOACCESS, SPR_NOACCESS,
4859
                 &spr_read_generic, &spr_write_generic,
4860
                 0x00000000);
4861
    /* PMC */
4862
    /* XXX : not implemented */
4863
    spr_register(env, SPR_PMC5, "PMC5",
4864
                 SPR_NOACCESS, SPR_NOACCESS,
4865
                 &spr_read_generic, &spr_write_generic,
4866
                 0x00000000);
4867
    /* XXX : not implemented */
4868
    spr_register(env, SPR_UPMC5, "UPMC5",
4869
                 &spr_read_ureg, SPR_NOACCESS,
4870
                 &spr_read_ureg, SPR_NOACCESS,
4871
                 0x00000000);
4872
    /* XXX : not implemented */
4873
    spr_register(env, SPR_PMC6, "PMC6",
4874
                 SPR_NOACCESS, SPR_NOACCESS,
4875
                 &spr_read_generic, &spr_write_generic,
4876
                 0x00000000);
4877
    /* XXX : not implemented */
4878
    spr_register(env, SPR_UPMC6, "UPMC6",
4879
                 &spr_read_ureg, SPR_NOACCESS,
4880
                 &spr_read_ureg, SPR_NOACCESS,
4881
                 0x00000000);
4882
    /* SPRGs */
4883
    spr_register(env, SPR_SPRG4, "SPRG4",
4884
                 SPR_NOACCESS, SPR_NOACCESS,
4885
                 &spr_read_generic, &spr_write_generic,
4886
                 0x00000000);
4887
    spr_register(env, SPR_USPRG4, "USPRG4",
4888
                 &spr_read_ureg, SPR_NOACCESS,
4889
                 &spr_read_ureg, SPR_NOACCESS,
4890
                 0x00000000);
4891
    spr_register(env, SPR_SPRG5, "SPRG5",
4892
                 SPR_NOACCESS, SPR_NOACCESS,
4893
                 &spr_read_generic, &spr_write_generic,
4894
                 0x00000000);
4895
    spr_register(env, SPR_USPRG5, "USPRG5",
4896
                 &spr_read_ureg, SPR_NOACCESS,
4897
                 &spr_read_ureg, SPR_NOACCESS,
4898
                 0x00000000);
4899
    spr_register(env, SPR_SPRG6, "SPRG6",
4900
                 SPR_NOACCESS, SPR_NOACCESS,
4901
                 &spr_read_generic, &spr_write_generic,
4902
                 0x00000000);
4903
    spr_register(env, SPR_USPRG6, "USPRG6",
4904
                 &spr_read_ureg, SPR_NOACCESS,
4905
                 &spr_read_ureg, SPR_NOACCESS,
4906
                 0x00000000);
4907
    spr_register(env, SPR_SPRG7, "SPRG7",
4908
                 SPR_NOACCESS, SPR_NOACCESS,
4909
                 &spr_read_generic, &spr_write_generic,
4910
                 0x00000000);
4911
    spr_register(env, SPR_USPRG7, "USPRG7",
4912
                 &spr_read_ureg, SPR_NOACCESS,
4913
                 &spr_read_ureg, SPR_NOACCESS,
4914
                 0x00000000);
4915
    /* Memory management */
4916
    gen_low_BATs(env);
4917
    gen_high_BATs(env);
4918
    gen_74xx_soft_tlb(env, 128, 2);
4919
    init_excp_7450(env);
4920
    env->dcache_line_size = 32;
4921
    env->icache_line_size = 32;
4922
    /* Allocate hardware IRQ controller */
4923
    ppc6xx_irq_init(env);
4924
}
4925

    
4926
#if defined (TARGET_PPC64)
4927
#define POWERPC_INSNS_WORK64  (POWERPC_INSNS_6xx | PPC_FLOAT_FSQRT |          \
4928
                               PPC_FLOAT_FRES | PPC_FLOAT_FRSQRTE |           \
4929
                               PPC_FLOAT_FSEL | PPC_FLOAT_STFIWX |            \
4930
                               PPC_MEM_TLBSYNC | PPC_CACHE_DCBZT | PPC_MFTB)
4931
/* PowerPC 970                                                               */
4932
#define POWERPC_INSNS_970    (POWERPC_INSNS_WORK64 | PPC_FLOAT_FSQRT |        \
4933
                              PPC_64B | PPC_ALTIVEC |                         \
4934
                              PPC_SEGMENT_64B | PPC_SLBI)
4935
#define POWERPC_MSRM_970     (0x900000000204FF36ULL)
4936
#define POWERPC_MMU_970      (POWERPC_MMU_64B)
4937
//#define POWERPC_EXCP_970     (POWERPC_EXCP_970)
4938
#define POWERPC_INPUT_970    (PPC_FLAGS_INPUT_970)
4939
#define POWERPC_BFDM_970     (bfd_mach_ppc64)
4940
#define POWERPC_FLAG_970     (POWERPC_FLAG_VRE | POWERPC_FLAG_SE |            \
4941
                              POWERPC_FLAG_BE | POWERPC_FLAG_PMM |            \
4942
                              POWERPC_FLAG_BUS_CLK)
4943

    
4944
#if defined(CONFIG_USER_ONLY)
4945
#define POWERPC970_HID5_INIT 0x00000080
4946
#else
4947
#define POWERPC970_HID5_INIT 0x00000000
4948
#endif
4949

    
4950
static int check_pow_970 (CPUPPCState *env)
4951
{
4952
    if (env->spr[SPR_HID0] & 0x00600000)
4953
        return 1;
4954

    
4955
    return 0;
4956
}
4957

    
4958
static void init_proc_970 (CPUPPCState *env)
4959
{
4960
    gen_spr_ne_601(env);
4961
    gen_spr_7xx(env);
4962
    /* Time base */
4963
    gen_tbl(env);
4964
    /* Hardware implementation registers */
4965
    /* XXX : not implemented */
4966
    spr_register(env, SPR_HID0, "HID0",
4967
                 SPR_NOACCESS, SPR_NOACCESS,
4968
                 &spr_read_generic, &spr_write_clear,
4969
                 0x60000000);
4970
    /* XXX : not implemented */
4971
    spr_register(env, SPR_HID1, "HID1",
4972
                 SPR_NOACCESS, SPR_NOACCESS,
4973
                 &spr_read_generic, &spr_write_generic,
4974
                 0x00000000);
4975
    /* XXX : not implemented */
4976
    spr_register(env, SPR_750_HID2, "HID2",
4977
                 SPR_NOACCESS, SPR_NOACCESS,
4978
                 &spr_read_generic, &spr_write_generic,
4979
                 0x00000000);
4980
    /* XXX : not implemented */
4981
    spr_register(env, SPR_970_HID5, "HID5",
4982
                 SPR_NOACCESS, SPR_NOACCESS,
4983
                 &spr_read_generic, &spr_write_generic,
4984
                 POWERPC970_HID5_INIT);
4985
    /* Memory management */
4986
    /* XXX: not correct */
4987
    gen_low_BATs(env);
4988
    /* XXX : not implemented */
4989
    spr_register(env, SPR_MMUCFG, "MMUCFG",
4990
                 SPR_NOACCESS, SPR_NOACCESS,
4991
                 &spr_read_generic, SPR_NOACCESS,
4992
                 0x00000000); /* TOFIX */
4993
    /* XXX : not implemented */
4994
    spr_register(env, SPR_MMUCSR0, "MMUCSR0",
4995
                 SPR_NOACCESS, SPR_NOACCESS,
4996
                 &spr_read_generic, &spr_write_generic,
4997
                 0x00000000); /* TOFIX */
4998
    spr_register(env, SPR_HIOR, "SPR_HIOR",
4999
                 SPR_NOACCESS, SPR_NOACCESS,
5000
                 &spr_read_generic, &spr_write_generic,
5001
                 0xFFF00000); /* XXX: This is a hack */
5002
#if !defined(CONFIG_USER_ONLY)
5003
    env->slb_nr = 32;
5004
#endif
5005
    init_excp_970(env);
5006
    env->dcache_line_size = 128;
5007
    env->icache_line_size = 128;
5008
    /* Allocate hardware IRQ controller */
5009
    ppc970_irq_init(env);
5010
}
5011

    
5012
/* PowerPC 970FX (aka G5)                                                    */
5013
#define POWERPC_INSNS_970FX  (POWERPC_INSNS_WORK64 | PPC_FLOAT_FSQRT |        \
5014
                              PPC_64B | PPC_ALTIVEC |                         \
5015
                              PPC_SEGMENT_64B | PPC_SLBI)
5016
#define POWERPC_MSRM_970FX   (0x800000000204FF36ULL)
5017
#define POWERPC_MMU_970FX    (POWERPC_MMU_64B)
5018
#define POWERPC_EXCP_970FX   (POWERPC_EXCP_970)
5019
#define POWERPC_INPUT_970FX  (PPC_FLAGS_INPUT_970)
5020
#define POWERPC_BFDM_970FX   (bfd_mach_ppc64)
5021
#define POWERPC_FLAG_970FX   (POWERPC_FLAG_VRE | POWERPC_FLAG_SE |            \
5022
                              POWERPC_FLAG_BE | POWERPC_FLAG_PMM |            \
5023
                              POWERPC_FLAG_BUS_CLK)
5024

    
5025
static int check_pow_970FX (CPUPPCState *env)
5026
{
5027
    if (env->spr[SPR_HID0] & 0x00600000)
5028
        return 1;
5029

    
5030
    return 0;
5031
}
5032

    
5033
static void init_proc_970FX (CPUPPCState *env)
5034
{
5035
    gen_spr_ne_601(env);
5036
    gen_spr_7xx(env);
5037
    /* Time base */
5038
    gen_tbl(env);
5039
    /* Hardware implementation registers */
5040
    /* XXX : not implemented */
5041
    spr_register(env, SPR_HID0, "HID0",
5042
                 SPR_NOACCESS, SPR_NOACCESS,
5043
                 &spr_read_generic, &spr_write_clear,
5044
                 0x60000000);
5045
    /* XXX : not implemented */
5046
    spr_register(env, SPR_HID1, "HID1",
5047
                 SPR_NOACCESS, SPR_NOACCESS,
5048
                 &spr_read_generic, &spr_write_generic,
5049
                 0x00000000);
5050
    /* XXX : not implemented */
5051
    spr_register(env, SPR_750_HID2, "HID2",
5052
                 SPR_NOACCESS, SPR_NOACCESS,
5053
                 &spr_read_generic, &spr_write_generic,
5054
                 0x00000000);
5055
    /* XXX : not implemented */
5056
    spr_register(env, SPR_970_HID5, "HID5",
5057
                 SPR_NOACCESS, SPR_NOACCESS,
5058
                 &spr_read_generic, &spr_write_generic,
5059
                 POWERPC970_HID5_INIT);
5060
    /* Memory management */
5061
    /* XXX: not correct */
5062
    gen_low_BATs(env);
5063
    /* XXX : not implemented */
5064
    spr_register(env, SPR_MMUCFG, "MMUCFG",
5065
                 SPR_NOACCESS, SPR_NOACCESS,
5066
                 &spr_read_generic, SPR_NOACCESS,
5067
                 0x00000000); /* TOFIX */
5068
    /* XXX : not implemented */
5069
    spr_register(env, SPR_MMUCSR0, "MMUCSR0",
5070
                 SPR_NOACCESS, SPR_NOACCESS,
5071
                 &spr_read_generic, &spr_write_generic,
5072
                 0x00000000); /* TOFIX */
5073
    spr_register(env, SPR_HIOR, "SPR_HIOR",
5074
                 SPR_NOACCESS, SPR_NOACCESS,
5075
                 &spr_read_generic, &spr_write_generic,
5076
                 0xFFF00000); /* XXX: This is a hack */
5077
#if !defined(CONFIG_USER_ONLY)
5078
    env->slb_nr = 32;
5079
#endif
5080
    init_excp_970(env);
5081
    env->dcache_line_size = 128;
5082
    env->icache_line_size = 128;
5083
    /* Allocate hardware IRQ controller */
5084
    ppc970_irq_init(env);
5085
}
5086

    
5087
/* PowerPC 970 GX                                                            */
5088
#define POWERPC_INSNS_970GX  (POWERPC_INSNS_WORK64 | PPC_FLOAT_FSQRT |        \
5089
                              PPC_64B | PPC_ALTIVEC |                         \
5090
                              PPC_SEGMENT_64B | PPC_SLBI)
5091
#define POWERPC_MSRM_970GX   (0x800000000204FF36ULL)
5092
#define POWERPC_MMU_970GX    (POWERPC_MMU_64B)
5093
#define POWERPC_EXCP_970GX   (POWERPC_EXCP_970)
5094
#define POWERPC_INPUT_970GX  (PPC_FLAGS_INPUT_970)
5095
#define POWERPC_BFDM_970GX   (bfd_mach_ppc64)
5096
#define POWERPC_FLAG_970GX   (POWERPC_FLAG_VRE | POWERPC_FLAG_SE |            \
5097
                              POWERPC_FLAG_BE | POWERPC_FLAG_PMM |            \
5098
                              POWERPC_FLAG_BUS_CLK)
5099

    
5100
static int check_pow_970GX (CPUPPCState *env)
5101
{
5102
    if (env->spr[SPR_HID0] & 0x00600000)
5103
        return 1;
5104

    
5105
    return 0;
5106
}
5107

    
5108
static void init_proc_970GX (CPUPPCState *env)
5109
{
5110
    gen_spr_ne_601(env);
5111
    gen_spr_7xx(env);
5112
    /* Time base */
5113
    gen_tbl(env);
5114
    /* Hardware implementation registers */
5115
    /* XXX : not implemented */
5116
    spr_register(env, SPR_HID0, "HID0",
5117
                 SPR_NOACCESS, SPR_NOACCESS,
5118
                 &spr_read_generic, &spr_write_clear,
5119
                 0x60000000);
5120
    /* XXX : not implemented */
5121
    spr_register(env, SPR_HID1, "HID1",
5122
                 SPR_NOACCESS, SPR_NOACCESS,
5123
                 &spr_read_generic, &spr_write_generic,
5124
                 0x00000000);
5125
    /* XXX : not implemented */
5126
    spr_register(env, SPR_750_HID2, "HID2",
5127
                 SPR_NOACCESS, SPR_NOACCESS,
5128
                 &spr_read_generic, &spr_write_generic,
5129
                 0x00000000);
5130
    /* XXX : not implemented */
5131
    spr_register(env, SPR_970_HID5, "HID5",
5132
                 SPR_NOACCESS, SPR_NOACCESS,
5133
                 &spr_read_generic, &spr_write_generic,
5134
                 POWERPC970_HID5_INIT);
5135
    /* Memory management */
5136
    /* XXX: not correct */
5137
    gen_low_BATs(env);
5138
    /* XXX : not implemented */
5139
    spr_register(env, SPR_MMUCFG, "MMUCFG",
5140
                 SPR_NOACCESS, SPR_NOACCESS,
5141
                 &spr_read_generic, SPR_NOACCESS,
5142
                 0x00000000); /* TOFIX */
5143
    /* XXX : not implemented */
5144
    spr_register(env, SPR_MMUCSR0, "MMUCSR0",
5145
                 SPR_NOACCESS, SPR_NOACCESS,
5146
                 &spr_read_generic, &spr_write_generic,
5147
                 0x00000000); /* TOFIX */
5148
    spr_register(env, SPR_HIOR, "SPR_HIOR",
5149
                 SPR_NOACCESS, SPR_NOACCESS,
5150
                 &spr_read_generic, &spr_write_generic,
5151
                 0xFFF00000); /* XXX: This is a hack */
5152
#if !defined(CONFIG_USER_ONLY)
5153
    env->slb_nr = 32;
5154
#endif
5155
    init_excp_970(env);
5156
    env->dcache_line_size = 128;
5157
    env->icache_line_size = 128;
5158
    /* Allocate hardware IRQ controller */
5159
    ppc970_irq_init(env);
5160
}
5161

    
5162
/* PowerPC 970 MP                                                            */
5163
#define POWERPC_INSNS_970MP  (POWERPC_INSNS_WORK64 | PPC_FLOAT_FSQRT |        \
5164
                              PPC_64B | PPC_ALTIVEC |                         \
5165
                              PPC_SEGMENT_64B | PPC_SLBI)
5166
#define POWERPC_MSRM_970MP   (0x900000000204FF36ULL)
5167
#define POWERPC_MMU_970MP    (POWERPC_MMU_64B)
5168
#define POWERPC_EXCP_970MP   (POWERPC_EXCP_970)
5169
#define POWERPC_INPUT_970MP  (PPC_FLAGS_INPUT_970)
5170
#define POWERPC_BFDM_970MP   (bfd_mach_ppc64)
5171
#define POWERPC_FLAG_970MP   (POWERPC_FLAG_VRE | POWERPC_FLAG_SE |            \
5172
                              POWERPC_FLAG_BE | POWERPC_FLAG_PMM |            \
5173
                              POWERPC_FLAG_BUS_CLK)
5174

    
5175
static int check_pow_970MP (CPUPPCState *env)
5176
{
5177
    if (env->spr[SPR_HID0] & 0x01C00000)
5178
        return 1;
5179

    
5180
    return 0;
5181
}
5182

    
5183
static void init_proc_970MP (CPUPPCState *env)
5184
{
5185
    gen_spr_ne_601(env);
5186
    gen_spr_7xx(env);
5187
    /* Time base */
5188
    gen_tbl(env);
5189
    /* Hardware implementation registers */
5190
    /* XXX : not implemented */
5191
    spr_register(env, SPR_HID0, "HID0",
5192
                 SPR_NOACCESS, SPR_NOACCESS,
5193
                 &spr_read_generic, &spr_write_clear,
5194
                 0x60000000);
5195
    /* XXX : not implemented */
5196
    spr_register(env, SPR_HID1, "HID1",
5197
                 SPR_NOACCESS, SPR_NOACCESS,
5198
                 &spr_read_generic, &spr_write_generic,
5199
                 0x00000000);
5200
    /* XXX : not implemented */
5201
    spr_register(env, SPR_750_HID2, "HID2",
5202
                 SPR_NOACCESS, SPR_NOACCESS,
5203
                 &spr_read_generic, &spr_write_generic,
5204
                 0x00000000);
5205
    /* XXX : not implemented */
5206
    spr_register(env, SPR_970_HID5, "HID5",
5207
                 SPR_NOACCESS, SPR_NOACCESS,
5208
                 &spr_read_generic, &spr_write_generic,
5209
                 POWERPC970_HID5_INIT);
5210
    /* Memory management */
5211
    /* XXX: not correct */
5212
    gen_low_BATs(env);
5213
    /* XXX : not implemented */
5214
    spr_register(env, SPR_MMUCFG, "MMUCFG",
5215
                 SPR_NOACCESS, SPR_NOACCESS,
5216
                 &spr_read_generic, SPR_NOACCESS,
5217
                 0x00000000); /* TOFIX */
5218
    /* XXX : not implemented */
5219
    spr_register(env, SPR_MMUCSR0, "MMUCSR0",
5220
                 SPR_NOACCESS, SPR_NOACCESS,
5221
                 &spr_read_generic, &spr_write_generic,
5222
                 0x00000000); /* TOFIX */
5223
    spr_register(env, SPR_HIOR, "SPR_HIOR",
5224
                 SPR_NOACCESS, SPR_NOACCESS,
5225
                 &spr_read_generic, &spr_write_generic,
5226
                 0xFFF00000); /* XXX: This is a hack */
5227
#if !defined(CONFIG_USER_ONLY)
5228
    env->slb_nr = 32;
5229
#endif
5230
    init_excp_970(env);
5231
    env->dcache_line_size = 128;
5232
    env->icache_line_size = 128;
5233
    /* Allocate hardware IRQ controller */
5234
    ppc970_irq_init(env);
5235
}
5236

    
5237
/* PowerPC 620                                                               */
5238
#define POWERPC_INSNS_620    (POWERPC_INSNS_WORKS | PPC_FLOAT_FSQRT |         \
5239
                              PPC_64B | PPC_SLBI)
5240
#define POWERPC_MSRM_620     (0x800000000005FF77ULL)
5241
//#define POWERPC_MMU_620      (POWERPC_MMU_620)
5242
#define POWERPC_EXCP_620     (POWERPC_EXCP_970)
5243
#define POWERPC_INPUT_620    (PPC_FLAGS_INPUT_6xx)
5244
#define POWERPC_BFDM_620     (bfd_mach_ppc64)
5245
#define POWERPC_FLAG_620     (POWERPC_FLAG_SE | POWERPC_FLAG_BE |            \
5246
                              POWERPC_FLAG_PMM | POWERPC_FLAG_BUS_CLK)
5247
#define check_pow_620        check_pow_nocheck /* Check this */
5248

    
5249
__attribute__ (( unused ))
5250
static void init_proc_620 (CPUPPCState *env)
5251
{
5252
    gen_spr_ne_601(env);
5253
    gen_spr_620(env);
5254
    /* Time base */
5255
    gen_tbl(env);
5256
    /* Hardware implementation registers */
5257
    /* XXX : not implemented */
5258
    spr_register(env, SPR_HID0, "HID0",
5259
                 SPR_NOACCESS, SPR_NOACCESS,
5260
                 &spr_read_generic, &spr_write_generic,
5261
                 0x00000000);
5262
    /* Memory management */
5263
    gen_low_BATs(env);
5264
    gen_high_BATs(env);
5265
    init_excp_620(env);
5266
    env->dcache_line_size = 64;
5267
    env->icache_line_size = 64;
5268
    /* Allocate hardware IRQ controller */
5269
    ppc6xx_irq_init(env);
5270
}
5271
#endif /* defined (TARGET_PPC64) */
5272

    
5273
/* Default 32 bits PowerPC target will be 604 */
5274
#define CPU_POWERPC_PPC32     CPU_POWERPC_604
5275
#define POWERPC_INSNS_PPC32   POWERPC_INSNS_604
5276
#define POWERPC_MSRM_PPC32    POWERPC_MSRM_604
5277
#define POWERPC_MMU_PPC32     POWERPC_MMU_604
5278
#define POWERPC_EXCP_PPC32    POWERPC_EXCP_604
5279
#define POWERPC_INPUT_PPC32   POWERPC_INPUT_604
5280
#define POWERPC_BFDM_PPC32    POWERPC_BFDM_604
5281
#define POWERPC_FLAG_PPC32    POWERPC_FLAG_604
5282
#define check_pow_PPC32       check_pow_604
5283
#define init_proc_PPC32       init_proc_604
5284

    
5285
/* Default 64 bits PowerPC target will be 970 FX */
5286
#define CPU_POWERPC_PPC64     CPU_POWERPC_970FX
5287
#define POWERPC_INSNS_PPC64   POWERPC_INSNS_970FX
5288
#define POWERPC_MSRM_PPC64    POWERPC_MSRM_970FX
5289
#define POWERPC_MMU_PPC64     POWERPC_MMU_970FX
5290
#define POWERPC_EXCP_PPC64    POWERPC_EXCP_970FX
5291
#define POWERPC_INPUT_PPC64   POWERPC_INPUT_970FX
5292
#define POWERPC_BFDM_PPC64    POWERPC_BFDM_970FX
5293
#define POWERPC_FLAG_PPC64    POWERPC_FLAG_970FX
5294
#define check_pow_PPC64       check_pow_970FX
5295
#define init_proc_PPC64       init_proc_970FX
5296

    
5297
/* Default PowerPC target will be PowerPC 32 */
5298
#if defined (TARGET_PPC64) && 0 // XXX: TODO
5299
#define CPU_POWERPC_DEFAULT   CPU_POWERPC_PPC64
5300
#define POWERPC_INSNS_DEFAULT POWERPC_INSNS_PPC64
5301
#define POWERPC_MSRM_DEFAULT  POWERPC_MSRM_PPC64
5302
#define POWERPC_MMU_DEFAULT   POWERPC_MMU_PPC64
5303
#define POWERPC_EXCP_DEFAULT  POWERPC_EXCP_PPC64
5304
#define POWERPC_INPUT_DEFAULT POWERPC_INPUT_PPC64
5305
#define POWERPC_BFDM_DEFAULT  POWERPC_BFDM_PPC64
5306
#define POWERPC_FLAG_DEFAULT  POWERPC_FLAG_PPC64
5307
#define check_pow_DEFAULT     check_pow_PPC64
5308
#define init_proc_DEFAULT     init_proc_PPC64
5309
#else
5310
#define CPU_POWERPC_DEFAULT   CPU_POWERPC_PPC32
5311
#define POWERPC_INSNS_DEFAULT POWERPC_INSNS_PPC32
5312
#define POWERPC_MSRM_DEFAULT  POWERPC_MSRM_PPC32
5313
#define POWERPC_MMU_DEFAULT   POWERPC_MMU_PPC32
5314
#define POWERPC_EXCP_DEFAULT  POWERPC_EXCP_PPC32
5315
#define POWERPC_INPUT_DEFAULT POWERPC_INPUT_PPC32
5316
#define POWERPC_BFDM_DEFAULT  POWERPC_BFDM_PPC32
5317
#define POWERPC_FLAG_DEFAULT  POWERPC_FLAG_PPC32
5318
#define check_pow_DEFAULT     check_pow_PPC32
5319
#define init_proc_DEFAULT     init_proc_PPC32
5320
#endif
5321

    
5322
/*****************************************************************************/
5323
/* PVR definitions for most known PowerPC                                    */
5324
enum {
5325
    /* PowerPC 401 family */
5326
    /* Generic PowerPC 401 */
5327
#define CPU_POWERPC_401              CPU_POWERPC_401G2
5328
    /* PowerPC 401 cores */
5329
    CPU_POWERPC_401A1              = 0x00210000,
5330
    CPU_POWERPC_401B2              = 0x00220000,
5331
#if 0
5332
    CPU_POWERPC_401B3              = xxx,
5333
#endif
5334
    CPU_POWERPC_401C2              = 0x00230000,
5335
    CPU_POWERPC_401D2              = 0x00240000,
5336
    CPU_POWERPC_401E2              = 0x00250000,
5337
    CPU_POWERPC_401F2              = 0x00260000,
5338
    CPU_POWERPC_401G2              = 0x00270000,
5339
    /* PowerPC 401 microcontrolers */
5340
#if 0
5341
    CPU_POWERPC_401GF              = xxx,
5342
#endif
5343
#define CPU_POWERPC_IOP480           CPU_POWERPC_401B2
5344
    /* IBM Processor for Network Resources */
5345
    CPU_POWERPC_COBRA              = 0x10100000, /* XXX: 405 ? */
5346
#if 0
5347
    CPU_POWERPC_XIPCHIP            = xxx,
5348
#endif
5349
    /* PowerPC 403 family */
5350
    /* Generic PowerPC 403 */
5351
#define CPU_POWERPC_403              CPU_POWERPC_403GC
5352
    /* PowerPC 403 microcontrollers */
5353
    CPU_POWERPC_403GA              = 0x00200011,
5354
    CPU_POWERPC_403GB              = 0x00200100,
5355
    CPU_POWERPC_403GC              = 0x00200200,
5356
    CPU_POWERPC_403GCX             = 0x00201400,
5357
#if 0
5358
    CPU_POWERPC_403GP              = xxx,
5359
#endif
5360
    /* PowerPC 405 family */
5361
    /* Generic PowerPC 405 */
5362
#define CPU_POWERPC_405              CPU_POWERPC_405D4
5363
    /* PowerPC 405 cores */
5364
#if 0
5365
    CPU_POWERPC_405A3              = xxx,
5366
#endif
5367
#if 0
5368
    CPU_POWERPC_405A4              = xxx,
5369
#endif
5370
#if 0
5371
    CPU_POWERPC_405B3              = xxx,
5372
#endif
5373
#if 0
5374
    CPU_POWERPC_405B4              = xxx,
5375
#endif
5376
#if 0
5377
    CPU_POWERPC_405C3              = xxx,
5378
#endif
5379
#if 0
5380
    CPU_POWERPC_405C4              = xxx,
5381
#endif
5382
    CPU_POWERPC_405D2              = 0x20010000,
5383
#if 0
5384
    CPU_POWERPC_405D3              = xxx,
5385
#endif
5386
    CPU_POWERPC_405D4              = 0x41810000,
5387
#if 0
5388
    CPU_POWERPC_405D5              = xxx,
5389
#endif
5390
#if 0
5391
    CPU_POWERPC_405E4              = xxx,
5392
#endif
5393
#if 0
5394
    CPU_POWERPC_405F4              = xxx,
5395
#endif
5396
#if 0
5397
    CPU_POWERPC_405F5              = xxx,
5398
#endif
5399
#if 0
5400
    CPU_POWERPC_405F6              = xxx,
5401
#endif
5402
    /* PowerPC 405 microcontrolers */
5403
    /* XXX: missing 0x200108a0 */
5404
#define CPU_POWERPC_405CR            CPU_POWERPC_405CRc
5405
    CPU_POWERPC_405CRa             = 0x40110041,
5406
    CPU_POWERPC_405CRb             = 0x401100C5,
5407
    CPU_POWERPC_405CRc             = 0x40110145,
5408
    CPU_POWERPC_405EP              = 0x51210950,
5409
#if 0
5410
    CPU_POWERPC_405EXr             = xxx,
5411
#endif
5412
    CPU_POWERPC_405EZ              = 0x41511460, /* 0x51210950 ? */
5413
#if 0
5414
    CPU_POWERPC_405FX              = xxx,
5415
#endif
5416
#define CPU_POWERPC_405GP            CPU_POWERPC_405GPd
5417
    CPU_POWERPC_405GPa             = 0x40110000,
5418
    CPU_POWERPC_405GPb             = 0x40110040,
5419
    CPU_POWERPC_405GPc             = 0x40110082,
5420
    CPU_POWERPC_405GPd             = 0x401100C4,
5421
#define CPU_POWERPC_405GPe           CPU_POWERPC_405CRc
5422
    CPU_POWERPC_405GPR             = 0x50910951,
5423
#if 0
5424
    CPU_POWERPC_405H               = xxx,
5425
#endif
5426
#if 0
5427
    CPU_POWERPC_405L               = xxx,
5428
#endif
5429
    CPU_POWERPC_405LP              = 0x41F10000,
5430
#if 0
5431
    CPU_POWERPC_405PM              = xxx,
5432
#endif
5433
#if 0
5434
    CPU_POWERPC_405PS              = xxx,
5435
#endif
5436
#if 0
5437
    CPU_POWERPC_405S               = xxx,
5438
#endif
5439
    /* IBM network processors */
5440
    CPU_POWERPC_NPE405H            = 0x414100C0,
5441
    CPU_POWERPC_NPE405H2           = 0x41410140,
5442
    CPU_POWERPC_NPE405L            = 0x416100C0,
5443
    CPU_POWERPC_NPE4GS3            = 0x40B10000,
5444
#if 0
5445
    CPU_POWERPC_NPCxx1             = xxx,
5446
#endif
5447
#if 0
5448
    CPU_POWERPC_NPR161             = xxx,
5449
#endif
5450
#if 0
5451
    CPU_POWERPC_LC77700            = xxx,
5452
#endif
5453
    /* IBM STBxxx (PowerPC 401/403/405 core based microcontrollers) */
5454
#if 0
5455
    CPU_POWERPC_STB01000           = xxx,
5456
#endif
5457
#if 0
5458
    CPU_POWERPC_STB01010           = xxx,
5459
#endif
5460
#if 0
5461
    CPU_POWERPC_STB0210            = xxx, /* 401B3 */
5462
#endif
5463
    CPU_POWERPC_STB03              = 0x40310000, /* 0x40130000 ? */
5464
#if 0
5465
    CPU_POWERPC_STB043             = xxx,
5466
#endif
5467
#if 0
5468
    CPU_POWERPC_STB045             = xxx,
5469
#endif
5470
    CPU_POWERPC_STB04              = 0x41810000,
5471
    CPU_POWERPC_STB25              = 0x51510950,
5472
#if 0
5473
    CPU_POWERPC_STB130             = xxx,
5474
#endif
5475
    /* Xilinx cores */
5476
    CPU_POWERPC_X2VP4              = 0x20010820,
5477
#define CPU_POWERPC_X2VP7            CPU_POWERPC_X2VP4
5478
    CPU_POWERPC_X2VP20             = 0x20010860,
5479
#define CPU_POWERPC_X2VP50           CPU_POWERPC_X2VP20
5480
#if 0
5481
    CPU_POWERPC_ZL10310            = xxx,
5482
#endif
5483
#if 0
5484
    CPU_POWERPC_ZL10311            = xxx,
5485
#endif
5486
#if 0
5487
    CPU_POWERPC_ZL10320            = xxx,
5488
#endif
5489
#if 0
5490
    CPU_POWERPC_ZL10321            = xxx,
5491
#endif
5492
    /* PowerPC 440 family */
5493
    /* Generic PowerPC 440 */
5494
#define CPU_POWERPC_440              CPU_POWERPC_440GXf
5495
    /* PowerPC 440 cores */
5496
#if 0
5497
    CPU_POWERPC_440A4              = xxx,
5498
#endif
5499
#if 0
5500
    CPU_POWERPC_440A5              = xxx,
5501
#endif
5502
#if 0
5503
    CPU_POWERPC_440B4              = xxx,
5504
#endif
5505
#if 0
5506
    CPU_POWERPC_440F5              = xxx,
5507
#endif
5508
#if 0
5509
    CPU_POWERPC_440G5              = xxx,
5510
#endif
5511
#if 0
5512
    CPU_POWERPC_440H4              = xxx,
5513
#endif
5514
#if 0
5515
    CPU_POWERPC_440H6              = xxx,
5516
#endif
5517
    /* PowerPC 440 microcontrolers */
5518
#define CPU_POWERPC_440EP            CPU_POWERPC_440EPb
5519
    CPU_POWERPC_440EPa             = 0x42221850,
5520
    CPU_POWERPC_440EPb             = 0x422218D3,
5521
#define CPU_POWERPC_440GP            CPU_POWERPC_440GPc
5522
    CPU_POWERPC_440GPb             = 0x40120440,
5523
    CPU_POWERPC_440GPc             = 0x40120481,
5524
#define CPU_POWERPC_440GR            CPU_POWERPC_440GRa
5525
#define CPU_POWERPC_440GRa           CPU_POWERPC_440EPb
5526
    CPU_POWERPC_440GRX             = 0x200008D0,
5527
#define CPU_POWERPC_440EPX           CPU_POWERPC_440GRX
5528
#define CPU_POWERPC_440GX            CPU_POWERPC_440GXf
5529
    CPU_POWERPC_440GXa             = 0x51B21850,
5530
    CPU_POWERPC_440GXb             = 0x51B21851,
5531
    CPU_POWERPC_440GXc             = 0x51B21892,
5532
    CPU_POWERPC_440GXf             = 0x51B21894,
5533
#if 0
5534
    CPU_POWERPC_440S               = xxx,
5535
#endif
5536
    CPU_POWERPC_440SP              = 0x53221850,
5537
    CPU_POWERPC_440SP2             = 0x53221891,
5538
    CPU_POWERPC_440SPE             = 0x53421890,
5539
    /* PowerPC 460 family */
5540
#if 0
5541
    /* Generic PowerPC 464 */
5542
#define CPU_POWERPC_464              CPU_POWERPC_464H90
5543
#endif
5544
    /* PowerPC 464 microcontrolers */
5545
#if 0
5546
    CPU_POWERPC_464H90             = xxx,
5547
#endif
5548
#if 0
5549
    CPU_POWERPC_464H90FP           = xxx,
5550
#endif
5551
    /* Freescale embedded PowerPC cores */
5552
    /* PowerPC MPC 5xx cores (aka RCPU) */
5553
    CPU_POWERPC_MPC5xx             = 0x00020020,
5554
#define CPU_POWERPC_MGT560           CPU_POWERPC_MPC5xx
5555
#define CPU_POWERPC_MPC509           CPU_POWERPC_MPC5xx
5556
#define CPU_POWERPC_MPC533           CPU_POWERPC_MPC5xx
5557
#define CPU_POWERPC_MPC534           CPU_POWERPC_MPC5xx
5558
#define CPU_POWERPC_MPC555           CPU_POWERPC_MPC5xx
5559
#define CPU_POWERPC_MPC556           CPU_POWERPC_MPC5xx
5560
#define CPU_POWERPC_MPC560           CPU_POWERPC_MPC5xx
5561
#define CPU_POWERPC_MPC561           CPU_POWERPC_MPC5xx
5562
#define CPU_POWERPC_MPC562           CPU_POWERPC_MPC5xx
5563
#define CPU_POWERPC_MPC563           CPU_POWERPC_MPC5xx
5564
#define CPU_POWERPC_MPC564           CPU_POWERPC_MPC5xx
5565
#define CPU_POWERPC_MPC565           CPU_POWERPC_MPC5xx
5566
#define CPU_POWERPC_MPC566           CPU_POWERPC_MPC5xx
5567
    /* PowerPC MPC 8xx cores (aka PowerQUICC) */
5568
    CPU_POWERPC_MPC8xx             = 0x00500000,
5569
#define CPU_POWERPC_MGT823           CPU_POWERPC_MPC8xx
5570
#define CPU_POWERPC_MPC821           CPU_POWERPC_MPC8xx
5571
#define CPU_POWERPC_MPC823           CPU_POWERPC_MPC8xx
5572
#define CPU_POWERPC_MPC850           CPU_POWERPC_MPC8xx
5573
#define CPU_POWERPC_MPC852T          CPU_POWERPC_MPC8xx
5574
#define CPU_POWERPC_MPC855T          CPU_POWERPC_MPC8xx
5575
#define CPU_POWERPC_MPC857           CPU_POWERPC_MPC8xx
5576
#define CPU_POWERPC_MPC859           CPU_POWERPC_MPC8xx
5577
#define CPU_POWERPC_MPC860           CPU_POWERPC_MPC8xx
5578
#define CPU_POWERPC_MPC862           CPU_POWERPC_MPC8xx
5579
#define CPU_POWERPC_MPC866           CPU_POWERPC_MPC8xx
5580
#define CPU_POWERPC_MPC870           CPU_POWERPC_MPC8xx
5581
#define CPU_POWERPC_MPC875           CPU_POWERPC_MPC8xx
5582
#define CPU_POWERPC_MPC880           CPU_POWERPC_MPC8xx
5583
#define CPU_POWERPC_MPC885           CPU_POWERPC_MPC8xx
5584
    /* G2 cores (aka PowerQUICC-II) */
5585
    CPU_POWERPC_G2                 = 0x00810011,
5586
    CPU_POWERPC_G2H4               = 0x80811010,
5587
    CPU_POWERPC_G2gp               = 0x80821010,
5588
    CPU_POWERPC_G2ls               = 0x90810010,
5589
    CPU_POWERPC_MPC603             = 0x00810100,
5590
    CPU_POWERPC_G2_HIP3            = 0x00810101,
5591
    CPU_POWERPC_G2_HIP4            = 0x80811014,
5592
    /*   G2_LE core (aka PowerQUICC-II) */
5593
    CPU_POWERPC_G2LE               = 0x80820010,
5594
    CPU_POWERPC_G2LEgp             = 0x80822010,
5595
    CPU_POWERPC_G2LEls             = 0xA0822010,
5596
    CPU_POWERPC_G2LEgp1            = 0x80822011,
5597
    CPU_POWERPC_G2LEgp3            = 0x80822013,
5598
    /* MPC52xx microcontrollers  */
5599
    /* XXX: MPC 5121 ? */
5600
#define CPU_POWERPC_MPC52xx          CPU_POWERPC_MPC5200
5601
#define CPU_POWERPC_MPC5200          CPU_POWERPC_MPC5200_v12
5602
#define CPU_POWERPC_MPC5200_v10      CPU_POWERPC_G2LEgp1
5603
#define CPU_POWERPC_MPC5200_v11      CPU_POWERPC_G2LEgp1
5604
#define CPU_POWERPC_MPC5200_v12      CPU_POWERPC_G2LEgp1
5605
#define CPU_POWERPC_MPC5200B         CPU_POWERPC_MPC5200B_v21
5606
#define CPU_POWERPC_MPC5200B_v20     CPU_POWERPC_G2LEgp1
5607
#define CPU_POWERPC_MPC5200B_v21     CPU_POWERPC_G2LEgp1
5608
    /* MPC82xx microcontrollers */
5609
#define CPU_POWERPC_MPC82xx          CPU_POWERPC_MPC8280
5610
#define CPU_POWERPC_MPC8240          CPU_POWERPC_MPC603
5611
#define CPU_POWERPC_MPC8241          CPU_POWERPC_G2_HIP4
5612
#define CPU_POWERPC_MPC8245          CPU_POWERPC_G2_HIP4
5613
#define CPU_POWERPC_MPC8247          CPU_POWERPC_G2LEgp3
5614
#define CPU_POWERPC_MPC8248          CPU_POWERPC_G2LEgp3
5615
#define CPU_POWERPC_MPC8250          CPU_POWERPC_MPC8250_HiP4
5616
#define CPU_POWERPC_MPC8250_HiP3     CPU_POWERPC_G2_HIP3
5617
#define CPU_POWERPC_MPC8250_HiP4     CPU_POWERPC_G2_HIP4
5618
#define CPU_POWERPC_MPC8255          CPU_POWERPC_MPC8255_HiP4
5619
#define CPU_POWERPC_MPC8255_HiP3     CPU_POWERPC_G2_HIP3
5620
#define CPU_POWERPC_MPC8255_HiP4     CPU_POWERPC_G2_HIP4
5621
#define CPU_POWERPC_MPC8260          CPU_POWERPC_MPC8260_HiP4
5622
#define CPU_POWERPC_MPC8260_HiP3     CPU_POWERPC_G2_HIP3
5623
#define CPU_POWERPC_MPC8260_HiP4     CPU_POWERPC_G2_HIP4
5624
#define CPU_POWERPC_MPC8264          CPU_POWERPC_MPC8264_HiP4
5625
#define CPU_POWERPC_MPC8264_HiP3     CPU_POWERPC_G2_HIP3
5626
#define CPU_POWERPC_MPC8264_HiP4     CPU_POWERPC_G2_HIP4
5627
#define CPU_POWERPC_MPC8265          CPU_POWERPC_MPC8265_HiP4
5628
#define CPU_POWERPC_MPC8265_HiP3     CPU_POWERPC_G2_HIP3
5629
#define CPU_POWERPC_MPC8265_HiP4     CPU_POWERPC_G2_HIP4
5630
#define CPU_POWERPC_MPC8266          CPU_POWERPC_MPC8266_HiP4
5631
#define CPU_POWERPC_MPC8266_HiP3     CPU_POWERPC_G2_HIP3
5632
#define CPU_POWERPC_MPC8266_HiP4     CPU_POWERPC_G2_HIP4
5633
#define CPU_POWERPC_MPC8270          CPU_POWERPC_G2LEgp3
5634
#define CPU_POWERPC_MPC8271          CPU_POWERPC_G2LEgp3
5635
#define CPU_POWERPC_MPC8272          CPU_POWERPC_G2LEgp3
5636
#define CPU_POWERPC_MPC8275          CPU_POWERPC_G2LEgp3
5637
#define CPU_POWERPC_MPC8280          CPU_POWERPC_G2LEgp3
5638
    /* e200 family */
5639
    /* e200 cores */
5640
#define CPU_POWERPC_e200             CPU_POWERPC_e200z6
5641
#if 0
5642
    CPU_POWERPC_e200z0             = xxx,
5643
#endif
5644
#if 0
5645
    CPU_POWERPC_e200z1             = xxx,
5646
#endif
5647
#if 0 /* ? */
5648
    CPU_POWERPC_e200z3             = 0x81120000,
5649
#endif
5650
    CPU_POWERPC_e200z5             = 0x81000000,
5651
    CPU_POWERPC_e200z6             = 0x81120000,
5652
    /* MPC55xx microcontrollers */
5653
#define CPU_POWERPC_MPC55xx          CPU_POWERPC_MPC5567
5654
#if 0
5655
#define CPU_POWERPC_MPC5514E         CPU_POWERPC_MPC5514E_v1
5656
#define CPU_POWERPC_MPC5514E_v0      CPU_POWERPC_e200z0
5657
#define CPU_POWERPC_MPC5514E_v1      CPU_POWERPC_e200z1
5658
#define CPU_POWERPC_MPC5514G         CPU_POWERPC_MPC5514G_v1
5659
#define CPU_POWERPC_MPC5514G_v0      CPU_POWERPC_e200z0
5660
#define CPU_POWERPC_MPC5514G_v1      CPU_POWERPC_e200z1
5661
#define CPU_POWERPC_MPC5515S         CPU_POWERPC_e200z1
5662
#define CPU_POWERPC_MPC5516E         CPU_POWERPC_MPC5516E_v1
5663
#define CPU_POWERPC_MPC5516E_v0      CPU_POWERPC_e200z0
5664
#define CPU_POWERPC_MPC5516E_v1      CPU_POWERPC_e200z1
5665
#define CPU_POWERPC_MPC5516G         CPU_POWERPC_MPC5516G_v1
5666
#define CPU_POWERPC_MPC5516G_v0      CPU_POWERPC_e200z0
5667
#define CPU_POWERPC_MPC5516G_v1      CPU_POWERPC_e200z1
5668
#define CPU_POWERPC_MPC5516S         CPU_POWERPC_e200z1
5669
#endif
5670
#if 0
5671
#define CPU_POWERPC_MPC5533          CPU_POWERPC_e200z3
5672
#define CPU_POWERPC_MPC5534          CPU_POWERPC_e200z3
5673
#endif
5674
#define CPU_POWERPC_MPC5553          CPU_POWERPC_e200z6
5675
#define CPU_POWERPC_MPC5554          CPU_POWERPC_e200z6
5676
#define CPU_POWERPC_MPC5561          CPU_POWERPC_e200z6
5677
#define CPU_POWERPC_MPC5565          CPU_POWERPC_e200z6
5678
#define CPU_POWERPC_MPC5566          CPU_POWERPC_e200z6
5679
#define CPU_POWERPC_MPC5567          CPU_POWERPC_e200z6
5680
    /* e300 family */
5681
    /* e300 cores */
5682
#define CPU_POWERPC_e300             CPU_POWERPC_e300c3
5683
    CPU_POWERPC_e300c1             = 0x00830010,
5684
    CPU_POWERPC_e300c2             = 0x00840010,
5685
    CPU_POWERPC_e300c3             = 0x00850010,
5686
    CPU_POWERPC_e300c4             = 0x00860010,
5687
    /* MPC83xx microcontrollers */
5688
#define CPU_POWERPC_MPC8313          CPU_POWERPC_e300c3
5689
#define CPU_POWERPC_MPC8313E         CPU_POWERPC_e300c3
5690
#define CPU_POWERPC_MPC8314          CPU_POWERPC_e300c3
5691
#define CPU_POWERPC_MPC8314E         CPU_POWERPC_e300c3
5692
#define CPU_POWERPC_MPC8315          CPU_POWERPC_e300c3
5693
#define CPU_POWERPC_MPC8315E         CPU_POWERPC_e300c3
5694
#define CPU_POWERPC_MPC8321          CPU_POWERPC_e300c2
5695
#define CPU_POWERPC_MPC8321E         CPU_POWERPC_e300c2
5696
#define CPU_POWERPC_MPC8323          CPU_POWERPC_e300c2
5697
#define CPU_POWERPC_MPC8323E         CPU_POWERPC_e300c2
5698
#define CPU_POWERPC_MPC8343A         CPU_POWERPC_e300c1
5699
#define CPU_POWERPC_MPC8343EA        CPU_POWERPC_e300c1
5700
#define CPU_POWERPC_MPC8347A         CPU_POWERPC_e300c1
5701
#define CPU_POWERPC_MPC8347AT        CPU_POWERPC_e300c1
5702
#define CPU_POWERPC_MPC8347AP        CPU_POWERPC_e300c1
5703
#define CPU_POWERPC_MPC8347EA        CPU_POWERPC_e300c1
5704
#define CPU_POWERPC_MPC8347EAT       CPU_POWERPC_e300c1
5705
#define CPU_POWERPC_MPC8347EAP       CPU_POWERPC_e300c1
5706
#define CPU_POWERPC_MPC8349          CPU_POWERPC_e300c1
5707
#define CPU_POWERPC_MPC8349A         CPU_POWERPC_e300c1
5708
#define CPU_POWERPC_MPC8349E         CPU_POWERPC_e300c1
5709
#define CPU_POWERPC_MPC8349EA        CPU_POWERPC_e300c1
5710
#define CPU_POWERPC_MPC8358E         CPU_POWERPC_e300c1
5711
#define CPU_POWERPC_MPC8360E         CPU_POWERPC_e300c1
5712
#define CPU_POWERPC_MPC8377          CPU_POWERPC_e300c4
5713
#define CPU_POWERPC_MPC8377E         CPU_POWERPC_e300c4
5714
#define CPU_POWERPC_MPC8378          CPU_POWERPC_e300c4
5715
#define CPU_POWERPC_MPC8378E         CPU_POWERPC_e300c4
5716
#define CPU_POWERPC_MPC8379          CPU_POWERPC_e300c4
5717
#define CPU_POWERPC_MPC8379E         CPU_POWERPC_e300c4
5718
    /* e500 family */
5719
    /* e500 cores  */
5720
#define CPU_POWERPC_e500             CPU_POWERPC_e500v2_v22
5721
#define CPU_POWERPC_e500v2           CPU_POWERPC_e500v2_v22
5722
    CPU_POWERPC_e500_v10           = 0x80200010,
5723
    CPU_POWERPC_e500_v20           = 0x80200020,
5724
    CPU_POWERPC_e500v2_v10         = 0x80210010,
5725
    CPU_POWERPC_e500v2_v11         = 0x80210011,
5726
    CPU_POWERPC_e500v2_v20         = 0x80210020,
5727
    CPU_POWERPC_e500v2_v21         = 0x80210021,
5728
    CPU_POWERPC_e500v2_v22         = 0x80210022,
5729
    CPU_POWERPC_e500v2_v30         = 0x80210030,
5730
    /* MPC85xx microcontrollers */
5731
#define CPU_POWERPC_MPC8533          CPU_POWERPC_MPC8533_v11
5732
#define CPU_POWERPC_MPC8533_v10      CPU_POWERPC_e500v2_v21
5733
#define CPU_POWERPC_MPC8533_v11      CPU_POWERPC_e500v2_v22
5734
#define CPU_POWERPC_MPC8533E         CPU_POWERPC_MPC8533E_v11
5735
#define CPU_POWERPC_MPC8533E_v10     CPU_POWERPC_e500v2_v21
5736
#define CPU_POWERPC_MPC8533E_v11     CPU_POWERPC_e500v2_v22
5737
#define CPU_POWERPC_MPC8540          CPU_POWERPC_MPC8540_v21
5738
#define CPU_POWERPC_MPC8540_v10      CPU_POWERPC_e500_v10
5739
#define CPU_POWERPC_MPC8540_v20      CPU_POWERPC_e500_v20
5740
#define CPU_POWERPC_MPC8540_v21      CPU_POWERPC_e500_v20
5741
#define CPU_POWERPC_MPC8541          CPU_POWERPC_MPC8541_v11
5742
#define CPU_POWERPC_MPC8541_v10      CPU_POWERPC_e500_v20
5743
#define CPU_POWERPC_MPC8541_v11      CPU_POWERPC_e500_v20
5744
#define CPU_POWERPC_MPC8541E         CPU_POWERPC_MPC8541E_v11
5745
#define CPU_POWERPC_MPC8541E_v10     CPU_POWERPC_e500_v20
5746
#define CPU_POWERPC_MPC8541E_v11     CPU_POWERPC_e500_v20
5747
#define CPU_POWERPC_MPC8543          CPU_POWERPC_MPC8543_v21
5748
#define CPU_POWERPC_MPC8543_v10      CPU_POWERPC_e500v2_v10
5749
#define CPU_POWERPC_MPC8543_v11      CPU_POWERPC_e500v2_v11
5750
#define CPU_POWERPC_MPC8543_v20      CPU_POWERPC_e500v2_v20
5751
#define CPU_POWERPC_MPC8543_v21      CPU_POWERPC_e500v2_v21
5752
#define CPU_POWERPC_MPC8543E         CPU_POWERPC_MPC8543E_v21
5753
#define CPU_POWERPC_MPC8543E_v10     CPU_POWERPC_e500v2_v10
5754
#define CPU_POWERPC_MPC8543E_v11     CPU_POWERPC_e500v2_v11
5755
#define CPU_POWERPC_MPC8543E_v20     CPU_POWERPC_e500v2_v20
5756
#define CPU_POWERPC_MPC8543E_v21     CPU_POWERPC_e500v2_v21
5757
#define CPU_POWERPC_MPC8544          CPU_POWERPC_MPC8544_v11
5758
#define CPU_POWERPC_MPC8544_v10      CPU_POWERPC_e500v2_v21
5759
#define CPU_POWERPC_MPC8544_v11      CPU_POWERPC_e500v2_v22
5760
#define CPU_POWERPC_MPC8544E_v11     CPU_POWERPC_e500v2_v22
5761
#define CPU_POWERPC_MPC8544E         CPU_POWERPC_MPC8544E_v11
5762
#define CPU_POWERPC_MPC8544E_v10     CPU_POWERPC_e500v2_v21
5763
#define CPU_POWERPC_MPC8545          CPU_POWERPC_MPC8545_v21
5764
#define CPU_POWERPC_MPC8545_v10      CPU_POWERPC_e500v2_v10
5765
#define CPU_POWERPC_MPC8545_v20      CPU_POWERPC_e500v2_v20
5766
#define CPU_POWERPC_MPC8545_v21      CPU_POWERPC_e500v2_v21
5767
#define CPU_POWERPC_MPC8545E         CPU_POWERPC_MPC8545E_v21
5768
#define CPU_POWERPC_MPC8545E_v10     CPU_POWERPC_e500v2_v10
5769
#define CPU_POWERPC_MPC8545E_v20     CPU_POWERPC_e500v2_v20
5770
#define CPU_POWERPC_MPC8545E_v21     CPU_POWERPC_e500v2_v21
5771
#define CPU_POWERPC_MPC8547E         CPU_POWERPC_MPC8545E_v21
5772
#define CPU_POWERPC_MPC8547E_v10     CPU_POWERPC_e500v2_v10
5773
#define CPU_POWERPC_MPC8547E_v20     CPU_POWERPC_e500v2_v20
5774
#define CPU_POWERPC_MPC8547E_v21     CPU_POWERPC_e500v2_v21
5775
#define CPU_POWERPC_MPC8548          CPU_POWERPC_MPC8548_v21
5776
#define CPU_POWERPC_MPC8548_v10      CPU_POWERPC_e500v2_v10
5777
#define CPU_POWERPC_MPC8548_v11      CPU_POWERPC_e500v2_v11
5778
#define CPU_POWERPC_MPC8548_v20      CPU_POWERPC_e500v2_v20
5779
#define CPU_POWERPC_MPC8548_v21      CPU_POWERPC_e500v2_v21
5780
#define CPU_POWERPC_MPC8548E         CPU_POWERPC_MPC8548E_v21
5781
#define CPU_POWERPC_MPC8548E_v10     CPU_POWERPC_e500v2_v10
5782
#define CPU_POWERPC_MPC8548E_v11     CPU_POWERPC_e500v2_v11
5783
#define CPU_POWERPC_MPC8548E_v20     CPU_POWERPC_e500v2_v20
5784
#define CPU_POWERPC_MPC8548E_v21     CPU_POWERPC_e500v2_v21
5785
#define CPU_POWERPC_MPC8555          CPU_POWERPC_MPC8555_v11
5786
#define CPU_POWERPC_MPC8555_v10      CPU_POWERPC_e500v2_v10
5787
#define CPU_POWERPC_MPC8555_v11      CPU_POWERPC_e500v2_v11
5788
#define CPU_POWERPC_MPC8555E         CPU_POWERPC_MPC8555E_v11
5789
#define CPU_POWERPC_MPC8555E_v10     CPU_POWERPC_e500v2_v10
5790
#define CPU_POWERPC_MPC8555E_v11     CPU_POWERPC_e500v2_v11
5791
#define CPU_POWERPC_MPC8560          CPU_POWERPC_MPC8560_v21
5792
#define CPU_POWERPC_MPC8560_v10      CPU_POWERPC_e500v2_v10
5793
#define CPU_POWERPC_MPC8560_v20      CPU_POWERPC_e500v2_v20
5794
#define CPU_POWERPC_MPC8560_v21      CPU_POWERPC_e500v2_v21
5795
#define CPU_POWERPC_MPC8567          CPU_POWERPC_e500v2_v22
5796
#define CPU_POWERPC_MPC8567E         CPU_POWERPC_e500v2_v22
5797
#define CPU_POWERPC_MPC8568          CPU_POWERPC_e500v2_v22
5798
#define CPU_POWERPC_MPC8568E         CPU_POWERPC_e500v2_v22
5799
#define CPU_POWERPC_MPC8572          CPU_POWERPC_e500v2_v30
5800
#define CPU_POWERPC_MPC8572E         CPU_POWERPC_e500v2_v30
5801
    /* e600 family */
5802
    /* e600 cores */
5803
    CPU_POWERPC_e600               = 0x80040010,
5804
    /* MPC86xx microcontrollers */
5805
#define CPU_POWERPC_MPC8610          CPU_POWERPC_e600
5806
#define CPU_POWERPC_MPC8641          CPU_POWERPC_e600
5807
#define CPU_POWERPC_MPC8641D         CPU_POWERPC_e600
5808
    /* PowerPC 6xx cores */
5809
#define CPU_POWERPC_601              CPU_POWERPC_601_v2
5810
    CPU_POWERPC_601_v0             = 0x00010001,
5811
    CPU_POWERPC_601_v1             = 0x00010001,
5812
    CPU_POWERPC_601_v2             = 0x00010002,
5813
    CPU_POWERPC_602                = 0x00050100,
5814
    CPU_POWERPC_603                = 0x00030100,
5815
#define CPU_POWERPC_603E             CPU_POWERPC_603E_v41
5816
    CPU_POWERPC_603E_v11           = 0x00060101,
5817
    CPU_POWERPC_603E_v12           = 0x00060102,
5818
    CPU_POWERPC_603E_v13           = 0x00060103,
5819
    CPU_POWERPC_603E_v14           = 0x00060104,
5820
    CPU_POWERPC_603E_v22           = 0x00060202,
5821
    CPU_POWERPC_603E_v3            = 0x00060300,
5822
    CPU_POWERPC_603E_v4            = 0x00060400,
5823
    CPU_POWERPC_603E_v41           = 0x00060401,
5824
    CPU_POWERPC_603E7t             = 0x00071201,
5825
    CPU_POWERPC_603E7v             = 0x00070100,
5826
    CPU_POWERPC_603E7v1            = 0x00070101,
5827
    CPU_POWERPC_603E7v2            = 0x00070201,
5828
    CPU_POWERPC_603E7              = 0x00070200,
5829
    CPU_POWERPC_603P               = 0x00070000,
5830
#define CPU_POWERPC_603R             CPU_POWERPC_603E7t
5831
    /* XXX: missing 0x00040303 (604) */
5832
    CPU_POWERPC_604                = 0x00040103,
5833
#define CPU_POWERPC_604E             CPU_POWERPC_604E_v24
5834
    /* XXX: missing 0x00091203 */
5835
    /* XXX: missing 0x00092110 */
5836
    /* XXX: missing 0x00092120 */
5837
    CPU_POWERPC_604E_v10           = 0x00090100,
5838
    CPU_POWERPC_604E_v22           = 0x00090202,
5839
    CPU_POWERPC_604E_v24           = 0x00090204,
5840
    /* XXX: missing 0x000a0100 */
5841
    /* XXX: missing 0x00093102 */
5842
    CPU_POWERPC_604R               = 0x000a0101,
5843
#if 0
5844
    CPU_POWERPC_604EV              = xxx, /* XXX: same as 604R ? */
5845
#endif
5846
    /* PowerPC 740/750 cores (aka G3) */
5847
    /* XXX: missing 0x00084202 */
5848
#define CPU_POWERPC_7x0              CPU_POWERPC_7x0_v31
5849
    CPU_POWERPC_7x0_v20            = 0x00080200,
5850
    CPU_POWERPC_7x0_v21            = 0x00080201,
5851
    CPU_POWERPC_7x0_v22            = 0x00080202,
5852
    CPU_POWERPC_7x0_v30            = 0x00080300,
5853
    CPU_POWERPC_7x0_v31            = 0x00080301,
5854
    CPU_POWERPC_740E               = 0x00080100,
5855
    CPU_POWERPC_7x0P               = 0x10080000,
5856
    /* XXX: missing 0x00087010 (CL ?) */
5857
    CPU_POWERPC_750CL              = 0x00087200,
5858
#define CPU_POWERPC_750CX            CPU_POWERPC_750CX_v22
5859
    CPU_POWERPC_750CX_v21          = 0x00082201,
5860
    CPU_POWERPC_750CX_v22          = 0x00082202,
5861
#define CPU_POWERPC_750CXE           CPU_POWERPC_750CXE_v31b
5862
    CPU_POWERPC_750CXE_v21         = 0x00082211,
5863
    CPU_POWERPC_750CXE_v22         = 0x00082212,
5864
    CPU_POWERPC_750CXE_v23         = 0x00082213,
5865
    CPU_POWERPC_750CXE_v24         = 0x00082214,
5866
    CPU_POWERPC_750CXE_v24b        = 0x00083214,
5867
    CPU_POWERPC_750CXE_v31         = 0x00083211,
5868
    CPU_POWERPC_750CXE_v31b        = 0x00083311,
5869
    CPU_POWERPC_750CXR             = 0x00083410,
5870
    CPU_POWERPC_750E               = 0x00080200,
5871
    CPU_POWERPC_750FL              = 0x700A0203,
5872
#define CPU_POWERPC_750FX            CPU_POWERPC_750FX_v23
5873
    CPU_POWERPC_750FX_v10          = 0x70000100,
5874
    CPU_POWERPC_750FX_v20          = 0x70000200,
5875
    CPU_POWERPC_750FX_v21          = 0x70000201,
5876
    CPU_POWERPC_750FX_v22          = 0x70000202,
5877
    CPU_POWERPC_750FX_v23          = 0x70000203,
5878
    CPU_POWERPC_750GL              = 0x70020102,
5879
#define CPU_POWERPC_750GX            CPU_POWERPC_750GX_v12
5880
    CPU_POWERPC_750GX_v10          = 0x70020100,
5881
    CPU_POWERPC_750GX_v11          = 0x70020101,
5882
    CPU_POWERPC_750GX_v12          = 0x70020102,
5883
#define CPU_POWERPC_750L             CPU_POWERPC_750L_v32 /* Aka LoneStar */
5884
    CPU_POWERPC_750L_v22           = 0x00088202,
5885
    CPU_POWERPC_750L_v30           = 0x00088300,
5886
    CPU_POWERPC_750L_v32           = 0x00088302,
5887
    /* PowerPC 745/755 cores */
5888
#define CPU_POWERPC_7x5              CPU_POWERPC_7x5_v28
5889
    CPU_POWERPC_7x5_v10            = 0x00083100,
5890
    CPU_POWERPC_7x5_v11            = 0x00083101,
5891
    CPU_POWERPC_7x5_v20            = 0x00083200,
5892
    CPU_POWERPC_7x5_v21            = 0x00083201,
5893
    CPU_POWERPC_7x5_v22            = 0x00083202, /* aka D */
5894
    CPU_POWERPC_7x5_v23            = 0x00083203, /* aka E */
5895
    CPU_POWERPC_7x5_v24            = 0x00083204,
5896
    CPU_POWERPC_7x5_v25            = 0x00083205,
5897
    CPU_POWERPC_7x5_v26            = 0x00083206,
5898
    CPU_POWERPC_7x5_v27            = 0x00083207,
5899
    CPU_POWERPC_7x5_v28            = 0x00083208,
5900
#if 0
5901
    CPU_POWERPC_7x5P               = xxx,
5902
#endif
5903
    /* PowerPC 74xx cores (aka G4) */
5904
    /* XXX: missing 0x000C1101 */
5905
#define CPU_POWERPC_7400             CPU_POWERPC_7400_v29
5906
    CPU_POWERPC_7400_v10           = 0x000C0100,
5907
    CPU_POWERPC_7400_v11           = 0x000C0101,
5908
    CPU_POWERPC_7400_v20           = 0x000C0200,
5909
    CPU_POWERPC_7400_v22           = 0x000C0202,
5910
    CPU_POWERPC_7400_v26           = 0x000C0206,
5911
    CPU_POWERPC_7400_v27           = 0x000C0207,
5912
    CPU_POWERPC_7400_v28           = 0x000C0208,
5913
    CPU_POWERPC_7400_v29           = 0x000C0209,
5914
#define CPU_POWERPC_7410             CPU_POWERPC_7410_v14
5915
    CPU_POWERPC_7410_v10           = 0x800C1100,
5916
    CPU_POWERPC_7410_v11           = 0x800C1101,
5917
    CPU_POWERPC_7410_v12           = 0x800C1102, /* aka C */
5918
    CPU_POWERPC_7410_v13           = 0x800C1103, /* aka D */
5919
    CPU_POWERPC_7410_v14           = 0x800C1104, /* aka E */
5920
#define CPU_POWERPC_7448             CPU_POWERPC_7448_v21
5921
    CPU_POWERPC_7448_v10           = 0x80040100,
5922
    CPU_POWERPC_7448_v11           = 0x80040101,
5923
    CPU_POWERPC_7448_v20           = 0x80040200,
5924
    CPU_POWERPC_7448_v21           = 0x80040201,
5925
#define CPU_POWERPC_7450             CPU_POWERPC_7450_v21
5926
    CPU_POWERPC_7450_v10           = 0x80000100,
5927
    CPU_POWERPC_7450_v11           = 0x80000101,
5928
    CPU_POWERPC_7450_v12           = 0x80000102,
5929
    CPU_POWERPC_7450_v20           = 0x80000200, /* aka D: 2.04 */
5930
    CPU_POWERPC_7450_v21           = 0x80000201, /* aka E */
5931
    CPU_POWERPC_74x1               = 0x80000203,
5932
    CPU_POWERPC_74x1G              = 0x80000210, /* aka G: 2.3 */
5933
#define CPU_POWERPC_74x5             CPU_POWERPC_74x5_v32
5934
    CPU_POWERPC_74x5_v10           = 0x80010100,
5935
    /* XXX: missing 0x80010200 */
5936
    CPU_POWERPC_74x5_v21           = 0x80010201, /* aka C: 2.1 */
5937
    CPU_POWERPC_74x5_v32           = 0x80010302,
5938
    CPU_POWERPC_74x5_v33           = 0x80010303, /* aka F: 3.3 */
5939
    CPU_POWERPC_74x5_v34           = 0x80010304, /* aka G: 3.4 */
5940
#define CPU_POWERPC_74x7             CPU_POWERPC_74x7_v12
5941
    /* XXX: is 0x8002xxxx 7447 and 0x8003xxxx 7457 ? */
5942
    /* XXX: missing 0x80030102 */
5943
    /* XXX: missing 0x80020101 */
5944
    CPU_POWERPC_74x7_v10           = 0x80020100, /* aka A: 1.0 */
5945
    CPU_POWERPC_74x7_v11           = 0x80030101, /* aka B: 1.1 */
5946
    CPU_POWERPC_74x7_v12           = 0x80020102, /* aka C: 1.2 */
5947
    /* 64 bits PowerPC */
5948
#if defined(TARGET_PPC64)
5949
    CPU_POWERPC_620                = 0x00140000,
5950
    CPU_POWERPC_630                = 0x00400000,
5951
    CPU_POWERPC_631                = 0x00410104,
5952
    CPU_POWERPC_POWER4             = 0x00350000,
5953
    CPU_POWERPC_POWER4P            = 0x00380000,
5954
     /* XXX: missing 0x003A0201 */
5955
    CPU_POWERPC_POWER5             = 0x003A0203,
5956
#define CPU_POWERPC_POWER5GR         CPU_POWERPC_POWER5
5957
    CPU_POWERPC_POWER5P            = 0x003B0000,
5958
#define CPU_POWERPC_POWER5GS         CPU_POWERPC_POWER5P
5959
    CPU_POWERPC_POWER6             = 0x003E0000,
5960
    CPU_POWERPC_POWER6_5           = 0x0F000001, /* POWER6 in POWER5 mode */
5961
    CPU_POWERPC_POWER6A            = 0x0F000002,
5962
    CPU_POWERPC_970                = 0x00390202,
5963
#define CPU_POWERPC_970FX            CPU_POWERPC_970FX_v31
5964
    CPU_POWERPC_970FX_v10          = 0x00391100,
5965
    CPU_POWERPC_970FX_v20          = 0x003C0200,
5966
    CPU_POWERPC_970FX_v21          = 0x003C0201,
5967
    CPU_POWERPC_970FX_v30          = 0x003C0300,
5968
    CPU_POWERPC_970FX_v31          = 0x003C0301,
5969
    CPU_POWERPC_970GX              = 0x00450000,
5970
#define CPU_POWERPC_970MP            CPU_POWERPC_970MP_v11
5971
    CPU_POWERPC_970MP_v10          = 0x00440100,
5972
    CPU_POWERPC_970MP_v11          = 0x00440101,
5973
#define CPU_POWERPC_CELL             CPU_POWERPC_CELL_v32
5974
    CPU_POWERPC_CELL_v10           = 0x00700100,
5975
    CPU_POWERPC_CELL_v20           = 0x00700400,
5976
    CPU_POWERPC_CELL_v30           = 0x00700500,
5977
    CPU_POWERPC_CELL_v31           = 0x00700501,
5978
#define CPU_POWERPC_CELL_v32         CPU_POWERPC_CELL_v31
5979
    CPU_POWERPC_RS64               = 0x00330000,
5980
    CPU_POWERPC_RS64II             = 0x00340000,
5981
    CPU_POWERPC_RS64III            = 0x00360000,
5982
    CPU_POWERPC_RS64IV             = 0x00370000,
5983
#endif /* defined(TARGET_PPC64) */
5984
    /* Original POWER */
5985
    /* XXX: should be POWER (RIOS), RSC3308, RSC4608,
5986
     * POWER2 (RIOS2) & RSC2 (P2SC) here
5987
     */
5988
#if 0
5989
    CPU_POWER                      = xxx, /* 0x20000 ? 0x30000 for RSC ? */
5990
#endif
5991
#if 0
5992
    CPU_POWER2                     = xxx, /* 0x40000 ? */
5993
#endif
5994
    /* PA Semi core */
5995
    CPU_POWERPC_PA6T               = 0x00900000,
5996
};
5997

    
5998
/* System version register (used on MPC 8xxx)                                */
5999
enum {
6000
    POWERPC_SVR_NONE               = 0x00000000,
6001
#define POWERPC_SVR_52xx             POWERPC_SVR_5200
6002
#define POWERPC_SVR_5200             POWERPC_SVR_5200_v12
6003
    POWERPC_SVR_5200_v10           = 0x80110010,
6004
    POWERPC_SVR_5200_v11           = 0x80110011,
6005
    POWERPC_SVR_5200_v12           = 0x80110012,
6006
#define POWERPC_SVR_5200B            POWERPC_SVR_5200B_v21
6007
    POWERPC_SVR_5200B_v20          = 0x80110020,
6008
    POWERPC_SVR_5200B_v21          = 0x80110021,
6009
#define POWERPC_SVR_55xx             POWERPC_SVR_5567
6010
#if 0
6011
    POWERPC_SVR_5533               = xxx,
6012
#endif
6013
#if 0
6014
    POWERPC_SVR_5534               = xxx,
6015
#endif
6016
#if 0
6017
    POWERPC_SVR_5553               = xxx,
6018
#endif
6019
#if 0
6020
    POWERPC_SVR_5554               = xxx,
6021
#endif
6022
#if 0
6023
    POWERPC_SVR_5561               = xxx,
6024
#endif
6025
#if 0
6026
    POWERPC_SVR_5565               = xxx,
6027
#endif
6028
#if 0
6029
    POWERPC_SVR_5566               = xxx,
6030
#endif
6031
#if 0
6032
    POWERPC_SVR_5567               = xxx,
6033
#endif
6034
#if 0
6035
    POWERPC_SVR_8313               = xxx,
6036
#endif
6037
#if 0
6038
    POWERPC_SVR_8313E              = xxx,
6039
#endif
6040
#if 0
6041
    POWERPC_SVR_8314               = xxx,
6042
#endif
6043
#if 0
6044
    POWERPC_SVR_8314E              = xxx,
6045
#endif
6046
#if 0
6047
    POWERPC_SVR_8315               = xxx,
6048
#endif
6049
#if 0
6050
    POWERPC_SVR_8315E              = xxx,
6051
#endif
6052
#if 0
6053
    POWERPC_SVR_8321               = xxx,
6054
#endif
6055
#if 0
6056
    POWERPC_SVR_8321E              = xxx,
6057
#endif
6058
#if 0
6059
    POWERPC_SVR_8323               = xxx,
6060
#endif
6061
#if 0
6062
    POWERPC_SVR_8323E              = xxx,
6063
#endif
6064
    POWERPC_SVR_8343A              = 0x80570030,
6065
    POWERPC_SVR_8343EA             = 0x80560030,
6066
#define POWERPC_SVR_8347A            POWERPC_SVR_8347AT
6067
    POWERPC_SVR_8347AP             = 0x80550030, /* PBGA package */
6068
    POWERPC_SVR_8347AT             = 0x80530030, /* TBGA package */
6069
#define POWERPC_SVR_8347EA            POWERPC_SVR_8347EAT
6070
    POWERPC_SVR_8347EAP            = 0x80540030, /* PBGA package */
6071
    POWERPC_SVR_8347EAT            = 0x80520030, /* TBGA package */
6072
    POWERPC_SVR_8349               = 0x80510010,
6073
    POWERPC_SVR_8349A              = 0x80510030,
6074
    POWERPC_SVR_8349E              = 0x80500010,
6075
    POWERPC_SVR_8349EA             = 0x80500030,
6076
#if 0
6077
    POWERPC_SVR_8358E              = xxx,
6078
#endif
6079
#if 0
6080
    POWERPC_SVR_8360E              = xxx,
6081
#endif
6082
#define POWERPC_SVR_E500             0x40000000
6083
    POWERPC_SVR_8377               = 0x80C70010 | POWERPC_SVR_E500,
6084
    POWERPC_SVR_8377E              = 0x80C60010 | POWERPC_SVR_E500,
6085
    POWERPC_SVR_8378               = 0x80C50010 | POWERPC_SVR_E500,
6086
    POWERPC_SVR_8378E              = 0x80C40010 | POWERPC_SVR_E500,
6087
    POWERPC_SVR_8379               = 0x80C30010 | POWERPC_SVR_E500,
6088
    POWERPC_SVR_8379E              = 0x80C00010 | POWERPC_SVR_E500,
6089
#define POWERPC_SVR_8533             POWERPC_SVR_8533_v11
6090
    POWERPC_SVR_8533_v10           = 0x80340010 | POWERPC_SVR_E500,
6091
    POWERPC_SVR_8533_v11           = 0x80340011 | POWERPC_SVR_E500,
6092
#define POWERPC_SVR_8533E            POWERPC_SVR_8533E_v11
6093
    POWERPC_SVR_8533E_v10          = 0x803C0010 | POWERPC_SVR_E500,
6094
    POWERPC_SVR_8533E_v11          = 0x803C0011 | POWERPC_SVR_E500,
6095
#define POWERPC_SVR_8540             POWERPC_SVR_8540_v21
6096
    POWERPC_SVR_8540_v10           = 0x80300010 | POWERPC_SVR_E500,
6097
    POWERPC_SVR_8540_v20           = 0x80300020 | POWERPC_SVR_E500,
6098
    POWERPC_SVR_8540_v21           = 0x80300021 | POWERPC_SVR_E500,
6099
#define POWERPC_SVR_8541             POWERPC_SVR_8541_v11
6100
    POWERPC_SVR_8541_v10           = 0x80720010 | POWERPC_SVR_E500,
6101
    POWERPC_SVR_8541_v11           = 0x80720011 | POWERPC_SVR_E500,
6102
#define POWERPC_SVR_8541E            POWERPC_SVR_8541E_v11
6103
    POWERPC_SVR_8541E_v10          = 0x807A0010 | POWERPC_SVR_E500,
6104
    POWERPC_SVR_8541E_v11          = 0x807A0011 | POWERPC_SVR_E500,
6105
#define POWERPC_SVR_8543             POWERPC_SVR_8543_v21
6106
    POWERPC_SVR_8543_v10           = 0x80320010 | POWERPC_SVR_E500,
6107
    POWERPC_SVR_8543_v11           = 0x80320011 | POWERPC_SVR_E500,
6108
    POWERPC_SVR_8543_v20           = 0x80320020 | POWERPC_SVR_E500,
6109
    POWERPC_SVR_8543_v21           = 0x80320021 | POWERPC_SVR_E500,
6110
#define POWERPC_SVR_8543E            POWERPC_SVR_8543E_v21
6111
    POWERPC_SVR_8543E_v10          = 0x803A0010 | POWERPC_SVR_E500,
6112
    POWERPC_SVR_8543E_v11          = 0x803A0011 | POWERPC_SVR_E500,
6113
    POWERPC_SVR_8543E_v20          = 0x803A0020 | POWERPC_SVR_E500,
6114
    POWERPC_SVR_8543E_v21          = 0x803A0021 | POWERPC_SVR_E500,
6115
#define POWERPC_SVR_8544             POWERPC_SVR_8544_v11
6116
    POWERPC_SVR_8544_v10           = 0x80340110 | POWERPC_SVR_E500,
6117
    POWERPC_SVR_8544_v11           = 0x80340111 | POWERPC_SVR_E500,
6118
#define POWERPC_SVR_8544E            POWERPC_SVR_8544E_v11
6119
    POWERPC_SVR_8544E_v10          = 0x803C0110 | POWERPC_SVR_E500,
6120
    POWERPC_SVR_8544E_v11          = 0x803C0111 | POWERPC_SVR_E500,
6121
#define POWERPC_SVR_8545             POWERPC_SVR_8545_v21
6122
    POWERPC_SVR_8545_v20           = 0x80310220 | POWERPC_SVR_E500,
6123
    POWERPC_SVR_8545_v21           = 0x80310221 | POWERPC_SVR_E500,
6124
#define POWERPC_SVR_8545E            POWERPC_SVR_8545E_v21
6125
    POWERPC_SVR_8545E_v20          = 0x80390220 | POWERPC_SVR_E500,
6126
    POWERPC_SVR_8545E_v21          = 0x80390221 | POWERPC_SVR_E500,
6127
#define POWERPC_SVR_8547E            POWERPC_SVR_8547E_v21
6128
    POWERPC_SVR_8547E_v20          = 0x80390120 | POWERPC_SVR_E500,
6129
    POWERPC_SVR_8547E_v21          = 0x80390121 | POWERPC_SVR_E500,
6130
#define POWERPC_SVR_8548             POWERPC_SVR_8548_v21
6131
    POWERPC_SVR_8548_v10           = 0x80310010 | POWERPC_SVR_E500,
6132
    POWERPC_SVR_8548_v11           = 0x80310011 | POWERPC_SVR_E500,
6133
    POWERPC_SVR_8548_v20           = 0x80310020 | POWERPC_SVR_E500,
6134
    POWERPC_SVR_8548_v21           = 0x80310021 | POWERPC_SVR_E500,
6135
#define POWERPC_SVR_8548E            POWERPC_SVR_8548E_v21
6136
    POWERPC_SVR_8548E_v10          = 0x80390010 | POWERPC_SVR_E500,
6137
    POWERPC_SVR_8548E_v11          = 0x80390011 | POWERPC_SVR_E500,
6138
    POWERPC_SVR_8548E_v20          = 0x80390020 | POWERPC_SVR_E500,
6139
    POWERPC_SVR_8548E_v21          = 0x80390021 | POWERPC_SVR_E500,
6140
#define POWERPC_SVR_8555             POWERPC_SVR_8555_v11
6141
    POWERPC_SVR_8555_v10           = 0x80710010 | POWERPC_SVR_E500,
6142
    POWERPC_SVR_8555_v11           = 0x80710011 | POWERPC_SVR_E500,
6143
#define POWERPC_SVR_8555E            POWERPC_SVR_8555_v11
6144
    POWERPC_SVR_8555E_v10          = 0x80790010 | POWERPC_SVR_E500,
6145
    POWERPC_SVR_8555E_v11          = 0x80790011 | POWERPC_SVR_E500,
6146
#define POWERPC_SVR_8560             POWERPC_SVR_8560_v21
6147
    POWERPC_SVR_8560_v10           = 0x80700010 | POWERPC_SVR_E500,
6148
    POWERPC_SVR_8560_v20           = 0x80700020 | POWERPC_SVR_E500,
6149
    POWERPC_SVR_8560_v21           = 0x80700021 | POWERPC_SVR_E500,
6150
    POWERPC_SVR_8567               = 0x80750111 | POWERPC_SVR_E500,
6151
    POWERPC_SVR_8567E              = 0x807D0111 | POWERPC_SVR_E500,
6152
    POWERPC_SVR_8568               = 0x80750011 | POWERPC_SVR_E500,
6153
    POWERPC_SVR_8568E              = 0x807D0011 | POWERPC_SVR_E500,
6154
    POWERPC_SVR_8572               = 0x80E00010 | POWERPC_SVR_E500,
6155
    POWERPC_SVR_8572E              = 0x80E80010 | POWERPC_SVR_E500,
6156
#if 0
6157
    POWERPC_SVR_8610               = xxx,
6158
#endif
6159
    POWERPC_SVR_8641               = 0x80900021,
6160
    POWERPC_SVR_8641D              = 0x80900121,
6161
};
6162

    
6163
/*****************************************************************************/
6164
/* PowerPC CPU definitions                                                   */
6165
#define POWERPC_DEF_SVR(_name, _pvr, _svr, _type)                             \
6166
    {                                                                         \
6167
        .name        = _name,                                                 \
6168
        .pvr         = _pvr,                                                  \
6169
        .svr         = _svr,                                                  \
6170
        .insns_flags = glue(POWERPC_INSNS_,_type),                            \
6171
        .msr_mask    = glue(POWERPC_MSRM_,_type),                             \
6172
        .mmu_model   = glue(POWERPC_MMU_,_type),                              \
6173
        .excp_model  = glue(POWERPC_EXCP_,_type),                             \
6174
        .bus_model   = glue(POWERPC_INPUT_,_type),                            \
6175
        .bfd_mach    = glue(POWERPC_BFDM_,_type),                             \
6176
        .flags       = glue(POWERPC_FLAG_,_type),                             \
6177
        .init_proc   = &glue(init_proc_,_type),                               \
6178
        .check_pow   = &glue(check_pow_,_type),                               \
6179
    }
6180
#define POWERPC_DEF(_name, _pvr, _type)                                       \
6181
POWERPC_DEF_SVR(_name, _pvr, POWERPC_SVR_NONE, _type)
6182

    
6183
static const ppc_def_t ppc_defs[] = {
6184
    /* Embedded PowerPC                                                      */
6185
    /* PowerPC 401 family                                                    */
6186
    /* Generic PowerPC 401 */
6187
    POWERPC_DEF("401",           CPU_POWERPC_401,                    401),
6188
    /* PowerPC 401 cores                                                     */
6189
    /* PowerPC 401A1 */
6190
    POWERPC_DEF("401A1",         CPU_POWERPC_401A1,                  401),
6191
    /* PowerPC 401B2                                                         */
6192
    POWERPC_DEF("401B2",         CPU_POWERPC_401B2,                  401x2),
6193
#if defined (TODO)
6194
    /* PowerPC 401B3                                                         */
6195
    POWERPC_DEF("401B3",         CPU_POWERPC_401B3,                  401x3),
6196
#endif
6197
    /* PowerPC 401C2                                                         */
6198
    POWERPC_DEF("401C2",         CPU_POWERPC_401C2,                  401x2),
6199
    /* PowerPC 401D2                                                         */
6200
    POWERPC_DEF("401D2",         CPU_POWERPC_401D2,                  401x2),
6201
    /* PowerPC 401E2                                                         */
6202
    POWERPC_DEF("401E2",         CPU_POWERPC_401E2,                  401x2),
6203
    /* PowerPC 401F2                                                         */
6204
    POWERPC_DEF("401F2",         CPU_POWERPC_401F2,                  401x2),
6205
    /* PowerPC 401G2                                                         */
6206
    /* XXX: to be checked */
6207
    POWERPC_DEF("401G2",         CPU_POWERPC_401G2,                  401x2),
6208
    /* PowerPC 401 microcontrolers                                           */
6209
#if defined (TODO)
6210
    /* PowerPC 401GF                                                         */
6211
    POWERPC_DEF("401GF",         CPU_POWERPC_401GF,                  401),
6212
#endif
6213
    /* IOP480 (401 microcontroler)                                           */
6214
    POWERPC_DEF("IOP480",        CPU_POWERPC_IOP480,                 IOP480),
6215
    /* IBM Processor for Network Resources                                   */
6216
    POWERPC_DEF("Cobra",         CPU_POWERPC_COBRA,                  401),
6217
#if defined (TODO)
6218
    POWERPC_DEF("Xipchip",       CPU_POWERPC_XIPCHIP,                401),
6219
#endif
6220
    /* PowerPC 403 family                                                    */
6221
    /* Generic PowerPC 403                                                   */
6222
    POWERPC_DEF("403",           CPU_POWERPC_403,                    403),
6223
    /* PowerPC 403 microcontrolers                                           */
6224
    /* PowerPC 403 GA                                                        */
6225
    POWERPC_DEF("403GA",         CPU_POWERPC_403GA,                  403),
6226
    /* PowerPC 403 GB                                                        */
6227
    POWERPC_DEF("403GB",         CPU_POWERPC_403GB,                  403),
6228
    /* PowerPC 403 GC                                                        */
6229
    POWERPC_DEF("403GC",         CPU_POWERPC_403GC,                  403),
6230
    /* PowerPC 403 GCX                                                       */
6231
    POWERPC_DEF("403GCX",        CPU_POWERPC_403GCX,                 403GCX),
6232
#if defined (TODO)
6233
    /* PowerPC 403 GP                                                        */
6234
    POWERPC_DEF("403GP",         CPU_POWERPC_403GP,                  403),
6235
#endif
6236
    /* PowerPC 405 family                                                    */
6237
    /* Generic PowerPC 405                                                   */
6238
    POWERPC_DEF("405",           CPU_POWERPC_405,                    405),
6239
    /* PowerPC 405 cores                                                     */
6240
#if defined (TODO)
6241
    /* PowerPC 405 A3                                                        */
6242
    POWERPC_DEF("405A3",         CPU_POWERPC_405A3,                  405),
6243
#endif
6244
#if defined (TODO)
6245
    /* PowerPC 405 A4                                                        */
6246
    POWERPC_DEF("405A4",         CPU_POWERPC_405A4,                  405),
6247
#endif
6248
#if defined (TODO)
6249
    /* PowerPC 405 B3                                                        */
6250
    POWERPC_DEF("405B3",         CPU_POWERPC_405B3,                  405),
6251
#endif
6252
#if defined (TODO)
6253
    /* PowerPC 405 B4                                                        */
6254
    POWERPC_DEF("405B4",         CPU_POWERPC_405B4,                  405),
6255
#endif
6256
#if defined (TODO)
6257
    /* PowerPC 405 C3                                                        */
6258
    POWERPC_DEF("405C3",         CPU_POWERPC_405C3,                  405),
6259
#endif
6260
#if defined (TODO)
6261
    /* PowerPC 405 C4                                                        */
6262
    POWERPC_DEF("405C4",         CPU_POWERPC_405C4,                  405),
6263
#endif
6264
    /* PowerPC 405 D2                                                        */
6265
    POWERPC_DEF("405D2",         CPU_POWERPC_405D2,                  405),
6266
#if defined (TODO)
6267
    /* PowerPC 405 D3                                                        */
6268
    POWERPC_DEF("405D3",         CPU_POWERPC_405D3,                  405),
6269
#endif
6270
    /* PowerPC 405 D4                                                        */
6271
    POWERPC_DEF("405D4",         CPU_POWERPC_405D4,                  405),
6272
#if defined (TODO)
6273
    /* PowerPC 405 D5                                                        */
6274
    POWERPC_DEF("405D5",         CPU_POWERPC_405D5,                  405),
6275
#endif
6276
#if defined (TODO)
6277
    /* PowerPC 405 E4                                                        */
6278
    POWERPC_DEF("405E4",         CPU_POWERPC_405E4,                  405),
6279
#endif
6280
#if defined (TODO)
6281
    /* PowerPC 405 F4                                                        */
6282
    POWERPC_DEF("405F4",         CPU_POWERPC_405F4,                  405),
6283
#endif
6284
#if defined (TODO)
6285
    /* PowerPC 405 F5                                                        */
6286
    POWERPC_DEF("405F5",         CPU_POWERPC_405F5,                  405),
6287
#endif
6288
#if defined (TODO)
6289
    /* PowerPC 405 F6                                                        */
6290
    POWERPC_DEF("405F6",         CPU_POWERPC_405F6,                  405),
6291
#endif
6292
    /* PowerPC 405 microcontrolers                                           */
6293
    /* PowerPC 405 CR                                                        */
6294
    POWERPC_DEF("405CR",         CPU_POWERPC_405CR,                  405),
6295
    /* PowerPC 405 CRa                                                       */
6296
    POWERPC_DEF("405CRa",        CPU_POWERPC_405CRa,                 405),
6297
    /* PowerPC 405 CRb                                                       */
6298
    POWERPC_DEF("405CRb",        CPU_POWERPC_405CRb,                 405),
6299
    /* PowerPC 405 CRc                                                       */
6300
    POWERPC_DEF("405CRc",        CPU_POWERPC_405CRc,                 405),
6301
    /* PowerPC 405 EP                                                        */
6302
    POWERPC_DEF("405EP",         CPU_POWERPC_405EP,                  405),
6303
#if defined(TODO)
6304
    /* PowerPC 405 EXr                                                       */
6305
    POWERPC_DEF("405EXr",        CPU_POWERPC_405EXr,                 405),
6306
#endif
6307
    /* PowerPC 405 EZ                                                        */
6308
    POWERPC_DEF("405EZ",         CPU_POWERPC_405EZ,                  405),
6309
#if defined(TODO)
6310
    /* PowerPC 405 FX                                                        */
6311
    POWERPC_DEF("405FX",         CPU_POWERPC_405FX,                  405),
6312
#endif
6313
    /* PowerPC 405 GP                                                        */
6314
    POWERPC_DEF("405GP",         CPU_POWERPC_405GP,                  405),
6315
    /* PowerPC 405 GPa                                                       */
6316
    POWERPC_DEF("405GPa",        CPU_POWERPC_405GPa,                 405),
6317
    /* PowerPC 405 GPb                                                       */
6318
    POWERPC_DEF("405GPb",        CPU_POWERPC_405GPb,                 405),
6319
    /* PowerPC 405 GPc                                                       */
6320
    POWERPC_DEF("405GPc",        CPU_POWERPC_405GPc,                 405),
6321
    /* PowerPC 405 GPd                                                       */
6322
    POWERPC_DEF("405GPd",        CPU_POWERPC_405GPd,                 405),
6323
    /* PowerPC 405 GPe                                                       */
6324
    POWERPC_DEF("405GPe",        CPU_POWERPC_405GPe,                 405),
6325
    /* PowerPC 405 GPR                                                       */
6326
    POWERPC_DEF("405GPR",        CPU_POWERPC_405GPR,                 405),
6327
#if defined(TODO)
6328
    /* PowerPC 405 H                                                         */
6329
    POWERPC_DEF("405H",          CPU_POWERPC_405H,                   405),
6330
#endif
6331
#if defined(TODO)
6332
    /* PowerPC 405 L                                                         */
6333
    POWERPC_DEF("405L",          CPU_POWERPC_405L,                   405),
6334
#endif
6335
    /* PowerPC 405 LP                                                        */
6336
    POWERPC_DEF("405LP",         CPU_POWERPC_405LP,                  405),
6337
#if defined(TODO)
6338
    /* PowerPC 405 PM                                                        */
6339
    POWERPC_DEF("405PM",         CPU_POWERPC_405PM,                  405),
6340
#endif
6341
#if defined(TODO)
6342
    /* PowerPC 405 PS                                                        */
6343
    POWERPC_DEF("405PS",         CPU_POWERPC_405PS,                  405),
6344
#endif
6345
#if defined(TODO)
6346
    /* PowerPC 405 S                                                         */
6347
    POWERPC_DEF("405S",          CPU_POWERPC_405S,                   405),
6348
#endif
6349
    /* Npe405 H                                                              */
6350
    POWERPC_DEF("Npe405H",       CPU_POWERPC_NPE405H,                405),
6351
    /* Npe405 H2                                                             */
6352
    POWERPC_DEF("Npe405H2",      CPU_POWERPC_NPE405H2,               405),
6353
    /* Npe405 L                                                              */
6354
    POWERPC_DEF("Npe405L",       CPU_POWERPC_NPE405L,                405),
6355
    /* Npe4GS3                                                               */
6356
    POWERPC_DEF("Npe4GS3",       CPU_POWERPC_NPE4GS3,                405),
6357
#if defined (TODO)
6358
    POWERPC_DEF("Npcxx1",        CPU_POWERPC_NPCxx1,                 405),
6359
#endif
6360
#if defined (TODO)
6361
    POWERPC_DEF("Npr161",        CPU_POWERPC_NPR161,                 405),
6362
#endif
6363
#if defined (TODO)
6364
    /* PowerPC LC77700 (Sanyo)                                               */
6365
    POWERPC_DEF("LC77700",       CPU_POWERPC_LC77700,                405),
6366
#endif
6367
    /* PowerPC 401/403/405 based set-top-box microcontrolers                 */
6368
#if defined (TODO)
6369
    /* STB010000                                                             */
6370
    POWERPC_DEF("STB01000",      CPU_POWERPC_STB01000,               401x2),
6371
#endif
6372
#if defined (TODO)
6373
    /* STB01010                                                              */
6374
    POWERPC_DEF("STB01010",      CPU_POWERPC_STB01010,               401x2),
6375
#endif
6376
#if defined (TODO)
6377
    /* STB0210                                                               */
6378
    POWERPC_DEF("STB0210",       CPU_POWERPC_STB0210,                401x3),
6379
#endif
6380
    /* STB03xx                                                               */
6381
    POWERPC_DEF("STB03",         CPU_POWERPC_STB03,                  405),
6382
#if defined (TODO)
6383
    /* STB043x                                                               */
6384
    POWERPC_DEF("STB043",        CPU_POWERPC_STB043,                 405),
6385
#endif
6386
#if defined (TODO)
6387
    /* STB045x                                                               */
6388
    POWERPC_DEF("STB045",        CPU_POWERPC_STB045,                 405),
6389
#endif
6390
    /* STB04xx                                                               */
6391
    POWERPC_DEF("STB04",         CPU_POWERPC_STB04,                  405),
6392
    /* STB25xx                                                               */
6393
    POWERPC_DEF("STB25",         CPU_POWERPC_STB25,                  405),
6394
#if defined (TODO)
6395
    /* STB130                                                                */
6396
    POWERPC_DEF("STB130",        CPU_POWERPC_STB130,                 405),
6397
#endif
6398
    /* Xilinx PowerPC 405 cores                                              */
6399
    POWERPC_DEF("x2vp4",         CPU_POWERPC_X2VP4,                  405),
6400
    POWERPC_DEF("x2vp7",         CPU_POWERPC_X2VP7,                  405),
6401
    POWERPC_DEF("x2vp20",        CPU_POWERPC_X2VP20,                 405),
6402
    POWERPC_DEF("x2vp50",        CPU_POWERPC_X2VP50,                 405),
6403
#if defined (TODO)
6404
    /* Zarlink ZL10310                                                       */
6405
    POWERPC_DEF("zl10310",       CPU_POWERPC_ZL10310,                405),
6406
#endif
6407
#if defined (TODO)
6408
    /* Zarlink ZL10311                                                       */
6409
    POWERPC_DEF("zl10311",       CPU_POWERPC_ZL10311,                405),
6410
#endif
6411
#if defined (TODO)
6412
    /* Zarlink ZL10320                                                       */
6413
    POWERPC_DEF("zl10320",       CPU_POWERPC_ZL10320,                405),
6414
#endif
6415
#if defined (TODO)
6416
    /* Zarlink ZL10321                                                       */
6417
    POWERPC_DEF("zl10321",       CPU_POWERPC_ZL10321,                405),
6418
#endif
6419
    /* PowerPC 440 family                                                    */
6420
#if defined(TODO_USER_ONLY)
6421
    /* Generic PowerPC 440                                                   */
6422
    POWERPC_DEF("440",           CPU_POWERPC_440,                    440GP),
6423
#endif
6424
    /* PowerPC 440 cores                                                     */
6425
#if defined (TODO)
6426
    /* PowerPC 440 A4                                                        */
6427
    POWERPC_DEF("440A4",         CPU_POWERPC_440A4,                  440x4),
6428
#endif
6429
#if defined (TODO)
6430
    /* PowerPC 440 A5                                                        */
6431
    POWERPC_DEF("440A5",         CPU_POWERPC_440A5,                  440x5),
6432
#endif
6433
#if defined (TODO)
6434
    /* PowerPC 440 B4                                                        */
6435
    POWERPC_DEF("440B4",         CPU_POWERPC_440B4,                  440x4),
6436
#endif
6437
#if defined (TODO)
6438
    /* PowerPC 440 G4                                                        */
6439
    POWERPC_DEF("440G4",         CPU_POWERPC_440G4,                  440x4),
6440
#endif
6441
#if defined (TODO)
6442
    /* PowerPC 440 F5                                                        */
6443
    POWERPC_DEF("440F5",         CPU_POWERPC_440F5,                  440x5),
6444
#endif
6445
#if defined (TODO)
6446
    /* PowerPC 440 G5                                                        */
6447
    POWERPC_DEF("440G5",         CPU_POWERPC_440G5,                  440x5),
6448
#endif
6449
#if defined (TODO)
6450
    /* PowerPC 440H4                                                         */
6451
    POWERPC_DEF("440H4",         CPU_POWERPC_440H4,                  440x4),
6452
#endif
6453
#if defined (TODO)
6454
    /* PowerPC 440H6                                                         */
6455
    POWERPC_DEF("440H6",         CPU_POWERPC_440H6,                  440Gx5),
6456
#endif
6457
    /* PowerPC 440 microcontrolers                                           */
6458
#if defined(TODO_USER_ONLY)
6459
    /* PowerPC 440 EP                                                        */
6460
    POWERPC_DEF("440EP",         CPU_POWERPC_440EP,                  440EP),
6461
#endif
6462
#if defined(TODO_USER_ONLY)
6463
    /* PowerPC 440 EPa                                                       */
6464
    POWERPC_DEF("440EPa",        CPU_POWERPC_440EPa,                 440EP),
6465
#endif
6466
#if defined(TODO_USER_ONLY)
6467
    /* PowerPC 440 EPb                                                       */
6468
    POWERPC_DEF("440EPb",        CPU_POWERPC_440EPb,                 440EP),
6469
#endif
6470
#if defined(TODO_USER_ONLY)
6471
    /* PowerPC 440 EPX                                                       */
6472
    POWERPC_DEF("440EPX",        CPU_POWERPC_440EPX,                 440EP),
6473
#endif
6474
#if defined(TODO_USER_ONLY)
6475
    /* PowerPC 440 GP                                                        */
6476
    POWERPC_DEF("440GP",         CPU_POWERPC_440GP,                  440GP),
6477
#endif
6478
#if defined(TODO_USER_ONLY)
6479
    /* PowerPC 440 GPb                                                       */
6480
    POWERPC_DEF("440GPb",        CPU_POWERPC_440GPb,                 440GP),
6481
#endif
6482
#if defined(TODO_USER_ONLY)
6483
    /* PowerPC 440 GPc                                                       */
6484
    POWERPC_DEF("440GPc",        CPU_POWERPC_440GPc,                 440GP),
6485
#endif
6486
#if defined(TODO_USER_ONLY)
6487
    /* PowerPC 440 GR                                                        */
6488
    POWERPC_DEF("440GR",         CPU_POWERPC_440GR,                  440x5),
6489
#endif
6490
#if defined(TODO_USER_ONLY)
6491
    /* PowerPC 440 GRa                                                       */
6492
    POWERPC_DEF("440GRa",        CPU_POWERPC_440GRa,                 440x5),
6493
#endif
6494
#if defined(TODO_USER_ONLY)
6495
    /* PowerPC 440 GRX                                                       */
6496
    POWERPC_DEF("440GRX",        CPU_POWERPC_440GRX,                 440x5),
6497
#endif
6498
#if defined(TODO_USER_ONLY)
6499
    /* PowerPC 440 GX                                                        */
6500
    POWERPC_DEF("440GX",         CPU_POWERPC_440GX,                  440EP),
6501
#endif
6502
#if defined(TODO_USER_ONLY)
6503
    /* PowerPC 440 GXa                                                       */
6504
    POWERPC_DEF("440GXa",        CPU_POWERPC_440GXa,                 440EP),
6505
#endif
6506
#if defined(TODO_USER_ONLY)
6507
    /* PowerPC 440 GXb                                                       */
6508
    POWERPC_DEF("440GXb",        CPU_POWERPC_440GXb,                 440EP),
6509
#endif
6510
#if defined(TODO_USER_ONLY)
6511
    /* PowerPC 440 GXc                                                       */
6512
    POWERPC_DEF("440GXc",        CPU_POWERPC_440GXc,                 440EP),
6513
#endif
6514
#if defined(TODO_USER_ONLY)
6515
    /* PowerPC 440 GXf                                                       */
6516
    POWERPC_DEF("440GXf",        CPU_POWERPC_440GXf,                 440EP),
6517
#endif
6518
#if defined(TODO)
6519
    /* PowerPC 440 S                                                         */
6520
    POWERPC_DEF("440S",          CPU_POWERPC_440S,                   440),
6521
#endif
6522
#if defined(TODO_USER_ONLY)
6523
    /* PowerPC 440 SP                                                        */
6524
    POWERPC_DEF("440SP",         CPU_POWERPC_440SP,                  440EP),
6525
#endif
6526
#if defined(TODO_USER_ONLY)
6527
    /* PowerPC 440 SP2                                                       */
6528
    POWERPC_DEF("440SP2",        CPU_POWERPC_440SP2,                 440EP),
6529
#endif
6530
#if defined(TODO_USER_ONLY)
6531
    /* PowerPC 440 SPE                                                       */
6532
    POWERPC_DEF("440SPE",        CPU_POWERPC_440SPE,                 440EP),
6533
#endif
6534
    /* PowerPC 460 family                                                    */
6535
#if defined (TODO)
6536
    /* Generic PowerPC 464                                                   */
6537
    POWERPC_DEF("464",           CPU_POWERPC_464,                    460),
6538
#endif
6539
    /* PowerPC 464 microcontrolers                                           */
6540
#if defined (TODO)
6541
    /* PowerPC 464H90                                                        */
6542
    POWERPC_DEF("464H90",        CPU_POWERPC_464H90,                 460),
6543
#endif
6544
#if defined (TODO)
6545
    /* PowerPC 464H90F                                                       */
6546
    POWERPC_DEF("464H90F",       CPU_POWERPC_464H90F,                460F),
6547
#endif
6548
    /* Freescale embedded PowerPC cores                                      */
6549
    /* MPC5xx family (aka RCPU)                                              */
6550
#if defined(TODO_USER_ONLY)
6551
    /* Generic MPC5xx core                                                   */
6552
    POWERPC_DEF("MPC5xx",        CPU_POWERPC_MPC5xx,                 MPC5xx),
6553
#endif
6554
#if defined(TODO_USER_ONLY)
6555
    /* Codename for MPC5xx core                                              */
6556
    POWERPC_DEF("RCPU",          CPU_POWERPC_MPC5xx,                 MPC5xx),
6557
#endif
6558
    /* MPC5xx microcontrollers                                               */
6559
#if defined(TODO_USER_ONLY)
6560
    /* MGT560                                                                */
6561
    POWERPC_DEF("MGT560",        CPU_POWERPC_MGT560,                 MPC5xx),
6562
#endif
6563
#if defined(TODO_USER_ONLY)
6564
    /* MPC509                                                                */
6565
    POWERPC_DEF("MPC509",        CPU_POWERPC_MPC509,                 MPC5xx),
6566
#endif
6567
#if defined(TODO_USER_ONLY)
6568
    /* MPC533                                                                */
6569
    POWERPC_DEF("MPC533",        CPU_POWERPC_MPC533,                 MPC5xx),
6570
#endif
6571
#if defined(TODO_USER_ONLY)
6572
    /* MPC534                                                                */
6573
    POWERPC_DEF("MPC534",        CPU_POWERPC_MPC534,                 MPC5xx),
6574
#endif
6575
#if defined(TODO_USER_ONLY)
6576
    /* MPC555                                                                */
6577
    POWERPC_DEF("MPC555",        CPU_POWERPC_MPC555,                 MPC5xx),
6578
#endif
6579
#if defined(TODO_USER_ONLY)
6580
    /* MPC556                                                                */
6581
    POWERPC_DEF("MPC556",        CPU_POWERPC_MPC556,                 MPC5xx),
6582
#endif
6583
#if defined(TODO_USER_ONLY)
6584
    /* MPC560                                                                */
6585
    POWERPC_DEF("MPC560",        CPU_POWERPC_MPC560,                 MPC5xx),
6586
#endif
6587
#if defined(TODO_USER_ONLY)
6588
    /* MPC561                                                                */
6589
    POWERPC_DEF("MPC561",        CPU_POWERPC_MPC561,                 MPC5xx),
6590
#endif
6591
#if defined(TODO_USER_ONLY)
6592
    /* MPC562                                                                */
6593
    POWERPC_DEF("MPC562",        CPU_POWERPC_MPC562,                 MPC5xx),
6594
#endif
6595
#if defined(TODO_USER_ONLY)
6596
    /* MPC563                                                                */
6597
    POWERPC_DEF("MPC563",        CPU_POWERPC_MPC563,                 MPC5xx),
6598
#endif
6599
#if defined(TODO_USER_ONLY)
6600
    /* MPC564                                                                */
6601
    POWERPC_DEF("MPC564",        CPU_POWERPC_MPC564,                 MPC5xx),
6602
#endif
6603
#if defined(TODO_USER_ONLY)
6604
    /* MPC565                                                                */
6605
    POWERPC_DEF("MPC565",        CPU_POWERPC_MPC565,                 MPC5xx),
6606
#endif
6607
#if defined(TODO_USER_ONLY)
6608
    /* MPC566                                                                */
6609
    POWERPC_DEF("MPC566",        CPU_POWERPC_MPC566,                 MPC5xx),
6610
#endif
6611
    /* MPC8xx family (aka PowerQUICC)                                        */
6612
#if defined(TODO_USER_ONLY)
6613
    /* Generic MPC8xx core                                                   */
6614
    POWERPC_DEF("MPC8xx",        CPU_POWERPC_MPC8xx,                 MPC8xx),
6615
#endif
6616
#if defined(TODO_USER_ONLY)
6617
    /* Codename for MPC8xx core                                              */
6618
    POWERPC_DEF("PowerQUICC",    CPU_POWERPC_MPC8xx,                 MPC8xx),
6619
#endif
6620
    /* MPC8xx microcontrollers                                               */
6621
#if defined(TODO_USER_ONLY)
6622
    /* MGT823                                                                */
6623
    POWERPC_DEF("MGT823",        CPU_POWERPC_MGT823,                 MPC8xx),
6624
#endif
6625
#if defined(TODO_USER_ONLY)
6626
    /* MPC821                                                                */
6627
    POWERPC_DEF("MPC821",        CPU_POWERPC_MPC821,                 MPC8xx),
6628
#endif
6629
#if defined(TODO_USER_ONLY)
6630
    /* MPC823                                                                */
6631
    POWERPC_DEF("MPC823",        CPU_POWERPC_MPC823,                 MPC8xx),
6632
#endif
6633
#if defined(TODO_USER_ONLY)
6634
    /* MPC850                                                                */
6635
    POWERPC_DEF("MPC850",        CPU_POWERPC_MPC850,                 MPC8xx),
6636
#endif
6637
#if defined(TODO_USER_ONLY)
6638
    /* MPC852T                                                               */
6639
    POWERPC_DEF("MPC852T",       CPU_POWERPC_MPC852T,                MPC8xx),
6640
#endif
6641
#if defined(TODO_USER_ONLY)
6642
    /* MPC855T                                                               */
6643
    POWERPC_DEF("MPC855T",       CPU_POWERPC_MPC855T,                MPC8xx),
6644
#endif
6645
#if defined(TODO_USER_ONLY)
6646
    /* MPC857                                                                */
6647
    POWERPC_DEF("MPC857",        CPU_POWERPC_MPC857,                 MPC8xx),
6648
#endif
6649
#if defined(TODO_USER_ONLY)
6650
    /* MPC859                                                                */
6651
    POWERPC_DEF("MPC859",        CPU_POWERPC_MPC859,                 MPC8xx),
6652
#endif
6653
#if defined(TODO_USER_ONLY)
6654
    /* MPC860                                                                */
6655
    POWERPC_DEF("MPC860",        CPU_POWERPC_MPC860,                 MPC8xx),
6656
#endif
6657
#if defined(TODO_USER_ONLY)
6658
    /* MPC862                                                                */
6659
    POWERPC_DEF("MPC862",        CPU_POWERPC_MPC862,                 MPC8xx),
6660
#endif
6661
#if defined(TODO_USER_ONLY)
6662
    /* MPC866                                                                */
6663
    POWERPC_DEF("MPC866",        CPU_POWERPC_MPC866,                 MPC8xx),
6664
#endif
6665
#if defined(TODO_USER_ONLY)
6666
    /* MPC870                                                                */
6667
    POWERPC_DEF("MPC870",        CPU_POWERPC_MPC870,                 MPC8xx),
6668
#endif
6669
#if defined(TODO_USER_ONLY)
6670
    /* MPC875                                                                */
6671
    POWERPC_DEF("MPC875",        CPU_POWERPC_MPC875,                 MPC8xx),
6672
#endif
6673
#if defined(TODO_USER_ONLY)
6674
    /* MPC880                                                                */
6675
    POWERPC_DEF("MPC880",        CPU_POWERPC_MPC880,                 MPC8xx),
6676
#endif
6677
#if defined(TODO_USER_ONLY)
6678
    /* MPC885                                                                */
6679
    POWERPC_DEF("MPC885",        CPU_POWERPC_MPC885,                 MPC8xx),
6680
#endif
6681
    /* MPC82xx family (aka PowerQUICC-II)                                    */
6682
    /* Generic MPC52xx core                                                  */
6683
    POWERPC_DEF_SVR("MPC52xx",
6684
                    CPU_POWERPC_MPC52xx,      POWERPC_SVR_52xx,      G2LE),
6685
    /* Generic MPC82xx core                                                  */
6686
    POWERPC_DEF("MPC82xx",       CPU_POWERPC_MPC82xx,                G2),
6687
    /* Codename for MPC82xx                                                  */
6688
    POWERPC_DEF("PowerQUICC-II", CPU_POWERPC_MPC82xx,                G2),
6689
    /* PowerPC G2 core                                                       */
6690
    POWERPC_DEF("G2",            CPU_POWERPC_G2,                     G2),
6691
    /* PowerPC G2 H4 core                                                    */
6692
    POWERPC_DEF("G2H4",          CPU_POWERPC_G2H4,                   G2),
6693
    /* PowerPC G2 GP core                                                    */
6694
    POWERPC_DEF("G2GP",          CPU_POWERPC_G2gp,                   G2),
6695
    /* PowerPC G2 LS core                                                    */
6696
    POWERPC_DEF("G2LS",          CPU_POWERPC_G2ls,                   G2),
6697
    /* PowerPC G2 HiP3 core                                                  */
6698
    POWERPC_DEF("G2HiP3",        CPU_POWERPC_G2_HIP3,                G2),
6699
    /* PowerPC G2 HiP4 core                                                  */
6700
    POWERPC_DEF("G2HiP4",        CPU_POWERPC_G2_HIP4,                G2),
6701
    /* PowerPC MPC603 core                                                   */
6702
    POWERPC_DEF("MPC603",        CPU_POWERPC_MPC603,                 603E),
6703
    /* PowerPC G2le core (same as G2 plus little-endian mode support)        */
6704
    POWERPC_DEF("G2le",          CPU_POWERPC_G2LE,                   G2LE),
6705
    /* PowerPC G2LE GP core                                                  */
6706
    POWERPC_DEF("G2leGP",        CPU_POWERPC_G2LEgp,                 G2LE),
6707
    /* PowerPC G2LE LS core                                                  */
6708
    POWERPC_DEF("G2leLS",        CPU_POWERPC_G2LEls,                 G2LE),
6709
    /* PowerPC G2LE GP1 core                                                 */
6710
    POWERPC_DEF("G2leGP1",       CPU_POWERPC_G2LEgp1,                G2LE),
6711
    /* PowerPC G2LE GP3 core                                                 */
6712
    POWERPC_DEF("G2leGP3",       CPU_POWERPC_G2LEgp1,                G2LE),
6713
    /* PowerPC MPC603 microcontrollers                                       */
6714
    /* MPC8240                                                               */
6715
    POWERPC_DEF("MPC8240",       CPU_POWERPC_MPC8240,                603E),
6716
    /* PowerPC G2 microcontrollers                                           */
6717
#if 0
6718
    /* MPC5121                                                               */
6719
    POWERPC_DEF_SVR("MPC5121",
6720
                    CPU_POWERPC_MPC5121,      POWERPC_SVR_5121,      G2LE),
6721
#endif
6722
    /* MPC5200                                                               */
6723
    POWERPC_DEF_SVR("MPC5200",
6724
                    CPU_POWERPC_MPC5200,      POWERPC_SVR_5200,      G2LE),
6725
    /* MPC5200 v1.0                                                          */
6726
    POWERPC_DEF_SVR("MPC5200_v10",
6727
                    CPU_POWERPC_MPC5200_v10,  POWERPC_SVR_5200_v10,  G2LE),
6728
    /* MPC5200 v1.1                                                          */
6729
    POWERPC_DEF_SVR("MPC5200_v11",
6730
                    CPU_POWERPC_MPC5200_v11,  POWERPC_SVR_5200_v11,  G2LE),
6731
    /* MPC5200 v1.2                                                          */
6732
    POWERPC_DEF_SVR("MPC5200_v12",
6733
                    CPU_POWERPC_MPC5200_v12,  POWERPC_SVR_5200_v12,  G2LE),
6734
    /* MPC5200B                                                              */
6735
    POWERPC_DEF_SVR("MPC5200B",
6736
                    CPU_POWERPC_MPC5200B,     POWERPC_SVR_5200B,     G2LE),
6737
    /* MPC5200B v2.0                                                         */
6738
    POWERPC_DEF_SVR("MPC5200B_v20",
6739
                    CPU_POWERPC_MPC5200B_v20, POWERPC_SVR_5200B_v20, G2LE),
6740
    /* MPC5200B v2.1                                                         */
6741
    POWERPC_DEF_SVR("MPC5200B_v21",
6742
                    CPU_POWERPC_MPC5200B_v21, POWERPC_SVR_5200B_v21, G2LE),
6743
    /* MPC8241                                                               */
6744
    POWERPC_DEF("MPC8241",       CPU_POWERPC_MPC8241,                G2),
6745
    /* MPC8245                                                               */
6746
    POWERPC_DEF("MPC8245",       CPU_POWERPC_MPC8245,                G2),
6747
    /* MPC8247                                                               */
6748
    POWERPC_DEF("MPC8247",       CPU_POWERPC_MPC8247,                G2LE),
6749
    /* MPC8248                                                               */
6750
    POWERPC_DEF("MPC8248",       CPU_POWERPC_MPC8248,                G2LE),
6751
    /* MPC8250                                                               */
6752
    POWERPC_DEF("MPC8250",       CPU_POWERPC_MPC8250,                G2),
6753
    /* MPC8250 HiP3                                                          */
6754
    POWERPC_DEF("MPC8250_HiP3",  CPU_POWERPC_MPC8250_HiP3,           G2),
6755
    /* MPC8250 HiP4                                                          */
6756
    POWERPC_DEF("MPC8250_HiP4",  CPU_POWERPC_MPC8250_HiP4,           G2),
6757
    /* MPC8255                                                               */
6758
    POWERPC_DEF("MPC8255",       CPU_POWERPC_MPC8255,                G2),
6759
    /* MPC8255 HiP3                                                          */
6760
    POWERPC_DEF("MPC8255_HiP3",  CPU_POWERPC_MPC8255_HiP3,           G2),
6761
    /* MPC8255 HiP4                                                          */
6762
    POWERPC_DEF("MPC8255_HiP4",  CPU_POWERPC_MPC8255_HiP4,           G2),
6763
    /* MPC8260                                                               */
6764
    POWERPC_DEF("MPC8260",       CPU_POWERPC_MPC8260,                G2),
6765
    /* MPC8260 HiP3                                                          */
6766
    POWERPC_DEF("MPC8260_HiP3",  CPU_POWERPC_MPC8260_HiP3,           G2),
6767
    /* MPC8260 HiP4                                                          */
6768
    POWERPC_DEF("MPC8260_HiP4",  CPU_POWERPC_MPC8260_HiP4,           G2),
6769
    /* MPC8264                                                               */
6770
    POWERPC_DEF("MPC8264",       CPU_POWERPC_MPC8264,                G2),
6771
    /* MPC8264 HiP3                                                          */
6772
    POWERPC_DEF("MPC8264_HiP3",  CPU_POWERPC_MPC8264_HiP3,           G2),
6773
    /* MPC8264 HiP4                                                          */
6774
    POWERPC_DEF("MPC8264_HiP4",  CPU_POWERPC_MPC8264_HiP4,           G2),
6775
    /* MPC8265                                                               */
6776
    POWERPC_DEF("MPC8265",       CPU_POWERPC_MPC8265,                G2),
6777
    /* MPC8265 HiP3                                                          */
6778
    POWERPC_DEF("MPC8265_HiP3",  CPU_POWERPC_MPC8265_HiP3,           G2),
6779
    /* MPC8265 HiP4                                                          */
6780
    POWERPC_DEF("MPC8265_HiP4",  CPU_POWERPC_MPC8265_HiP4,           G2),
6781
    /* MPC8266                                                               */
6782
    POWERPC_DEF("MPC8266",       CPU_POWERPC_MPC8266,                G2),
6783
    /* MPC8266 HiP3                                                          */
6784
    POWERPC_DEF("MPC8266_HiP3",  CPU_POWERPC_MPC8266_HiP3,           G2),
6785
    /* MPC8266 HiP4                                                          */
6786
    POWERPC_DEF("MPC8266_HiP4",  CPU_POWERPC_MPC8266_HiP4,           G2),
6787
    /* MPC8270                                                               */
6788
    POWERPC_DEF("MPC8270",       CPU_POWERPC_MPC8270,                G2LE),
6789
    /* MPC8271                                                               */
6790
    POWERPC_DEF("MPC8271",       CPU_POWERPC_MPC8271,                G2LE),
6791
    /* MPC8272                                                               */
6792
    POWERPC_DEF("MPC8272",       CPU_POWERPC_MPC8272,                G2LE),
6793
    /* MPC8275                                                               */
6794
    POWERPC_DEF("MPC8275",       CPU_POWERPC_MPC8275,                G2LE),
6795
    /* MPC8280                                                               */
6796
    POWERPC_DEF("MPC8280",       CPU_POWERPC_MPC8280,                G2LE),
6797
    /* e200 family                                                           */
6798
    /* Generic PowerPC e200 core                                             */
6799
    POWERPC_DEF("e200",          CPU_POWERPC_e200,                   e200),
6800
    /* Generic MPC55xx core                                                  */
6801
#if defined (TODO)
6802
    POWERPC_DEF_SVR("MPC55xx",
6803
                    CPU_POWERPC_MPC55xx,      POWERPC_SVR_55xx,      e200),
6804
#endif
6805
#if defined (TODO)
6806
    /* PowerPC e200z0 core                                                   */
6807
    POWERPC_DEF("e200z0",        CPU_POWERPC_e200z0,                 e200),
6808
#endif
6809
#if defined (TODO)
6810
    /* PowerPC e200z1 core                                                   */
6811
    POWERPC_DEF("e200z1",        CPU_POWERPC_e200z1,                 e200),
6812
#endif
6813
#if defined (TODO)
6814
    /* PowerPC e200z3 core                                                   */
6815
    POWERPC_DEF("e200z3",        CPU_POWERPC_e200z3,                 e200),
6816
#endif
6817
    /* PowerPC e200z5 core                                                   */
6818
    POWERPC_DEF("e200z5",        CPU_POWERPC_e200z5,                 e200),
6819
    /* PowerPC e200z6 core                                                   */
6820
    POWERPC_DEF("e200z6",        CPU_POWERPC_e200z6,                 e200),
6821
    /* PowerPC e200 microcontrollers                                         */
6822
#if defined (TODO)
6823
    /* MPC5514E                                                              */
6824
    POWERPC_DEF_SVR("MPC5514E",
6825
                    CPU_POWERPC_MPC5514E,     POWERPC_SVR_5514E,     e200),
6826
#endif
6827
#if defined (TODO)
6828
    /* MPC5514E v0                                                           */
6829
    POWERPC_DEF_SVR("MPC5514E_v0",
6830
                    CPU_POWERPC_MPC5514E_v0,  POWERPC_SVR_5514E_v0,  e200),
6831
#endif
6832
#if defined (TODO)
6833
    /* MPC5514E v1                                                           */
6834
    POWERPC_DEF_SVR("MPC5514E_v1",
6835
                    CPU_POWERPC_MPC5514E_v1,  POWERPC_SVR_5514E_v1,  e200),
6836
#endif
6837
#if defined (TODO)
6838
    /* MPC5514G                                                              */
6839
    POWERPC_DEF_SVR("MPC5514G",
6840
                    CPU_POWERPC_MPC5514G,     POWERPC_SVR_5514G,     e200),
6841
#endif
6842
#if defined (TODO)
6843
    /* MPC5514G v0                                                           */
6844
    POWERPC_DEF_SVR("MPC5514G_v0",
6845
                    CPU_POWERPC_MPC5514G_v0,  POWERPC_SVR_5514G_v0,  e200),
6846
#endif
6847
#if defined (TODO)
6848
    /* MPC5514G v1                                                           */
6849
    POWERPC_DEF_SVR("MPC5514G_v1",
6850
                    CPU_POWERPC_MPC5514G_v1,  POWERPC_SVR_5514G_v1,  e200),
6851
#endif
6852
#if defined (TODO)
6853
    /* MPC5515S                                                              */
6854
    POWERPC_DEF_SVR("MPC5515S",
6855
                    CPU_POWERPC_MPC5515S,     POWERPC_SVR_5515S,     e200),
6856
#endif
6857
#if defined (TODO)
6858
    /* MPC5516E                                                              */
6859
    POWERPC_DEF_SVR("MPC5516E",
6860
                    CPU_POWERPC_MPC5516E,     POWERPC_SVR_5516E,     e200),
6861
#endif
6862
#if defined (TODO)
6863
    /* MPC5516E v0                                                           */
6864
    POWERPC_DEF_SVR("MPC5516E_v0",
6865
                    CPU_POWERPC_MPC5516E_v0,  POWERPC_SVR_5516E_v0,  e200),
6866
#endif
6867
#if defined (TODO)
6868
    /* MPC5516E v1                                                           */
6869
    POWERPC_DEF_SVR("MPC5516E_v1",
6870
                    CPU_POWERPC_MPC5516E_v1,  POWERPC_SVR_5516E_v1,  e200),
6871
#endif
6872
#if defined (TODO)
6873
    /* MPC5516G                                                              */
6874
    POWERPC_DEF_SVR("MPC5516G",
6875
                    CPU_POWERPC_MPC5516G,     POWERPC_SVR_5516G,     e200),
6876
#endif
6877
#if defined (TODO)
6878
    /* MPC5516G v0                                                           */
6879
    POWERPC_DEF_SVR("MPC5516G_v0",
6880
                    CPU_POWERPC_MPC5516G_v0,  POWERPC_SVR_5516G_v0,  e200),
6881
#endif
6882
#if defined (TODO)
6883
    /* MPC5516G v1                                                           */
6884
    POWERPC_DEF_SVR("MPC5516G_v1",
6885
                    CPU_POWERPC_MPC5516G_v1,  POWERPC_SVR_5516G_v1,  e200),
6886
#endif
6887
#if defined (TODO)
6888
    /* MPC5516S                                                              */
6889
    POWERPC_DEF_SVR("MPC5516S",
6890
                    CPU_POWERPC_MPC5516S,     POWERPC_SVR_5516S,     e200),
6891
#endif
6892
#if defined (TODO)
6893
    /* MPC5533                                                               */
6894
    POWERPC_DEF_SVR("MPC5533",
6895
                    CPU_POWERPC_MPC5533,      POWERPC_SVR_5533,      e200),
6896
#endif
6897
#if defined (TODO)
6898
    /* MPC5534                                                               */
6899
    POWERPC_DEF_SVR("MPC5534",
6900
                    CPU_POWERPC_MPC5534,      POWERPC_SVR_5534,      e200),
6901
#endif
6902
#if defined (TODO)
6903
    /* MPC5553                                                               */
6904
    POWERPC_DEF_SVR("MPC5553",
6905
                    CPU_POWERPC_MPC5553,      POWERPC_SVR_5553,      e200),
6906
#endif
6907
#if defined (TODO)
6908
    /* MPC5554                                                               */
6909
    POWERPC_DEF_SVR("MPC5554",
6910
                    CPU_POWERPC_MPC5554,      POWERPC_SVR_5554,      e200),
6911
#endif
6912
#if defined (TODO)
6913
    /* MPC5561                                                               */
6914
    POWERPC_DEF_SVR("MPC5561",
6915
                    CPU_POWERPC_MPC5561,      POWERPC_SVR_5561,      e200),
6916
#endif
6917
#if defined (TODO)
6918
    /* MPC5565                                                               */
6919
    POWERPC_DEF_SVR("MPC5565",
6920
                    CPU_POWERPC_MPC5565,      POWERPC_SVR_5565,      e200),
6921
#endif
6922
#if defined (TODO)
6923
    /* MPC5566                                                               */
6924
    POWERPC_DEF_SVR("MPC5566",
6925
                    CPU_POWERPC_MPC5566,      POWERPC_SVR_5566,      e200),
6926
#endif
6927
#if defined (TODO)
6928
    /* MPC5567                                                               */
6929
    POWERPC_DEF_SVR("MPC5567",
6930
                    CPU_POWERPC_MPC5567,      POWERPC_SVR_5567,      e200),
6931
#endif
6932
    /* e300 family                                                           */
6933
    /* Generic PowerPC e300 core                                             */
6934
    POWERPC_DEF("e300",          CPU_POWERPC_e300,                   e300),
6935
    /* PowerPC e300c1 core                                                   */
6936
    POWERPC_DEF("e300c1",        CPU_POWERPC_e300c1,                 e300),
6937
    /* PowerPC e300c2 core                                                   */
6938
    POWERPC_DEF("e300c2",        CPU_POWERPC_e300c2,                 e300),
6939
    /* PowerPC e300c3 core                                                   */
6940
    POWERPC_DEF("e300c3",        CPU_POWERPC_e300c3,                 e300),
6941
    /* PowerPC e300c4 core                                                   */
6942
    POWERPC_DEF("e300c4",        CPU_POWERPC_e300c4,                 e300),
6943
    /* PowerPC e300 microcontrollers                                         */
6944
#if defined (TODO)
6945
    /* MPC8313                                                               */
6946
    POWERPC_DEF_SVR("MPC8313",
6947
                    CPU_POWERPC_MPC8313,      POWERPC_SVR_8313,      e300),
6948
#endif
6949
#if defined (TODO)
6950
    /* MPC8313E                                                              */
6951
    POWERPC_DEF_SVR("MPC8313E",
6952
                    CPU_POWERPC_MPC8313E,     POWERPC_SVR_8313E,     e300),
6953
#endif
6954
#if defined (TODO)
6955
    /* MPC8314                                                               */
6956
    POWERPC_DEF_SVR("MPC8314",
6957
                    CPU_POWERPC_MPC8314,      POWERPC_SVR_8314,      e300),
6958
#endif
6959
#if defined (TODO)
6960
    /* MPC8314E                                                              */
6961
    POWERPC_DEF_SVR("MPC8314E",
6962
                    CPU_POWERPC_MPC8314E,     POWERPC_SVR_8314E,     e300),
6963
#endif
6964
#if defined (TODO)
6965
    /* MPC8315                                                               */
6966
    POWERPC_DEF_SVR("MPC8315",
6967
                    CPU_POWERPC_MPC8315,      POWERPC_SVR_8315,      e300),
6968
#endif
6969
#if defined (TODO)
6970
    /* MPC8315E                                                              */
6971
    POWERPC_DEF_SVR("MPC8315E",
6972
                    CPU_POWERPC_MPC8315E,     POWERPC_SVR_8315E,     e300),
6973
#endif
6974
#if defined (TODO)
6975
    /* MPC8321                                                               */
6976
    POWERPC_DEF_SVR("MPC8321",
6977
                    CPU_POWERPC_MPC8321,      POWERPC_SVR_8321,      e300),
6978
#endif
6979
#if defined (TODO)
6980
    /* MPC8321E                                                              */
6981
    POWERPC_DEF_SVR("MPC8321E",
6982
                    CPU_POWERPC_MPC8321E,     POWERPC_SVR_8321E,     e300),
6983
#endif
6984
#if defined (TODO)
6985
    /* MPC8323                                                               */
6986
    POWERPC_DEF_SVR("MPC8323",
6987
                    CPU_POWERPC_MPC8323,      POWERPC_SVR_8323,      e300),
6988
#endif
6989
#if defined (TODO)
6990
    /* MPC8323E                                                              */
6991
    POWERPC_DEF_SVR("MPC8323E",
6992
                    CPU_POWERPC_MPC8323E,     POWERPC_SVR_8323E,     e300),
6993
#endif
6994
    /* MPC8343A                                                              */
6995
    POWERPC_DEF_SVR("MPC8343A",
6996
                    CPU_POWERPC_MPC8343A,     POWERPC_SVR_8343A,     e300),
6997
    /* MPC8343EA                                                             */
6998
    POWERPC_DEF_SVR("MPC8343EA",
6999
                    CPU_POWERPC_MPC8343EA,    POWERPC_SVR_8343EA,    e300),
7000
    /* MPC8347A                                                              */
7001
    POWERPC_DEF_SVR("MPC8347A",
7002
                    CPU_POWERPC_MPC8347A,     POWERPC_SVR_8347A,     e300),
7003
    /* MPC8347AT                                                             */
7004
    POWERPC_DEF_SVR("MPC8347AT",
7005
                    CPU_POWERPC_MPC8347AT,    POWERPC_SVR_8347AT,    e300),
7006
    /* MPC8347AP                                                             */
7007
    POWERPC_DEF_SVR("MPC8347AP",
7008
                    CPU_POWERPC_MPC8347AP,    POWERPC_SVR_8347AP,    e300),
7009
    /* MPC8347EA                                                             */
7010
    POWERPC_DEF_SVR("MPC8347EA",
7011
                    CPU_POWERPC_MPC8347EA,    POWERPC_SVR_8347EA,    e300),
7012
    /* MPC8347EAT                                                            */
7013
    POWERPC_DEF_SVR("MPC8347EAT",
7014
                    CPU_POWERPC_MPC8347EAT,   POWERPC_SVR_8347EAT,   e300),
7015
    /* MPC8343EAP                                                            */
7016
    POWERPC_DEF_SVR("MPC8347EAP",
7017
                    CPU_POWERPC_MPC8347EAP,   POWERPC_SVR_8347EAP,   e300),
7018
    /* MPC8349                                                               */
7019
    POWERPC_DEF_SVR("MPC8349",
7020
                    CPU_POWERPC_MPC8349,      POWERPC_SVR_8349,      e300),
7021
    /* MPC8349A                                                              */
7022
    POWERPC_DEF_SVR("MPC8349A",
7023
                    CPU_POWERPC_MPC8349A,     POWERPC_SVR_8349A,     e300),
7024
    /* MPC8349E                                                              */
7025
    POWERPC_DEF_SVR("MPC8349E",
7026
                    CPU_POWERPC_MPC8349E,     POWERPC_SVR_8349E,     e300),
7027
    /* MPC8349EA                                                             */
7028
    POWERPC_DEF_SVR("MPC8349EA",
7029
                    CPU_POWERPC_MPC8349EA,    POWERPC_SVR_8349EA,    e300),
7030
#if defined (TODO)
7031
    /* MPC8358E                                                              */
7032
    POWERPC_DEF_SVR("MPC8358E",
7033
                    CPU_POWERPC_MPC8358E,     POWERPC_SVR_8358E,     e300),
7034
#endif
7035
#if defined (TODO)
7036
    /* MPC8360E                                                              */
7037
    POWERPC_DEF_SVR("MPC8360E",
7038
                    CPU_POWERPC_MPC8360E,     POWERPC_SVR_8360E,     e300),
7039
#endif
7040
    /* MPC8377                                                               */
7041
    POWERPC_DEF_SVR("MPC8377",
7042
                    CPU_POWERPC_MPC8377,      POWERPC_SVR_8377,      e300),
7043
    /* MPC8377E                                                              */
7044
    POWERPC_DEF_SVR("MPC8377E",
7045
                    CPU_POWERPC_MPC8377E,     POWERPC_SVR_8377E,     e300),
7046
    /* MPC8378                                                               */
7047
    POWERPC_DEF_SVR("MPC8378",
7048
                    CPU_POWERPC_MPC8378,      POWERPC_SVR_8378,      e300),
7049
    /* MPC8378E                                                              */
7050
    POWERPC_DEF_SVR("MPC8378E",
7051
                    CPU_POWERPC_MPC8378E,     POWERPC_SVR_8378E,     e300),
7052
    /* MPC8379                                                               */
7053
    POWERPC_DEF_SVR("MPC8379",
7054
                    CPU_POWERPC_MPC8379,      POWERPC_SVR_8379,      e300),
7055
    /* MPC8379E                                                              */
7056
    POWERPC_DEF_SVR("MPC8379E",
7057
                    CPU_POWERPC_MPC8379E,     POWERPC_SVR_8379E,     e300),
7058
    /* e500 family                                                           */
7059
    /* PowerPC e500 core                                                     */
7060
    POWERPC_DEF("e500",          CPU_POWERPC_e500,                   e500),
7061
    /* PowerPC e500 v1.0 core                                                */
7062
    POWERPC_DEF("e500_v10",      CPU_POWERPC_e500_v10,               e500),
7063
    /* PowerPC e500 v2.0 core                                                */
7064
    POWERPC_DEF("e500_v20",      CPU_POWERPC_e500_v20,               e500),
7065
    /* PowerPC e500v2 core                                                   */
7066
    POWERPC_DEF("e500v2",        CPU_POWERPC_e500v2,                 e500),
7067
    /* PowerPC e500v2 v1.0 core                                              */
7068
    POWERPC_DEF("e500v2_v10",    CPU_POWERPC_e500v2_v10,             e500),
7069
    /* PowerPC e500v2 v2.0 core                                              */
7070
    POWERPC_DEF("e500v2_v20",    CPU_POWERPC_e500v2_v20,             e500),
7071
    /* PowerPC e500v2 v2.1 core                                              */
7072
    POWERPC_DEF("e500v2_v21",    CPU_POWERPC_e500v2_v21,             e500),
7073
    /* PowerPC e500v2 v2.2 core                                              */
7074
    POWERPC_DEF("e500v2_v22",    CPU_POWERPC_e500v2_v22,             e500),
7075
    /* PowerPC e500v2 v3.0 core                                              */
7076
    POWERPC_DEF("e500v2_v30",    CPU_POWERPC_e500v2_v30,             e500),
7077
    /* PowerPC e500 microcontrollers                                         */
7078
    /* MPC8533                                                               */
7079
    POWERPC_DEF_SVR("MPC8533",
7080
                    CPU_POWERPC_MPC8533,      POWERPC_SVR_8533,      e500),
7081
    /* MPC8533 v1.0                                                          */
7082
    POWERPC_DEF_SVR("MPC8533_v10",
7083
                    CPU_POWERPC_MPC8533_v10,  POWERPC_SVR_8533_v10,  e500),
7084
    /* MPC8533 v1.1                                                          */
7085
    POWERPC_DEF_SVR("MPC8533_v11",
7086
                    CPU_POWERPC_MPC8533_v11,  POWERPC_SVR_8533_v11,  e500),
7087
    /* MPC8533E                                                              */
7088
    POWERPC_DEF_SVR("MPC8533E",
7089
                    CPU_POWERPC_MPC8533E,     POWERPC_SVR_8533E,     e500),
7090
    /* MPC8533E v1.0                                                         */
7091
    POWERPC_DEF_SVR("MPC8533E_v10",
7092
                    CPU_POWERPC_MPC8533E_v10, POWERPC_SVR_8533E_v10, e500),
7093
    POWERPC_DEF_SVR("MPC8533E_v11",
7094
                    CPU_POWERPC_MPC8533E_v11, POWERPC_SVR_8533E_v11, e500),
7095
    /* MPC8540                                                               */
7096
    POWERPC_DEF_SVR("MPC8540",
7097
                    CPU_POWERPC_MPC8540,      POWERPC_SVR_8540,      e500),
7098
    /* MPC8540 v1.0                                                          */
7099
    POWERPC_DEF_SVR("MPC8540_v10",
7100
                    CPU_POWERPC_MPC8540_v10,  POWERPC_SVR_8540_v10,  e500),
7101
    /* MPC8540 v2.0                                                          */
7102
    POWERPC_DEF_SVR("MPC8540_v20",
7103
                    CPU_POWERPC_MPC8540_v20,  POWERPC_SVR_8540_v20,  e500),
7104
    /* MPC8540 v2.1                                                          */
7105
    POWERPC_DEF_SVR("MPC8540_v21",
7106
                    CPU_POWERPC_MPC8540_v21,  POWERPC_SVR_8540_v21,  e500),
7107
    /* MPC8541                                                               */
7108
    POWERPC_DEF_SVR("MPC8541",
7109
                    CPU_POWERPC_MPC8541,      POWERPC_SVR_8541,      e500),
7110
    /* MPC8541 v1.0                                                          */
7111
    POWERPC_DEF_SVR("MPC8541_v10",
7112
                    CPU_POWERPC_MPC8541_v10,  POWERPC_SVR_8541_v10,  e500),
7113
    /* MPC8541 v1.1                                                          */
7114
    POWERPC_DEF_SVR("MPC8541_v11",
7115
                    CPU_POWERPC_MPC8541_v11,  POWERPC_SVR_8541_v11,  e500),
7116
    /* MPC8541E                                                              */
7117
    POWERPC_DEF_SVR("MPC8541E",
7118
                    CPU_POWERPC_MPC8541E,     POWERPC_SVR_8541E,     e500),
7119
    /* MPC8541E v1.0                                                         */
7120
    POWERPC_DEF_SVR("MPC8541E_v10",
7121
                    CPU_POWERPC_MPC8541E_v10, POWERPC_SVR_8541E_v10, e500),
7122
    /* MPC8541E v1.1                                                         */
7123
    POWERPC_DEF_SVR("MPC8541E_v11",
7124
                    CPU_POWERPC_MPC8541E_v11, POWERPC_SVR_8541E_v11, e500),
7125
    /* MPC8543                                                               */
7126
    POWERPC_DEF_SVR("MPC8543",
7127
                    CPU_POWERPC_MPC8543,      POWERPC_SVR_8543,      e500),
7128
    /* MPC8543 v1.0                                                          */
7129
    POWERPC_DEF_SVR("MPC8543_v10",
7130
                    CPU_POWERPC_MPC8543_v10,  POWERPC_SVR_8543_v10,  e500),
7131
    /* MPC8543 v1.1                                                          */
7132
    POWERPC_DEF_SVR("MPC8543_v11",
7133
                    CPU_POWERPC_MPC8543_v11,  POWERPC_SVR_8543_v11,  e500),
7134
    /* MPC8543 v2.0                                                          */
7135
    POWERPC_DEF_SVR("MPC8543_v20",
7136
                    CPU_POWERPC_MPC8543_v20,  POWERPC_SVR_8543_v20,  e500),
7137
    /* MPC8543 v2.1                                                          */
7138
    POWERPC_DEF_SVR("MPC8543_v21",
7139
                    CPU_POWERPC_MPC8543_v21,  POWERPC_SVR_8543_v21,  e500),
7140
    /* MPC8543E                                                              */
7141
    POWERPC_DEF_SVR("MPC8543E",
7142
                    CPU_POWERPC_MPC8543E,     POWERPC_SVR_8543E,     e500),
7143
    /* MPC8543E v1.0                                                         */
7144
    POWERPC_DEF_SVR("MPC8543E_v10",
7145
                    CPU_POWERPC_MPC8543E_v10, POWERPC_SVR_8543E_v10, e500),
7146
    /* MPC8543E v1.1                                                         */
7147
    POWERPC_DEF_SVR("MPC8543E_v11",
7148
                    CPU_POWERPC_MPC8543E_v11, POWERPC_SVR_8543E_v11, e500),
7149
    /* MPC8543E v2.0                                                         */
7150
    POWERPC_DEF_SVR("MPC8543E_v20",
7151
                    CPU_POWERPC_MPC8543E_v20, POWERPC_SVR_8543E_v20, e500),
7152
    /* MPC8543E v2.1                                                         */
7153
    POWERPC_DEF_SVR("MPC8543E_v21",
7154
                    CPU_POWERPC_MPC8543E_v21, POWERPC_SVR_8543E_v21, e500),
7155
    /* MPC8544                                                               */
7156
    POWERPC_DEF_SVR("MPC8544",
7157
                    CPU_POWERPC_MPC8544,      POWERPC_SVR_8544,      e500),
7158
    /* MPC8544 v1.0                                                          */
7159
    POWERPC_DEF_SVR("MPC8544_v10",
7160
                    CPU_POWERPC_MPC8544_v10,  POWERPC_SVR_8544_v10,  e500),
7161
    /* MPC8544 v1.1                                                          */
7162
    POWERPC_DEF_SVR("MPC8544_v11",
7163
                    CPU_POWERPC_MPC8544_v11,  POWERPC_SVR_8544_v11,  e500),
7164
    /* MPC8544E                                                              */
7165
    POWERPC_DEF_SVR("MPC8544E",
7166
                    CPU_POWERPC_MPC8544E,     POWERPC_SVR_8544E,     e500),
7167
    /* MPC8544E v1.0                                                         */
7168
    POWERPC_DEF_SVR("MPC8544E_v10",
7169
                    CPU_POWERPC_MPC8544E_v10, POWERPC_SVR_8544E_v10, e500),
7170
    /* MPC8544E v1.1                                                         */
7171
    POWERPC_DEF_SVR("MPC8544E_v11",
7172
                    CPU_POWERPC_MPC8544E_v11, POWERPC_SVR_8544E_v11, e500),
7173
    /* MPC8545                                                               */
7174
    POWERPC_DEF_SVR("MPC8545",
7175
                    CPU_POWERPC_MPC8545,      POWERPC_SVR_8545,      e500),
7176
    /* MPC8545 v2.0                                                          */
7177
    POWERPC_DEF_SVR("MPC8545_v20",
7178
                    CPU_POWERPC_MPC8545_v20,  POWERPC_SVR_8545_v20,  e500),
7179
    /* MPC8545 v2.1                                                          */
7180
    POWERPC_DEF_SVR("MPC8545_v21",
7181
                    CPU_POWERPC_MPC8545_v21,  POWERPC_SVR_8545_v21,  e500),
7182
    /* MPC8545E                                                              */
7183
    POWERPC_DEF_SVR("MPC8545E",
7184
                    CPU_POWERPC_MPC8545E,     POWERPC_SVR_8545E,     e500),
7185
    /* MPC8545E v2.0                                                         */
7186
    POWERPC_DEF_SVR("MPC8545E_v20",
7187
                    CPU_POWERPC_MPC8545E_v20, POWERPC_SVR_8545E_v20, e500),
7188
    /* MPC8545E v2.1                                                         */
7189
    POWERPC_DEF_SVR("MPC8545E_v21",
7190
                    CPU_POWERPC_MPC8545E_v21, POWERPC_SVR_8545E_v21, e500),
7191
    /* MPC8547E                                                              */
7192
    POWERPC_DEF_SVR("MPC8547E",
7193
                    CPU_POWERPC_MPC8547E,     POWERPC_SVR_8547E,     e500),
7194
    /* MPC8547E v2.0                                                         */
7195
    POWERPC_DEF_SVR("MPC8547E_v20",
7196
                    CPU_POWERPC_MPC8547E_v20, POWERPC_SVR_8547E_v20, e500),
7197
    /* MPC8547E v2.1                                                         */
7198
    POWERPC_DEF_SVR("MPC8547E_v21",
7199
                    CPU_POWERPC_MPC8547E_v21, POWERPC_SVR_8547E_v21, e500),
7200
    /* MPC8548                                                               */
7201
    POWERPC_DEF_SVR("MPC8548",
7202
                    CPU_POWERPC_MPC8548,      POWERPC_SVR_8548,      e500),
7203
    /* MPC8548 v1.0                                                          */
7204
    POWERPC_DEF_SVR("MPC8548_v10",
7205
                    CPU_POWERPC_MPC8548_v10,  POWERPC_SVR_8548_v10,  e500),
7206
    /* MPC8548 v1.1                                                          */
7207
    POWERPC_DEF_SVR("MPC8548_v11",
7208
                    CPU_POWERPC_MPC8548_v11,  POWERPC_SVR_8548_v11,  e500),
7209
    /* MPC8548 v2.0                                                          */
7210
    POWERPC_DEF_SVR("MPC8548_v20",
7211
                    CPU_POWERPC_MPC8548_v20,  POWERPC_SVR_8548_v20,  e500),
7212
    /* MPC8548 v2.1                                                          */
7213
    POWERPC_DEF_SVR("MPC8548_v21",
7214
                    CPU_POWERPC_MPC8548_v21,  POWERPC_SVR_8548_v21,  e500),
7215
    /* MPC8548E                                                              */
7216
    POWERPC_DEF_SVR("MPC8548E",
7217
                    CPU_POWERPC_MPC8548E,     POWERPC_SVR_8548E,     e500),
7218
    /* MPC8548E v1.0                                                         */
7219
    POWERPC_DEF_SVR("MPC8548E_v10",
7220
                    CPU_POWERPC_MPC8548E_v10, POWERPC_SVR_8548E_v10, e500),
7221
    /* MPC8548E v1.1                                                         */
7222
    POWERPC_DEF_SVR("MPC8548E_v11",
7223
                    CPU_POWERPC_MPC8548E_v11, POWERPC_SVR_8548E_v11, e500),
7224
    /* MPC8548E v2.0                                                         */
7225
    POWERPC_DEF_SVR("MPC8548E_v20",
7226
                    CPU_POWERPC_MPC8548E_v20, POWERPC_SVR_8548E_v20, e500),
7227
    /* MPC8548E v2.1                                                         */
7228
    POWERPC_DEF_SVR("MPC8548E_v21",
7229
                    CPU_POWERPC_MPC8548E_v21, POWERPC_SVR_8548E_v21, e500),
7230
    /* MPC8555                                                               */
7231
    POWERPC_DEF_SVR("MPC8555",
7232
                    CPU_POWERPC_MPC8555,      POWERPC_SVR_8555,      e500),
7233
    /* MPC8555 v1.0                                                          */
7234
    POWERPC_DEF_SVR("MPC8555_v10",
7235
                    CPU_POWERPC_MPC8555_v10,  POWERPC_SVR_8555_v10,  e500),
7236
    /* MPC8555 v1.1                                                          */
7237
    POWERPC_DEF_SVR("MPC8555_v11",
7238
                    CPU_POWERPC_MPC8555_v11,  POWERPC_SVR_8555_v11,  e500),
7239
    /* MPC8555E                                                              */
7240
    POWERPC_DEF_SVR("MPC8555E",
7241
                    CPU_POWERPC_MPC8555E,     POWERPC_SVR_8555E,     e500),
7242
    /* MPC8555E v1.0                                                         */
7243
    POWERPC_DEF_SVR("MPC8555E_v10",
7244
                    CPU_POWERPC_MPC8555E_v10, POWERPC_SVR_8555E_v10, e500),
7245
    /* MPC8555E v1.1                                                         */
7246
    POWERPC_DEF_SVR("MPC8555E_v11",
7247
                    CPU_POWERPC_MPC8555E_v11, POWERPC_SVR_8555E_v11, e500),
7248
    /* MPC8560                                                               */
7249
    POWERPC_DEF_SVR("MPC8560",
7250
                    CPU_POWERPC_MPC8560,      POWERPC_SVR_8560,      e500),
7251
    /* MPC8560 v1.0                                                          */
7252
    POWERPC_DEF_SVR("MPC8560_v10",
7253
                    CPU_POWERPC_MPC8560_v10,  POWERPC_SVR_8560_v10,  e500),
7254
    /* MPC8560 v2.0                                                          */
7255
    POWERPC_DEF_SVR("MPC8560_v20",
7256
                    CPU_POWERPC_MPC8560_v20,  POWERPC_SVR_8560_v20,  e500),
7257
    /* MPC8560 v2.1                                                          */
7258
    POWERPC_DEF_SVR("MPC8560_v21",
7259
                    CPU_POWERPC_MPC8560_v21,  POWERPC_SVR_8560_v21,  e500),
7260
    /* MPC8567                                                               */
7261
    POWERPC_DEF_SVR("MPC8567",
7262
                    CPU_POWERPC_MPC8567,      POWERPC_SVR_8567,      e500),
7263
    /* MPC8567E                                                              */
7264
    POWERPC_DEF_SVR("MPC8567E",
7265
                    CPU_POWERPC_MPC8567E,     POWERPC_SVR_8567E,     e500),
7266
    /* MPC8568                                                               */
7267
    POWERPC_DEF_SVR("MPC8568",
7268
                    CPU_POWERPC_MPC8568,      POWERPC_SVR_8568,      e500),
7269
    /* MPC8568E                                                              */
7270
    POWERPC_DEF_SVR("MPC8568E",
7271
                    CPU_POWERPC_MPC8568E,     POWERPC_SVR_8568E,     e500),
7272
    /* MPC8572                                                               */
7273
    POWERPC_DEF_SVR("MPC8572",
7274
                    CPU_POWERPC_MPC8572,      POWERPC_SVR_8572,      e500),
7275
    /* MPC8572E                                                              */
7276
    POWERPC_DEF_SVR("MPC8572E",
7277
                    CPU_POWERPC_MPC8572E,     POWERPC_SVR_8572E,     e500),
7278
    /* e600 family                                                           */
7279
    /* PowerPC e600 core                                                     */
7280
    POWERPC_DEF("e600",          CPU_POWERPC_e600,                   7400),
7281
    /* PowerPC e600 microcontrollers                                         */
7282
#if defined (TODO)
7283
    /* MPC8610                                                               */
7284
    POWERPC_DEF_SVR("MPC8610",
7285
                    CPU_POWERPC_MPC8610,      POWERPC_SVR_8610,      7400),
7286
#endif
7287
    /* MPC8641                                                               */
7288
    POWERPC_DEF_SVR("MPC8641",
7289
                    CPU_POWERPC_MPC8641,      POWERPC_SVR_8641,      7400),
7290
    /* MPC8641D                                                              */
7291
    POWERPC_DEF_SVR("MPC8641D",
7292
                    CPU_POWERPC_MPC8641D,     POWERPC_SVR_8641D,     7400),
7293
    /* 32 bits "classic" PowerPC                                             */
7294
    /* PowerPC 6xx family                                                    */
7295
    /* PowerPC 601                                                           */
7296
    POWERPC_DEF("601",           CPU_POWERPC_601,                    601),
7297
    /* PowerPC 601v0                                                         */
7298
    POWERPC_DEF("601v0",         CPU_POWERPC_601_v0,                 601),
7299
    /* PowerPC 601v1                                                         */
7300
    POWERPC_DEF("601v1",         CPU_POWERPC_601_v1,                 601),
7301
    /* PowerPC 601v2                                                         */
7302
    POWERPC_DEF("601v2",         CPU_POWERPC_601_v2,                 601),
7303
    /* PowerPC 602                                                           */
7304
    POWERPC_DEF("602",           CPU_POWERPC_602,                    602),
7305
    /* PowerPC 603                                                           */
7306
    POWERPC_DEF("603",           CPU_POWERPC_603,                    603),
7307
    /* Code name for PowerPC 603                                             */
7308
    POWERPC_DEF("Vanilla",       CPU_POWERPC_603,                    603),
7309
    /* PowerPC 603e                                                          */
7310
    POWERPC_DEF("603e",          CPU_POWERPC_603E,                   603E),
7311
    /* Code name for PowerPC 603e                                            */
7312
    POWERPC_DEF("Stretch",       CPU_POWERPC_603E,                   603E),
7313
    /* PowerPC 603e v1.1                                                     */
7314
    POWERPC_DEF("603e_v1.1",     CPU_POWERPC_603E_v11,               603E),
7315
    /* PowerPC 603e v1.2                                                     */
7316
    POWERPC_DEF("603e_v1.2",     CPU_POWERPC_603E_v12,               603E),
7317
    /* PowerPC 603e v1.3                                                     */
7318
    POWERPC_DEF("603e_v1.3",     CPU_POWERPC_603E_v13,               603E),
7319
    /* PowerPC 603e v1.4                                                     */
7320
    POWERPC_DEF("603e_v1.4",     CPU_POWERPC_603E_v14,               603E),
7321
    /* PowerPC 603e v2.2                                                     */
7322
    POWERPC_DEF("603e_v2.2",     CPU_POWERPC_603E_v22,               603E),
7323
    /* PowerPC 603e v3                                                       */
7324
    POWERPC_DEF("603e_v3",       CPU_POWERPC_603E_v3,                603E),
7325
    /* PowerPC 603e v4                                                       */
7326
    POWERPC_DEF("603e_v4",       CPU_POWERPC_603E_v4,                603E),
7327
    /* PowerPC 603e v4.1                                                     */
7328
    POWERPC_DEF("603e_v4.1",     CPU_POWERPC_603E_v41,               603E),
7329
    /* PowerPC 603e                                                          */
7330
    POWERPC_DEF("603e7",         CPU_POWERPC_603E7,                  603E),
7331
    /* PowerPC 603e7t                                                        */
7332
    POWERPC_DEF("603e7t",        CPU_POWERPC_603E7t,                 603E),
7333
    /* PowerPC 603e7v                                                        */
7334
    POWERPC_DEF("603e7v",        CPU_POWERPC_603E7v,                 603E),
7335
    /* Code name for PowerPC 603ev                                           */
7336
    POWERPC_DEF("Vaillant",      CPU_POWERPC_603E7v,                 603E),
7337
    /* PowerPC 603e7v1                                                       */
7338
    POWERPC_DEF("603e7v1",       CPU_POWERPC_603E7v1,                603E),
7339
    /* PowerPC 603e7v2                                                       */
7340
    POWERPC_DEF("603e7v2",       CPU_POWERPC_603E7v2,                603E),
7341
    /* PowerPC 603p                                                          */
7342
    /* to be checked */
7343
    POWERPC_DEF("603p",          CPU_POWERPC_603P,                   603),
7344
    /* PowerPC 603r                                                          */
7345
    POWERPC_DEF("603r",          CPU_POWERPC_603R,                   603E),
7346
    /* Code name for PowerPC 603r                                            */
7347
    POWERPC_DEF("Goldeneye",     CPU_POWERPC_603R,                   603E),
7348
    /* PowerPC 604                                                           */
7349
    POWERPC_DEF("604",           CPU_POWERPC_604,                    604),
7350
    /* PowerPC 604e                                                          */
7351
    /* XXX: code names "Sirocco" "Mach 5" */
7352
    POWERPC_DEF("604e",          CPU_POWERPC_604E,                   604),
7353
    /* PowerPC 604e v1.0                                                     */
7354
    POWERPC_DEF("604e_v1.0",     CPU_POWERPC_604E_v10,               604),
7355
    /* PowerPC 604e v2.2                                                     */
7356
    POWERPC_DEF("604e_v2.2",     CPU_POWERPC_604E_v22,               604),
7357
    /* PowerPC 604e v2.4                                                     */
7358
    POWERPC_DEF("604e_v2.4",     CPU_POWERPC_604E_v24,               604),
7359
    /* PowerPC 604r                                                          */
7360
    POWERPC_DEF("604r",          CPU_POWERPC_604R,                   604),
7361
#if defined(TODO)
7362
    /* PowerPC 604ev                                                         */
7363
    POWERPC_DEF("604ev",         CPU_POWERPC_604EV,                  604),
7364
#endif
7365
    /* PowerPC 7xx family                                                    */
7366
    /* Generic PowerPC 740 (G3)                                              */
7367
    POWERPC_DEF("740",           CPU_POWERPC_7x0,                    7x0),
7368
    /* Generic PowerPC 750 (G3)                                              */
7369
    POWERPC_DEF("750",           CPU_POWERPC_7x0,                    7x0),
7370
    /* Code name for generic PowerPC 740/750 (G3)                            */
7371
    POWERPC_DEF("Arthur",        CPU_POWERPC_7x0,                    7x0),
7372
    /* XXX: 750 codename "Typhoon" */
7373
    /* PowerPC 740/750 is also known as G3                                   */
7374
    POWERPC_DEF("G3",            CPU_POWERPC_7x0,                    7x0),
7375
    /* PowerPC 740 v2.0 (G3)                                                 */
7376
    POWERPC_DEF("740_v2.0",      CPU_POWERPC_7x0_v20,                7x0),
7377
    /* PowerPC 750 v2.0 (G3)                                                 */
7378
    POWERPC_DEF("750_v2.0",      CPU_POWERPC_7x0_v20,                7x0),
7379
    /* PowerPC 740 v2.1 (G3)                                                 */
7380
    POWERPC_DEF("740_v2.1",      CPU_POWERPC_7x0_v21,                7x0),
7381
    /* PowerPC 750 v2.1 (G3)                                                 */
7382
    POWERPC_DEF("750_v2.1",      CPU_POWERPC_7x0_v21,                7x0),
7383
    /* PowerPC 740 v2.2 (G3)                                                 */
7384
    POWERPC_DEF("740_v2.2",      CPU_POWERPC_7x0_v22,                7x0),
7385
    /* PowerPC 750 v2.2 (G3)                                                 */
7386
    POWERPC_DEF("750_v2.2",      CPU_POWERPC_7x0_v22,                7x0),
7387
    /* PowerPC 740 v3.0 (G3)                                                 */
7388
    POWERPC_DEF("740_v3.0",      CPU_POWERPC_7x0_v30,                7x0),
7389
    /* PowerPC 750 v3.0 (G3)                                                 */
7390
    POWERPC_DEF("750_v3.0",      CPU_POWERPC_7x0_v30,                7x0),
7391
    /* PowerPC 740 v3.1 (G3)                                                 */
7392
    POWERPC_DEF("740_v3.1",      CPU_POWERPC_7x0_v31,                7x0),
7393
    /* PowerPC 750 v3.1 (G3)                                                 */
7394
    POWERPC_DEF("750_v3.1",      CPU_POWERPC_7x0_v31,                7x0),
7395
    /* PowerPC 740E (G3)                                                     */
7396
    POWERPC_DEF("740e",          CPU_POWERPC_740E,                   7x0),
7397
    /* PowerPC 740P (G3)                                                     */
7398
    POWERPC_DEF("740p",          CPU_POWERPC_7x0P,                   7x0),
7399
    /* PowerPC 750P (G3)                                                     */
7400
    POWERPC_DEF("750p",          CPU_POWERPC_7x0P,                   7x0),
7401
    /* Code name for PowerPC 740P/750P (G3)                                  */
7402
    POWERPC_DEF("Conan/Doyle",   CPU_POWERPC_7x0P,                   7x0),
7403
    /* PowerPC 750CL (G3 embedded)                                           */
7404
    POWERPC_DEF("750cl",         CPU_POWERPC_750CL,                  7x0),
7405
    /* PowerPC 750CX (G3 embedded)                                           */
7406
    POWERPC_DEF("750cx",         CPU_POWERPC_750CX,                  7x0),
7407
    /* PowerPC 750CX v2.1 (G3 embedded)                                      */
7408
    POWERPC_DEF("750cx_v2.1",    CPU_POWERPC_750CX_v21,              7x0),
7409
    /* PowerPC 750CX v2.2 (G3 embedded)                                      */
7410
    POWERPC_DEF("750cx_v2.2",    CPU_POWERPC_750CX_v22,              7x0),
7411
    /* PowerPC 750CXe (G3 embedded)                                          */
7412
    POWERPC_DEF("750cxe",        CPU_POWERPC_750CXE,                 7x0),
7413
    /* PowerPC 750CXe v2.1 (G3 embedded)                                     */
7414
    POWERPC_DEF("750cxe_v21",    CPU_POWERPC_750CXE_v21,             7x0),
7415
    /* PowerPC 750CXe v2.2 (G3 embedded)                                     */
7416
    POWERPC_DEF("750cxe_v22",    CPU_POWERPC_750CXE_v22,             7x0),
7417
    /* PowerPC 750CXe v2.3 (G3 embedded)                                     */
7418
    POWERPC_DEF("750cxe_v23",    CPU_POWERPC_750CXE_v23,             7x0),
7419
    /* PowerPC 750CXe v2.4 (G3 embedded)                                     */
7420
    POWERPC_DEF("750cxe_v24",    CPU_POWERPC_750CXE_v24,             7x0),
7421
    /* PowerPC 750CXe v2.4b (G3 embedded)                                    */
7422
    POWERPC_DEF("750cxe_v24b",   CPU_POWERPC_750CXE_v24b,            7x0),
7423
    /* PowerPC 750CXe v3.1 (G3 embedded)                                     */
7424
    POWERPC_DEF("750cxe_v31",    CPU_POWERPC_750CXE_v31,             7x0),
7425
    /* PowerPC 750CXe v3.1b (G3 embedded)                                    */
7426
    POWERPC_DEF("750cxe_v3.1b",  CPU_POWERPC_750CXE_v31b,            7x0),
7427
    /* PowerPC 750CXr (G3 embedded)                                          */
7428
    POWERPC_DEF("750cxr",        CPU_POWERPC_750CXR,                 7x0),
7429
    /* PowerPC 750E (G3)                                                     */
7430
    POWERPC_DEF("750e",          CPU_POWERPC_750E,                   7x0),
7431
    /* PowerPC 750FL (G3 embedded)                                           */
7432
    POWERPC_DEF("750fl",         CPU_POWERPC_750FL,                  750fx),
7433
    /* PowerPC 750FX (G3 embedded)                                           */
7434
    POWERPC_DEF("750fx",         CPU_POWERPC_750FX,                  750fx),
7435
    /* PowerPC 750FX v1.0 (G3 embedded)                                      */
7436
    POWERPC_DEF("750fx_v1.0",    CPU_POWERPC_750FX_v10,              750fx),
7437
    /* PowerPC 750FX v2.0 (G3 embedded)                                      */
7438
    POWERPC_DEF("750fx_v2.0",    CPU_POWERPC_750FX_v20,              750fx),
7439
    /* PowerPC 750FX v2.1 (G3 embedded)                                      */
7440
    POWERPC_DEF("750fx_v2.1",    CPU_POWERPC_750FX_v21,              750fx),
7441
    /* PowerPC 750FX v2.2 (G3 embedded)                                      */
7442
    POWERPC_DEF("750fx_v2.2",    CPU_POWERPC_750FX_v22,              750fx),
7443
    /* PowerPC 750FX v2.3 (G3 embedded)                                      */
7444
    POWERPC_DEF("750fx_v2.3",    CPU_POWERPC_750FX_v23,              750fx),
7445
    /* PowerPC 750GL (G3 embedded)                                           */
7446
    POWERPC_DEF("750gl",         CPU_POWERPC_750GL,                  750fx),
7447
    /* PowerPC 750GX (G3 embedded)                                           */
7448
    POWERPC_DEF("750gx",         CPU_POWERPC_750GX,                  750fx),
7449
    /* PowerPC 750GX v1.0 (G3 embedded)                                      */
7450
    POWERPC_DEF("750gx_v1.0",    CPU_POWERPC_750GX_v10,              750fx),
7451
    /* PowerPC 750GX v1.1 (G3 embedded)                                      */
7452
    POWERPC_DEF("750gx_v1.1",    CPU_POWERPC_750GX_v11,              750fx),
7453
    /* PowerPC 750GX v1.2 (G3 embedded)                                      */
7454
    POWERPC_DEF("750gx_v1.2",    CPU_POWERPC_750GX_v12,              750fx),
7455
    /* PowerPC 750L (G3 embedded)                                            */
7456
    POWERPC_DEF("750l",          CPU_POWERPC_750L,                   7x0),
7457
    /* Code name for PowerPC 750L (G3 embedded)                              */
7458
    POWERPC_DEF("LoneStar",      CPU_POWERPC_750L,                   7x0),
7459
    /* PowerPC 750L v2.2 (G3 embedded)                                       */
7460
    POWERPC_DEF("750l_v2.2",     CPU_POWERPC_750L_v22,               7x0),
7461
    /* PowerPC 750L v3.0 (G3 embedded)                                       */
7462
    POWERPC_DEF("750l_v3.0",     CPU_POWERPC_750L_v30,               7x0),
7463
    /* PowerPC 750L v3.2 (G3 embedded)                                       */
7464
    POWERPC_DEF("750l_v3.2",     CPU_POWERPC_750L_v32,               7x0),
7465
    /* Generic PowerPC 745                                                   */
7466
    POWERPC_DEF("745",           CPU_POWERPC_7x5,                    7x5),
7467
    /* Generic PowerPC 755                                                   */
7468
    POWERPC_DEF("755",           CPU_POWERPC_7x5,                    7x5),
7469
    /* Code name for PowerPC 745/755                                         */
7470
    POWERPC_DEF("Goldfinger",    CPU_POWERPC_7x5,                    7x5),
7471
    /* PowerPC 745 v1.0                                                      */
7472
    POWERPC_DEF("745_v1.0",      CPU_POWERPC_7x5_v10,                7x5),
7473
    /* PowerPC 755 v1.0                                                      */
7474
    POWERPC_DEF("755_v1.0",      CPU_POWERPC_7x5_v10,                7x5),
7475
    /* PowerPC 745 v1.1                                                      */
7476
    POWERPC_DEF("745_v1.1",      CPU_POWERPC_7x5_v11,                7x5),
7477
    /* PowerPC 755 v1.1                                                      */
7478
    POWERPC_DEF("755_v1.1",      CPU_POWERPC_7x5_v11,                7x5),
7479
    /* PowerPC 745 v2.0                                                      */
7480
    POWERPC_DEF("745_v2.0",      CPU_POWERPC_7x5_v20,                7x5),
7481
    /* PowerPC 755 v2.0                                                      */
7482
    POWERPC_DEF("755_v2.0",      CPU_POWERPC_7x5_v20,                7x5),
7483
    /* PowerPC 745 v2.1                                                      */
7484
    POWERPC_DEF("745_v2.1",      CPU_POWERPC_7x5_v21,                7x5),
7485
    /* PowerPC 755 v2.1                                                      */
7486
    POWERPC_DEF("755_v2.1",      CPU_POWERPC_7x5_v21,                7x5),
7487
    /* PowerPC 745 v2.2                                                      */
7488
    POWERPC_DEF("745_v2.2",      CPU_POWERPC_7x5_v22,                7x5),
7489
    /* PowerPC 755 v2.2                                                      */
7490
    POWERPC_DEF("755_v2.2",      CPU_POWERPC_7x5_v22,                7x5),
7491
    /* PowerPC 745 v2.3                                                      */
7492
    POWERPC_DEF("745_v2.3",      CPU_POWERPC_7x5_v23,                7x5),
7493
    /* PowerPC 755 v2.3                                                      */
7494
    POWERPC_DEF("755_v2.3",      CPU_POWERPC_7x5_v23,                7x5),
7495
    /* PowerPC 745 v2.4                                                      */
7496
    POWERPC_DEF("745_v2.4",      CPU_POWERPC_7x5_v24,                7x5),
7497
    /* PowerPC 755 v2.4                                                      */
7498
    POWERPC_DEF("755_v2.4",      CPU_POWERPC_7x5_v24,                7x5),
7499
    /* PowerPC 745 v2.5                                                      */
7500
    POWERPC_DEF("745_v2.5",      CPU_POWERPC_7x5_v25,                7x5),
7501
    /* PowerPC 755 v2.5                                                      */
7502
    POWERPC_DEF("755_v2.5",      CPU_POWERPC_7x5_v25,                7x5),
7503
    /* PowerPC 745 v2.6                                                      */
7504
    POWERPC_DEF("745_v2.6",      CPU_POWERPC_7x5_v26,                7x5),
7505
    /* PowerPC 755 v2.6                                                      */
7506
    POWERPC_DEF("755_v2.6",      CPU_POWERPC_7x5_v26,                7x5),
7507
    /* PowerPC 745 v2.7                                                      */
7508
    POWERPC_DEF("745_v2.7",      CPU_POWERPC_7x5_v27,                7x5),
7509
    /* PowerPC 755 v2.7                                                      */
7510
    POWERPC_DEF("755_v2.7",      CPU_POWERPC_7x5_v27,                7x5),
7511
    /* PowerPC 745 v2.8                                                      */
7512
    POWERPC_DEF("745_v2.8",      CPU_POWERPC_7x5_v28,                7x5),
7513
    /* PowerPC 755 v2.8                                                      */
7514
    POWERPC_DEF("755_v2.8",      CPU_POWERPC_7x5_v28,                7x5),
7515
#if defined (TODO)
7516
    /* PowerPC 745P (G3)                                                     */
7517
    POWERPC_DEF("745p",          CPU_POWERPC_7x5P,                   7x5),
7518
    /* PowerPC 755P (G3)                                                     */
7519
    POWERPC_DEF("755p",          CPU_POWERPC_7x5P,                   7x5),
7520
#endif
7521
    /* PowerPC 74xx family                                                   */
7522
    /* PowerPC 7400 (G4)                                                     */
7523
    POWERPC_DEF("7400",          CPU_POWERPC_7400,                   7400),
7524
    /* Code name for PowerPC 7400                                            */
7525
    POWERPC_DEF("Max",           CPU_POWERPC_7400,                   7400),
7526
    /* PowerPC 74xx is also well known as G4                                 */
7527
    POWERPC_DEF("G4",            CPU_POWERPC_7400,                   7400),
7528
    /* PowerPC 7400 v1.0 (G4)                                                */
7529
    POWERPC_DEF("7400_v1.0",     CPU_POWERPC_7400_v10,               7400),
7530
    /* PowerPC 7400 v1.1 (G4)                                                */
7531
    POWERPC_DEF("7400_v1.1",     CPU_POWERPC_7400_v11,               7400),
7532
    /* PowerPC 7400 v2.0 (G4)                                                */
7533
    POWERPC_DEF("7400_v2.0",     CPU_POWERPC_7400_v20,               7400),
7534
    /* PowerPC 7400 v2.2 (G4)                                                */
7535
    POWERPC_DEF("7400_v2.2",     CPU_POWERPC_7400_v22,               7400),
7536
    /* PowerPC 7400 v2.6 (G4)                                                */
7537
    POWERPC_DEF("7400_v2.6",     CPU_POWERPC_7400_v26,               7400),
7538
    /* PowerPC 7400 v2.7 (G4)                                                */
7539
    POWERPC_DEF("7400_v2.7",     CPU_POWERPC_7400_v27,               7400),
7540
    /* PowerPC 7400 v2.8 (G4)                                                */
7541
    POWERPC_DEF("7400_v2.8",     CPU_POWERPC_7400_v28,               7400),
7542
    /* PowerPC 7400 v2.9 (G4)                                                */
7543
    POWERPC_DEF("7400_v2.9",     CPU_POWERPC_7400_v29,               7400),
7544
    /* PowerPC 7410 (G4)                                                     */
7545
    POWERPC_DEF("7410",          CPU_POWERPC_7410,                   7410),
7546
    /* Code name for PowerPC 7410                                            */
7547
    POWERPC_DEF("Nitro",         CPU_POWERPC_7410,                   7410),
7548
    /* PowerPC 7410 v1.0 (G4)                                                */
7549
    POWERPC_DEF("7410_v1.0",     CPU_POWERPC_7410_v10,               7410),
7550
    /* PowerPC 7410 v1.1 (G4)                                                */
7551
    POWERPC_DEF("7410_v1.1",     CPU_POWERPC_7410_v11,               7410),
7552
    /* PowerPC 7410 v1.2 (G4)                                                */
7553
    POWERPC_DEF("7410_v1.2",     CPU_POWERPC_7410_v12,               7410),
7554
    /* PowerPC 7410 v1.3 (G4)                                                */
7555
    POWERPC_DEF("7410_v1.3",     CPU_POWERPC_7410_v13,               7410),
7556
    /* PowerPC 7410 v1.4 (G4)                                                */
7557
    POWERPC_DEF("7410_v1.4",     CPU_POWERPC_7410_v14,               7410),
7558
    /* PowerPC 7448 (G4)                                                     */
7559
    POWERPC_DEF("7448",          CPU_POWERPC_7448,                   7400),
7560
    /* PowerPC 7448 v1.0 (G4)                                                */
7561
    POWERPC_DEF("7448_v1.0",     CPU_POWERPC_7448_v10,               7400),
7562
    /* PowerPC 7448 v1.1 (G4)                                                */
7563
    POWERPC_DEF("7448_v1.1",     CPU_POWERPC_7448_v11,               7400),
7564
    /* PowerPC 7448 v2.0 (G4)                                                */
7565
    POWERPC_DEF("7448_v2.0",     CPU_POWERPC_7448_v20,               7400),
7566
    /* PowerPC 7448 v2.1 (G4)                                                */
7567
    POWERPC_DEF("7448_v2.1",     CPU_POWERPC_7448_v21,               7400),
7568
    /* PowerPC 7450 (G4)                                                     */
7569
    POWERPC_DEF("7450",          CPU_POWERPC_7450,                   7450),
7570
    /* Code name for PowerPC 7450                                            */
7571
    POWERPC_DEF("Vger",          CPU_POWERPC_7450,                   7450),
7572
    /* PowerPC 7450 v1.0 (G4)                                                */
7573
    POWERPC_DEF("7450_v1.0",     CPU_POWERPC_7450_v10,               7450),
7574
    /* PowerPC 7450 v1.1 (G4)                                                */
7575
    POWERPC_DEF("7450_v1.1",     CPU_POWERPC_7450_v11,               7450),
7576
    /* PowerPC 7450 v1.2 (G4)                                                */
7577
    POWERPC_DEF("7450_v1.2",     CPU_POWERPC_7450_v12,               7450),
7578
    /* PowerPC 7450 v2.0 (G4)                                                */
7579
    POWERPC_DEF("7450_v2.0",     CPU_POWERPC_7450_v20,               7450),
7580
    /* PowerPC 7450 v2.1 (G4)                                                */
7581
    POWERPC_DEF("7450_v2.1",     CPU_POWERPC_7450_v21,               7450),
7582
    /* PowerPC 7441 (G4)                                                     */
7583
    POWERPC_DEF("7441",          CPU_POWERPC_74x1,                   7440),
7584
    /* PowerPC 7451 (G4)                                                     */
7585
    POWERPC_DEF("7451",          CPU_POWERPC_74x1,                   7450),
7586
    /* PowerPC 7441g (G4)                                                    */
7587
    POWERPC_DEF("7441g",         CPU_POWERPC_74x1G,                  7440),
7588
    /* PowerPC 7451g (G4)                                                    */
7589
    POWERPC_DEF("7451g",         CPU_POWERPC_74x1G,                  7450),
7590
    /* PowerPC 7445 (G4)                                                     */
7591
    POWERPC_DEF("7445",          CPU_POWERPC_74x5,                   7445),
7592
    /* PowerPC 7455 (G4)                                                     */
7593
    POWERPC_DEF("7455",          CPU_POWERPC_74x5,                   7455),
7594
    /* Code name for PowerPC 7445/7455                                       */
7595
    POWERPC_DEF("Apollo6",       CPU_POWERPC_74x5,                   7455),
7596
    /* PowerPC 7445 v1.0 (G4)                                                */
7597
    POWERPC_DEF("7445_v1.0",     CPU_POWERPC_74x5_v10,               7445),
7598
    /* PowerPC 7455 v1.0 (G4)                                                */
7599
    POWERPC_DEF("7455_v1.0",     CPU_POWERPC_74x5_v10,               7455),
7600
    /* PowerPC 7445 v2.1 (G4)                                                */
7601
    POWERPC_DEF("7445_v2.1",     CPU_POWERPC_74x5_v21,               7445),
7602
    /* PowerPC 7455 v2.1 (G4)                                                */
7603
    POWERPC_DEF("7455_v2.1",     CPU_POWERPC_74x5_v21,               7455),
7604
    /* PowerPC 7445 v3.2 (G4)                                                */
7605
    POWERPC_DEF("7445_v3.2",     CPU_POWERPC_74x5_v32,               7445),
7606
    /* PowerPC 7455 v3.2 (G4)                                                */
7607
    POWERPC_DEF("7455_v3.2",     CPU_POWERPC_74x5_v32,               7455),
7608
    /* PowerPC 7445 v3.3 (G4)                                                */
7609
    POWERPC_DEF("7445_v3.3",     CPU_POWERPC_74x5_v33,               7445),
7610
    /* PowerPC 7455 v3.3 (G4)                                                */
7611
    POWERPC_DEF("7455_v3.3",     CPU_POWERPC_74x5_v33,               7455),
7612
    /* PowerPC 7445 v3.4 (G4)                                                */
7613
    POWERPC_DEF("7445_v3.4",     CPU_POWERPC_74x5_v34,               7445),
7614
    /* PowerPC 7455 v3.4 (G4)                                                */
7615
    POWERPC_DEF("7455_v3.4",     CPU_POWERPC_74x5_v34,               7455),
7616
    /* PowerPC 7447 (G4)                                                     */
7617
    POWERPC_DEF("7447",          CPU_POWERPC_74x7,                   7445),
7618
    /* PowerPC 7457 (G4)                                                     */
7619
    POWERPC_DEF("7457",          CPU_POWERPC_74x7,                   7455),
7620
    /* Code name for PowerPC 7447/7457                                       */
7621
    POWERPC_DEF("Apollo7",       CPU_POWERPC_74x7,                   7455),
7622
    /* PowerPC 7447 v1.0 (G4)                                                */
7623
    POWERPC_DEF("7447_v1.0",     CPU_POWERPC_74x7_v10,               7445),
7624
    /* PowerPC 7457 v1.0 (G4)                                                */
7625
    POWERPC_DEF("7457_v1.0",     CPU_POWERPC_74x7_v10,               7455),
7626
    /* Code name for PowerPC 7447A/7457A                                     */
7627
    POWERPC_DEF("Apollo7PM",     CPU_POWERPC_74x7_v10,               7455),
7628
    /* PowerPC 7447 v1.1 (G4)                                                */
7629
    POWERPC_DEF("7447_v1.1",     CPU_POWERPC_74x7_v11,               7445),
7630
    /* PowerPC 7457 v1.1 (G4)                                                */
7631
    POWERPC_DEF("7457_v1.1",     CPU_POWERPC_74x7_v11,               7455),
7632
    /* PowerPC 7447 v1.2 (G4)                                                */
7633
    POWERPC_DEF("7447_v1.2",     CPU_POWERPC_74x7_v12,               7445),
7634
    /* PowerPC 7457 v1.2 (G4)                                                */
7635
    POWERPC_DEF("7457_v1.2",     CPU_POWERPC_74x7_v12,               7455),
7636
    /* 64 bits PowerPC                                                       */
7637
#if defined (TARGET_PPC64)
7638
    /* PowerPC 620                                                           */
7639
    /* XXX: code name "Trident" */
7640
    POWERPC_DEF("620",           CPU_POWERPC_620,                    620),
7641
#if defined (TODO)
7642
    /* PowerPC 630 (POWER3)                                                  */
7643
    /* XXX: code names: "Boxer" "Dino" */
7644
    POWERPC_DEF("630",           CPU_POWERPC_630,                    630),
7645
    POWERPC_DEF("POWER3",        CPU_POWERPC_630,                    630),
7646
#endif
7647
#if defined (TODO)
7648
    /* PowerPC 631 (Power 3+)                                                */
7649
    POWERPC_DEF("631",           CPU_POWERPC_631,                    631),
7650
    POWERPC_DEF("POWER3+",       CPU_POWERPC_631,                    631),
7651
#endif
7652
#if defined (TODO)
7653
    /* POWER4                                                                */
7654
    POWERPC_DEF("POWER4",        CPU_POWERPC_POWER4,                 POWER4),
7655
#endif
7656
#if defined (TODO)
7657
    /* POWER4p                                                               */
7658
    POWERPC_DEF("POWER4+",       CPU_POWERPC_POWER4P,                POWER4P),
7659
#endif
7660
#if defined (TODO)
7661
    /* POWER5                                                                */
7662
    POWERPC_DEF("POWER5",        CPU_POWERPC_POWER5,                 POWER5),
7663
    /* POWER5GR                                                              */
7664
    POWERPC_DEF("POWER5gr",      CPU_POWERPC_POWER5GR,               POWER5),
7665
#endif
7666
#if defined (TODO)
7667
    /* POWER5+                                                               */
7668
    POWERPC_DEF("POWER5+",       CPU_POWERPC_POWER5P,                POWER5P),
7669
    /* POWER5GS                                                              */
7670
    POWERPC_DEF("POWER5gs",      CPU_POWERPC_POWER5GS,               POWER5P),
7671
#endif
7672
#if defined (TODO)
7673
    /* POWER6                                                                */
7674
    POWERPC_DEF("POWER6",        CPU_POWERPC_POWER6,                 POWER6),
7675
    /* POWER6 running in POWER5 mode                                         */
7676
    POWERPC_DEF("POWER6_5",      CPU_POWERPC_POWER6_5,               POWER5),
7677
    /* POWER6A                                                               */
7678
    POWERPC_DEF("POWER6A",       CPU_POWERPC_POWER6A,                POWER6),
7679
#endif
7680
    /* PowerPC 970                                                           */
7681
    POWERPC_DEF("970",           CPU_POWERPC_970,                    970),
7682
    /* PowerPC 970FX (G5)                                                    */
7683
    POWERPC_DEF("970fx",         CPU_POWERPC_970FX,                  970FX),
7684
    /* PowerPC 970FX v1.0 (G5)                                               */
7685
    POWERPC_DEF("970fx_v1.0",    CPU_POWERPC_970FX_v10,              970FX),
7686
    /* PowerPC 970FX v2.0 (G5)                                               */
7687
    POWERPC_DEF("970fx_v2.0",    CPU_POWERPC_970FX_v20,              970FX),
7688
    /* PowerPC 970FX v2.1 (G5)                                               */
7689
    POWERPC_DEF("970fx_v2.1",    CPU_POWERPC_970FX_v21,              970FX),
7690
    /* PowerPC 970FX v3.0 (G5)                                               */
7691
    POWERPC_DEF("970fx_v3.0",    CPU_POWERPC_970FX_v30,              970FX),
7692
    /* PowerPC 970FX v3.1 (G5)                                               */
7693
    POWERPC_DEF("970fx_v3.1",    CPU_POWERPC_970FX_v31,              970FX),
7694
    /* PowerPC 970GX (G5)                                                    */
7695
    POWERPC_DEF("970gx",         CPU_POWERPC_970GX,                  970GX),
7696
    /* PowerPC 970MP                                                         */
7697
    POWERPC_DEF("970mp",         CPU_POWERPC_970MP,                  970MP),
7698
    /* PowerPC 970MP v1.0                                                    */
7699
    POWERPC_DEF("970mp_v1.0",    CPU_POWERPC_970MP_v10,              970MP),
7700
    /* PowerPC 970MP v1.1                                                    */
7701
    POWERPC_DEF("970mp_v1.1",    CPU_POWERPC_970MP_v11,              970MP),
7702
#if defined (TODO)
7703
    /* PowerPC Cell                                                          */
7704
    POWERPC_DEF("Cell",          CPU_POWERPC_CELL,                   970),
7705
#endif
7706
#if defined (TODO)
7707
    /* PowerPC Cell v1.0                                                     */
7708
    POWERPC_DEF("Cell_v1.0",     CPU_POWERPC_CELL_v10,               970),
7709
#endif
7710
#if defined (TODO)
7711
    /* PowerPC Cell v2.0                                                     */
7712
    POWERPC_DEF("Cell_v2.0",     CPU_POWERPC_CELL_v20,               970),
7713
#endif
7714
#if defined (TODO)
7715
    /* PowerPC Cell v3.0                                                     */
7716
    POWERPC_DEF("Cell_v3.0",     CPU_POWERPC_CELL_v30,               970),
7717
#endif
7718
#if defined (TODO)
7719
    /* PowerPC Cell v3.1                                                     */
7720
    POWERPC_DEF("Cell_v3.1",     CPU_POWERPC_CELL_v31,               970),
7721
#endif
7722
#if defined (TODO)
7723
    /* PowerPC Cell v3.2                                                     */
7724
    POWERPC_DEF("Cell_v3.2",     CPU_POWERPC_CELL_v32,               970),
7725
#endif
7726
#if defined (TODO)
7727
    /* RS64 (Apache/A35)                                                     */
7728
    /* This one seems to support the whole POWER2 instruction set
7729
     * and the PowerPC 64 one.
7730
     */
7731
    /* What about A10 & A30 ? */
7732
    POWERPC_DEF("RS64",          CPU_POWERPC_RS64,                   RS64),
7733
    POWERPC_DEF("Apache",        CPU_POWERPC_RS64,                   RS64),
7734
    POWERPC_DEF("A35",           CPU_POWERPC_RS64,                   RS64),
7735
#endif
7736
#if defined (TODO)
7737
    /* RS64-II (NorthStar/A50)                                               */
7738
    POWERPC_DEF("RS64-II",       CPU_POWERPC_RS64II,                 RS64),
7739
    POWERPC_DEF("NorthStar",     CPU_POWERPC_RS64II,                 RS64),
7740
    POWERPC_DEF("A50",           CPU_POWERPC_RS64II,                 RS64),
7741
#endif
7742
#if defined (TODO)
7743
    /* RS64-III (Pulsar)                                                     */
7744
    POWERPC_DEF("RS64-III",      CPU_POWERPC_RS64III,                RS64),
7745
    POWERPC_DEF("Pulsar",        CPU_POWERPC_RS64III,                RS64),
7746
#endif
7747
#if defined (TODO)
7748
    /* RS64-IV (IceStar/IStar/SStar)                                         */
7749
    POWERPC_DEF("RS64-IV",       CPU_POWERPC_RS64IV,                 RS64),
7750
    POWERPC_DEF("IceStar",       CPU_POWERPC_RS64IV,                 RS64),
7751
    POWERPC_DEF("IStar",         CPU_POWERPC_RS64IV,                 RS64),
7752
    POWERPC_DEF("SStar",         CPU_POWERPC_RS64IV,                 RS64),
7753
#endif
7754
#endif /* defined (TARGET_PPC64) */
7755
    /* POWER                                                                 */
7756
#if defined (TODO)
7757
    /* Original POWER                                                        */
7758
    POWERPC_DEF("POWER",         CPU_POWERPC_POWER,                  POWER),
7759
    POWERPC_DEF("RIOS",          CPU_POWERPC_POWER,                  POWER),
7760
    POWERPC_DEF("RSC",           CPU_POWERPC_POWER,                  POWER),
7761
    POWERPC_DEF("RSC3308",       CPU_POWERPC_POWER,                  POWER),
7762
    POWERPC_DEF("RSC4608",       CPU_POWERPC_POWER,                  POWER),
7763
#endif
7764
#if defined (TODO)
7765
    /* POWER2                                                                */
7766
    POWERPC_DEF("POWER2",        CPU_POWERPC_POWER2,                 POWER),
7767
    POWERPC_DEF("RSC2",          CPU_POWERPC_POWER2,                 POWER),
7768
    POWERPC_DEF("P2SC",          CPU_POWERPC_POWER2,                 POWER),
7769
#endif
7770
    /* PA semi cores                                                         */
7771
#if defined (TODO)
7772
    /* PA PA6T */
7773
    POWERPC_DEF("PA6T",          CPU_POWERPC_PA6T,                   PA6T),
7774
#endif
7775
    /* Generic PowerPCs                                                      */
7776
#if defined (TARGET_PPC64)
7777
    POWERPC_DEF("ppc64",         CPU_POWERPC_PPC64,                  PPC64),
7778
#endif
7779
    POWERPC_DEF("ppc32",         CPU_POWERPC_PPC32,                  PPC32),
7780
    POWERPC_DEF("ppc",           CPU_POWERPC_DEFAULT,                DEFAULT),
7781
    /* Fallback                                                              */
7782
    POWERPC_DEF("default",       CPU_POWERPC_DEFAULT,                DEFAULT),
7783
};
7784

    
7785
/*****************************************************************************/
7786
/* Generic CPU instanciation routine                                         */
7787
static void init_ppc_proc (CPUPPCState *env, const ppc_def_t *def)
7788
{
7789
#if !defined(CONFIG_USER_ONLY)
7790
    int i;
7791

    
7792
    env->irq_inputs = NULL;
7793
    /* Set all exception vectors to an invalid address */
7794
    for (i = 0; i < POWERPC_EXCP_NB; i++)
7795
        env->excp_vectors[i] = (target_ulong)(-1ULL);
7796
    env->excp_prefix = 0x00000000;
7797
    env->ivor_mask = 0x00000000;
7798
    env->ivpr_mask = 0x00000000;
7799
    /* Default MMU definitions */
7800
    env->nb_BATs = 0;
7801
    env->nb_tlb = 0;
7802
    env->nb_ways = 0;
7803
#endif
7804
    /* Register SPR common to all PowerPC implementations */
7805
    gen_spr_generic(env);
7806
    spr_register(env, SPR_PVR, "PVR",
7807
                 SPR_NOACCESS, SPR_NOACCESS,
7808
                 &spr_read_generic, SPR_NOACCESS,
7809
                 def->pvr);
7810
    /* Register SVR if it's defined to anything else than POWERPC_SVR_NONE */
7811
    if (def->svr != POWERPC_SVR_NONE) {
7812
        if (def->svr & POWERPC_SVR_E500) {
7813
            spr_register(env, SPR_E500_SVR, "SVR",
7814
                         SPR_NOACCESS, SPR_NOACCESS,
7815
                         &spr_read_generic, SPR_NOACCESS,
7816
                         def->svr & ~POWERPC_SVR_E500);
7817
        } else {
7818
            spr_register(env, SPR_SVR, "SVR",
7819
                         SPR_NOACCESS, SPR_NOACCESS,
7820
                         &spr_read_generic, SPR_NOACCESS,
7821
                         def->svr);
7822
        }
7823
    }
7824
    /* PowerPC implementation specific initialisations (SPRs, timers, ...) */
7825
    (*def->init_proc)(env);
7826
    /* MSR bits & flags consistency checks */
7827
    if (env->msr_mask & (1 << 25)) {
7828
        switch (env->flags & (POWERPC_FLAG_SPE | POWERPC_FLAG_VRE)) {
7829
        case POWERPC_FLAG_SPE:
7830
        case POWERPC_FLAG_VRE:
7831
            break;
7832
        default:
7833
            fprintf(stderr, "PowerPC MSR definition inconsistency\n"
7834
                    "Should define POWERPC_FLAG_SPE or POWERPC_FLAG_VRE\n");
7835
            exit(1);
7836
        }
7837
    } else if (env->flags & (POWERPC_FLAG_SPE | POWERPC_FLAG_VRE)) {
7838
        fprintf(stderr, "PowerPC MSR definition inconsistency\n"
7839
                "Should not define POWERPC_FLAG_SPE nor POWERPC_FLAG_VRE\n");
7840
        exit(1);
7841
    }
7842
    if (env->msr_mask & (1 << 17)) {
7843
        switch (env->flags & (POWERPC_FLAG_TGPR | POWERPC_FLAG_CE)) {
7844
        case POWERPC_FLAG_TGPR:
7845
        case POWERPC_FLAG_CE:
7846
            break;
7847
        default:
7848
            fprintf(stderr, "PowerPC MSR definition inconsistency\n"
7849
                    "Should define POWERPC_FLAG_TGPR or POWERPC_FLAG_CE\n");
7850
            exit(1);
7851
        }
7852
    } else if (env->flags & (POWERPC_FLAG_TGPR | POWERPC_FLAG_CE)) {
7853
        fprintf(stderr, "PowerPC MSR definition inconsistency\n"
7854
                "Should not define POWERPC_FLAG_TGPR nor POWERPC_FLAG_CE\n");
7855
        exit(1);
7856
    }
7857
    if (env->msr_mask & (1 << 10)) {
7858
        switch (env->flags & (POWERPC_FLAG_SE | POWERPC_FLAG_DWE |
7859
                              POWERPC_FLAG_UBLE)) {
7860
        case POWERPC_FLAG_SE:
7861
        case POWERPC_FLAG_DWE:
7862
        case POWERPC_FLAG_UBLE:
7863
            break;
7864
        default:
7865
            fprintf(stderr, "PowerPC MSR definition inconsistency\n"
7866
                    "Should define POWERPC_FLAG_SE or POWERPC_FLAG_DWE or "
7867
                    "POWERPC_FLAG_UBLE\n");
7868
            exit(1);
7869
        }
7870
    } else if (env->flags & (POWERPC_FLAG_SE | POWERPC_FLAG_DWE |
7871
                             POWERPC_FLAG_UBLE)) {
7872
        fprintf(stderr, "PowerPC MSR definition inconsistency\n"
7873
                "Should not define POWERPC_FLAG_SE nor POWERPC_FLAG_DWE nor "
7874
                "POWERPC_FLAG_UBLE\n");
7875
            exit(1);
7876
    }
7877
    if (env->msr_mask & (1 << 9)) {
7878
        switch (env->flags & (POWERPC_FLAG_BE | POWERPC_FLAG_DE)) {
7879
        case POWERPC_FLAG_BE:
7880
        case POWERPC_FLAG_DE:
7881
            break;
7882
        default:
7883
            fprintf(stderr, "PowerPC MSR definition inconsistency\n"
7884
                    "Should define POWERPC_FLAG_BE or POWERPC_FLAG_DE\n");
7885
            exit(1);
7886
        }
7887
    } else if (env->flags & (POWERPC_FLAG_BE | POWERPC_FLAG_DE)) {
7888
        fprintf(stderr, "PowerPC MSR definition inconsistency\n"
7889
                "Should not define POWERPC_FLAG_BE nor POWERPC_FLAG_DE\n");
7890
        exit(1);
7891
    }
7892
    if (env->msr_mask & (1 << 2)) {
7893
        switch (env->flags & (POWERPC_FLAG_PX | POWERPC_FLAG_PMM)) {
7894
        case POWERPC_FLAG_PX:
7895
        case POWERPC_FLAG_PMM:
7896
            break;
7897
        default:
7898
            fprintf(stderr, "PowerPC MSR definition inconsistency\n"
7899
                    "Should define POWERPC_FLAG_PX or POWERPC_FLAG_PMM\n");
7900
            exit(1);
7901
        }
7902
    } else if (env->flags & (POWERPC_FLAG_PX | POWERPC_FLAG_PMM)) {
7903
        fprintf(stderr, "PowerPC MSR definition inconsistency\n"
7904
                "Should not define POWERPC_FLAG_PX nor POWERPC_FLAG_PMM\n");
7905
        exit(1);
7906
    }
7907
    if ((env->flags & (POWERPC_FLAG_RTC_CLK | POWERPC_FLAG_BUS_CLK)) == 0) {
7908
        fprintf(stderr, "PowerPC flags inconsistency\n"
7909
                "Should define the time-base and decrementer clock source\n");
7910
        exit(1);
7911
    }
7912
    /* Allocate TLBs buffer when needed */
7913
#if !defined(CONFIG_USER_ONLY)
7914
    if (env->nb_tlb != 0) {
7915
        int nb_tlb = env->nb_tlb;
7916
        if (env->id_tlbs != 0)
7917
            nb_tlb *= 2;
7918
        env->tlb = qemu_mallocz(nb_tlb * sizeof(ppc_tlb_t));
7919
        /* Pre-compute some useful values */
7920
        env->tlb_per_way = env->nb_tlb / env->nb_ways;
7921
    }
7922
    if (env->irq_inputs == NULL) {
7923
        fprintf(stderr, "WARNING: no internal IRQ controller registered.\n"
7924
                " Attempt Qemu to crash very soon !\n");
7925
    }
7926
#endif
7927
    if (env->check_pow == NULL) {
7928
        fprintf(stderr, "WARNING: no power management check handler "
7929
                "registered.\n"
7930
                " Attempt Qemu to crash very soon !\n");
7931
    }
7932
}
7933

    
7934
#if defined(PPC_DUMP_CPU)
7935
static void dump_ppc_sprs (CPUPPCState *env)
7936
{
7937
    ppc_spr_t *spr;
7938
#if !defined(CONFIG_USER_ONLY)
7939
    uint32_t sr, sw;
7940
#endif
7941
    uint32_t ur, uw;
7942
    int i, j, n;
7943

    
7944
    printf("Special purpose registers:\n");
7945
    for (i = 0; i < 32; i++) {
7946
        for (j = 0; j < 32; j++) {
7947
            n = (i << 5) | j;
7948
            spr = &env->spr_cb[n];
7949
            uw = spr->uea_write != NULL && spr->uea_write != SPR_NOACCESS;
7950
            ur = spr->uea_read != NULL && spr->uea_read != SPR_NOACCESS;
7951
#if !defined(CONFIG_USER_ONLY)
7952
            sw = spr->oea_write != NULL && spr->oea_write != SPR_NOACCESS;
7953
            sr = spr->oea_read != NULL && spr->oea_read != SPR_NOACCESS;
7954
            if (sw || sr || uw || ur) {
7955
                printf("SPR: %4d (%03x) %-8s s%c%c u%c%c\n",
7956
                       (i << 5) | j, (i << 5) | j, spr->name,
7957
                       sw ? 'w' : '-', sr ? 'r' : '-',
7958
                       uw ? 'w' : '-', ur ? 'r' : '-');
7959
            }
7960
#else
7961
            if (uw || ur) {
7962
                printf("SPR: %4d (%03x) %-8s u%c%c\n",
7963
                       (i << 5) | j, (i << 5) | j, spr->name,
7964
                       uw ? 'w' : '-', ur ? 'r' : '-');
7965
            }
7966
#endif
7967
        }
7968
    }
7969
    fflush(stdout);
7970
    fflush(stderr);
7971
}
7972
#endif
7973

    
7974
/*****************************************************************************/
7975
#include <stdlib.h>
7976
#include <string.h>
7977

    
7978
int fflush (FILE *stream);
7979

    
7980
/* Opcode types */
7981
enum {
7982
    PPC_DIRECT   = 0, /* Opcode routine        */
7983
    PPC_INDIRECT = 1, /* Indirect opcode table */
7984
};
7985

    
7986
static inline int is_indirect_opcode (void *handler)
7987
{
7988
    return ((unsigned long)handler & 0x03) == PPC_INDIRECT;
7989
}
7990

    
7991
static inline opc_handler_t **ind_table(void *handler)
7992
{
7993
    return (opc_handler_t **)((unsigned long)handler & ~3);
7994
}
7995

    
7996
/* Instruction table creation */
7997
/* Opcodes tables creation */
7998
static void fill_new_table (opc_handler_t **table, int len)
7999
{
8000
    int i;
8001

    
8002
    for (i = 0; i < len; i++)
8003
        table[i] = &invalid_handler;
8004
}
8005

    
8006
static int create_new_table (opc_handler_t **table, unsigned char idx)
8007
{
8008
    opc_handler_t **tmp;
8009

    
8010
    tmp = malloc(0x20 * sizeof(opc_handler_t));
8011
    if (tmp == NULL)
8012
        return -1;
8013
    fill_new_table(tmp, 0x20);
8014
    table[idx] = (opc_handler_t *)((unsigned long)tmp | PPC_INDIRECT);
8015

    
8016
    return 0;
8017
}
8018

    
8019
static int insert_in_table (opc_handler_t **table, unsigned char idx,
8020
                            opc_handler_t *handler)
8021
{
8022
    if (table[idx] != &invalid_handler)
8023
        return -1;
8024
    table[idx] = handler;
8025

    
8026
    return 0;
8027
}
8028

    
8029
static int register_direct_insn (opc_handler_t **ppc_opcodes,
8030
                                 unsigned char idx, opc_handler_t *handler)
8031
{
8032
    if (insert_in_table(ppc_opcodes, idx, handler) < 0) {
8033
        printf("*** ERROR: opcode %02x already assigned in main "
8034
               "opcode table\n", idx);
8035
#if defined(DO_PPC_STATISTICS) || defined(PPC_DUMP_CPU)
8036
        printf("           Registered handler '%s' - new handler '%s'\n",
8037
               ppc_opcodes[idx]->oname, handler->oname);
8038
#endif
8039
        return -1;
8040
    }
8041

    
8042
    return 0;
8043
}
8044

    
8045
static int register_ind_in_table (opc_handler_t **table,
8046
                                  unsigned char idx1, unsigned char idx2,
8047
                                  opc_handler_t *handler)
8048
{
8049
    if (table[idx1] == &invalid_handler) {
8050
        if (create_new_table(table, idx1) < 0) {
8051
            printf("*** ERROR: unable to create indirect table "
8052
                   "idx=%02x\n", idx1);
8053
            return -1;
8054
        }
8055
    } else {
8056
        if (!is_indirect_opcode(table[idx1])) {
8057
            printf("*** ERROR: idx %02x already assigned to a direct "
8058
                   "opcode\n", idx1);
8059
#if defined(DO_PPC_STATISTICS) || defined(PPC_DUMP_CPU)
8060
            printf("           Registered handler '%s' - new handler '%s'\n",
8061
                   ind_table(table[idx1])[idx2]->oname, handler->oname);
8062
#endif
8063
            return -1;
8064
        }
8065
    }
8066
    if (handler != NULL &&
8067
        insert_in_table(ind_table(table[idx1]), idx2, handler) < 0) {
8068
        printf("*** ERROR: opcode %02x already assigned in "
8069
               "opcode table %02x\n", idx2, idx1);
8070
#if defined(DO_PPC_STATISTICS) || defined(PPC_DUMP_CPU)
8071
        printf("           Registered handler '%s' - new handler '%s'\n",
8072
               ind_table(table[idx1])[idx2]->oname, handler->oname);
8073
#endif
8074
        return -1;
8075
    }
8076

    
8077
    return 0;
8078
}
8079

    
8080
static int register_ind_insn (opc_handler_t **ppc_opcodes,
8081
                              unsigned char idx1, unsigned char idx2,
8082
                              opc_handler_t *handler)
8083
{
8084
    int ret;
8085

    
8086
    ret = register_ind_in_table(ppc_opcodes, idx1, idx2, handler);
8087

    
8088
    return ret;
8089
}
8090

    
8091
static int register_dblind_insn (opc_handler_t **ppc_opcodes,
8092
                                 unsigned char idx1, unsigned char idx2,
8093
                                 unsigned char idx3, opc_handler_t *handler)
8094
{
8095
    if (register_ind_in_table(ppc_opcodes, idx1, idx2, NULL) < 0) {
8096
        printf("*** ERROR: unable to join indirect table idx "
8097
               "[%02x-%02x]\n", idx1, idx2);
8098
        return -1;
8099
    }
8100
    if (register_ind_in_table(ind_table(ppc_opcodes[idx1]), idx2, idx3,
8101
                              handler) < 0) {
8102
        printf("*** ERROR: unable to insert opcode "
8103
               "[%02x-%02x-%02x]\n", idx1, idx2, idx3);
8104
        return -1;
8105
    }
8106

    
8107
    return 0;
8108
}
8109

    
8110
static int register_insn (opc_handler_t **ppc_opcodes, opcode_t *insn)
8111
{
8112
    if (insn->opc2 != 0xFF) {
8113
        if (insn->opc3 != 0xFF) {
8114
            if (register_dblind_insn(ppc_opcodes, insn->opc1, insn->opc2,
8115
                                     insn->opc3, &insn->handler) < 0)
8116
                return -1;
8117
        } else {
8118
            if (register_ind_insn(ppc_opcodes, insn->opc1,
8119
                                  insn->opc2, &insn->handler) < 0)
8120
                return -1;
8121
        }
8122
    } else {
8123
        if (register_direct_insn(ppc_opcodes, insn->opc1, &insn->handler) < 0)
8124
            return -1;
8125
    }
8126

    
8127
    return 0;
8128
}
8129

    
8130
static int test_opcode_table (opc_handler_t **table, int len)
8131
{
8132
    int i, count, tmp;
8133

    
8134
    for (i = 0, count = 0; i < len; i++) {
8135
        /* Consistency fixup */
8136
        if (table[i] == NULL)
8137
            table[i] = &invalid_handler;
8138
        if (table[i] != &invalid_handler) {
8139
            if (is_indirect_opcode(table[i])) {
8140
                tmp = test_opcode_table(ind_table(table[i]), 0x20);
8141
                if (tmp == 0) {
8142
                    free(table[i]);
8143
                    table[i] = &invalid_handler;
8144
                } else {
8145
                    count++;
8146
                }
8147
            } else {
8148
                count++;
8149
            }
8150
        }
8151
    }
8152

    
8153
    return count;
8154
}
8155

    
8156
static void fix_opcode_tables (opc_handler_t **ppc_opcodes)
8157
{
8158
    if (test_opcode_table(ppc_opcodes, 0x40) == 0)
8159
        printf("*** WARNING: no opcode defined !\n");
8160
}
8161

    
8162
/*****************************************************************************/
8163
static int create_ppc_opcodes (CPUPPCState *env, const ppc_def_t *def)
8164
{
8165
    opcode_t *opc, *start, *end;
8166

    
8167
    fill_new_table(env->opcodes, 0x40);
8168
    if (&opc_start < &opc_end) {
8169
        start = &opc_start;
8170
        end = &opc_end;
8171
    } else {
8172
        start = &opc_end;
8173
        end = &opc_start;
8174
    }
8175
    for (opc = start + 1; opc != end; opc++) {
8176
        if ((opc->handler.type & def->insns_flags) != 0) {
8177
            if (register_insn(env->opcodes, opc) < 0) {
8178
                printf("*** ERROR initializing PowerPC instruction "
8179
                       "0x%02x 0x%02x 0x%02x\n", opc->opc1, opc->opc2,
8180
                       opc->opc3);
8181
                return -1;
8182
            }
8183
        }
8184
    }
8185
    fix_opcode_tables(env->opcodes);
8186
    fflush(stdout);
8187
    fflush(stderr);
8188

    
8189
    return 0;
8190
}
8191

    
8192
#if defined(PPC_DUMP_CPU)
8193
static void dump_ppc_insns (CPUPPCState *env)
8194
{
8195
    opc_handler_t **table, *handler;
8196
    const unsigned char *p, *q;
8197
    uint8_t opc1, opc2, opc3;
8198

    
8199
    printf("Instructions set:\n");
8200
    /* opc1 is 6 bits long */
8201
    for (opc1 = 0x00; opc1 < 0x40; opc1++) {
8202
        table = env->opcodes;
8203
        handler = table[opc1];
8204
        if (is_indirect_opcode(handler)) {
8205
            /* opc2 is 5 bits long */
8206
            for (opc2 = 0; opc2 < 0x20; opc2++) {
8207
                table = env->opcodes;
8208
                handler = env->opcodes[opc1];
8209
                table = ind_table(handler);
8210
                handler = table[opc2];
8211
                if (is_indirect_opcode(handler)) {
8212
                    table = ind_table(handler);
8213
                    /* opc3 is 5 bits long */
8214
                    for (opc3 = 0; opc3 < 0x20; opc3++) {
8215
                        handler = table[opc3];
8216
                        if (handler->handler != &gen_invalid) {
8217
                            /* Special hack to properly dump SPE insns */
8218
                            p = strchr(handler->oname, '_');
8219
                            if (p == NULL) {
8220
                                printf("INSN: %02x %02x %02x (%02d %04d) : "
8221
                                       "%s\n",
8222
                                       opc1, opc2, opc3, opc1,
8223
                                       (opc3 << 5) | opc2,
8224
                                       handler->oname);
8225
                            } else {
8226
                                q = "speundef";
8227
                                if ((p - handler->oname) != strlen(q) ||
8228
                                    memcmp(handler->oname, q, strlen(q)) != 0) {
8229
                                    /* First instruction */
8230
                                    printf("INSN: %02x %02x %02x (%02d %04d) : "
8231
                                           "%.*s\n",
8232
                                           opc1, opc2 << 1, opc3, opc1,
8233
                                           (opc3 << 6) | (opc2 << 1),
8234
                                           (int)(p - handler->oname),
8235
                                           handler->oname);
8236
                                }
8237
                                if (strcmp(p + 1, q) != 0) {
8238
                                    /* Second instruction */
8239
                                    printf("INSN: %02x %02x %02x (%02d %04d) : "
8240
                                           "%s\n",
8241
                                           opc1, (opc2 << 1) | 1, opc3, opc1,
8242
                                           (opc3 << 6) | (opc2 << 1) | 1,
8243
                                           p + 1);
8244
                                }
8245
                            }
8246
                        }
8247
                    }
8248
                } else {
8249
                    if (handler->handler != &gen_invalid) {
8250
                        printf("INSN: %02x %02x -- (%02d %04d) : %s\n",
8251
                               opc1, opc2, opc1, opc2, handler->oname);
8252
                    }
8253
                }
8254
            }
8255
        } else {
8256
            if (handler->handler != &gen_invalid) {
8257
                printf("INSN: %02x -- -- (%02d ----) : %s\n",
8258
                       opc1, opc1, handler->oname);
8259
            }
8260
        }
8261
    }
8262
}
8263
#endif
8264

    
8265
int cpu_ppc_register_internal (CPUPPCState *env, const ppc_def_t *def)
8266
{
8267
    env->msr_mask = def->msr_mask;
8268
    env->mmu_model = def->mmu_model;
8269
    env->excp_model = def->excp_model;
8270
    env->bus_model = def->bus_model;
8271
    env->flags = def->flags;
8272
    env->bfd_mach = def->bfd_mach;
8273
    env->check_pow = def->check_pow;
8274
    if (create_ppc_opcodes(env, def) < 0)
8275
        return -1;
8276
    init_ppc_proc(env, def);
8277
#if defined(PPC_DUMP_CPU)
8278
    {
8279
        const unsigned char *mmu_model, *excp_model, *bus_model;
8280
        switch (env->mmu_model) {
8281
        case POWERPC_MMU_32B:
8282
            mmu_model = "PowerPC 32";
8283
            break;
8284
        case POWERPC_MMU_SOFT_6xx:
8285
            mmu_model = "PowerPC 6xx/7xx with software driven TLBs";
8286
            break;
8287
        case POWERPC_MMU_SOFT_74xx:
8288
            mmu_model = "PowerPC 74xx with software driven TLBs";
8289
            break;
8290
        case POWERPC_MMU_SOFT_4xx:
8291
            mmu_model = "PowerPC 4xx with software driven TLBs";
8292
            break;
8293
        case POWERPC_MMU_SOFT_4xx_Z:
8294
            mmu_model = "PowerPC 4xx with software driven TLBs "
8295
                "and zones protections";
8296
            break;
8297
        case POWERPC_MMU_REAL:
8298
            mmu_model = "PowerPC real mode only";
8299
            break;
8300
        case POWERPC_MMU_MPC8xx:
8301
            mmu_model = "PowerPC MPC8xx";
8302
            break;
8303
        case POWERPC_MMU_BOOKE:
8304
            mmu_model = "PowerPC BookE";
8305
            break;
8306
        case POWERPC_MMU_BOOKE_FSL:
8307
            mmu_model = "PowerPC BookE FSL";
8308
            break;
8309
        case POWERPC_MMU_601:
8310
            mmu_model = "PowerPC 601";
8311
            break;
8312
#if defined (TARGET_PPC64)
8313
        case POWERPC_MMU_64B:
8314
            mmu_model = "PowerPC 64";
8315
            break;
8316
        case POWERPC_MMU_620:
8317
            mmu_model = "PowerPC 620";
8318
            break;
8319
#endif
8320
        default:
8321
            mmu_model = "Unknown or invalid";
8322
            break;
8323
        }
8324
        switch (env->excp_model) {
8325
        case POWERPC_EXCP_STD:
8326
            excp_model = "PowerPC";
8327
            break;
8328
        case POWERPC_EXCP_40x:
8329
            excp_model = "PowerPC 40x";
8330
            break;
8331
        case POWERPC_EXCP_601:
8332
            excp_model = "PowerPC 601";
8333
            break;
8334
        case POWERPC_EXCP_602:
8335
            excp_model = "PowerPC 602";
8336
            break;
8337
        case POWERPC_EXCP_603:
8338
            excp_model = "PowerPC 603";
8339
            break;
8340
        case POWERPC_EXCP_603E:
8341
            excp_model = "PowerPC 603e";
8342
            break;
8343
        case POWERPC_EXCP_604:
8344
            excp_model = "PowerPC 604";
8345
            break;
8346
        case POWERPC_EXCP_7x0:
8347
            excp_model = "PowerPC 740/750";
8348
            break;
8349
        case POWERPC_EXCP_7x5:
8350
            excp_model = "PowerPC 745/755";
8351
            break;
8352
        case POWERPC_EXCP_74xx:
8353
            excp_model = "PowerPC 74xx";
8354
            break;
8355
        case POWERPC_EXCP_BOOKE:
8356
            excp_model = "PowerPC BookE";
8357
            break;
8358
#if defined (TARGET_PPC64)
8359
        case POWERPC_EXCP_970:
8360
            excp_model = "PowerPC 970";
8361
            break;
8362
#endif
8363
        default:
8364
            excp_model = "Unknown or invalid";
8365
            break;
8366
        }
8367
        switch (env->bus_model) {
8368
        case PPC_FLAGS_INPUT_6xx:
8369
            bus_model = "PowerPC 6xx";
8370
            break;
8371
        case PPC_FLAGS_INPUT_BookE:
8372
            bus_model = "PowerPC BookE";
8373
            break;
8374
        case PPC_FLAGS_INPUT_405:
8375
            bus_model = "PowerPC 405";
8376
            break;
8377
        case PPC_FLAGS_INPUT_401:
8378
            bus_model = "PowerPC 401/403";
8379
            break;
8380
        case PPC_FLAGS_INPUT_RCPU:
8381
            bus_model = "RCPU / MPC8xx";
8382
            break;
8383
#if defined (TARGET_PPC64)
8384
        case PPC_FLAGS_INPUT_970:
8385
            bus_model = "PowerPC 970";
8386
            break;
8387
#endif
8388
        default:
8389
            bus_model = "Unknown or invalid";
8390
            break;
8391
        }
8392
        printf("PowerPC %-12s : PVR %08x MSR %016" PRIx64 "\n"
8393
               "    MMU model        : %s\n",
8394
               def->name, def->pvr, def->msr_mask, mmu_model);
8395
#if !defined(CONFIG_USER_ONLY)
8396
        if (env->tlb != NULL) {
8397
            printf("                       %d %s TLB in %d ways\n",
8398
                   env->nb_tlb, env->id_tlbs ? "splitted" : "merged",
8399
                   env->nb_ways);
8400
        }
8401
#endif
8402
        printf("    Exceptions model : %s\n"
8403
               "    Bus model        : %s\n",
8404
               excp_model, bus_model);
8405
        printf("    MSR features     :\n");
8406
        if (env->flags & POWERPC_FLAG_SPE)
8407
            printf("                        signal processing engine enable"
8408
                   "\n");
8409
        else if (env->flags & POWERPC_FLAG_VRE)
8410
            printf("                        vector processor enable\n");
8411
        if (env->flags & POWERPC_FLAG_TGPR)
8412
            printf("                        temporary GPRs\n");
8413
        else if (env->flags & POWERPC_FLAG_CE)
8414
            printf("                        critical input enable\n");
8415
        if (env->flags & POWERPC_FLAG_SE)
8416
            printf("                        single-step trace mode\n");
8417
        else if (env->flags & POWERPC_FLAG_DWE)
8418
            printf("                        debug wait enable\n");
8419
        else if (env->flags & POWERPC_FLAG_UBLE)
8420
            printf("                        user BTB lock enable\n");
8421
        if (env->flags & POWERPC_FLAG_BE)
8422
            printf("                        branch-step trace mode\n");
8423
        else if (env->flags & POWERPC_FLAG_DE)
8424
            printf("                        debug interrupt enable\n");
8425
        if (env->flags & POWERPC_FLAG_PX)
8426
            printf("                        inclusive protection\n");
8427
        else if (env->flags & POWERPC_FLAG_PMM)
8428
            printf("                        performance monitor mark\n");
8429
        if (env->flags == POWERPC_FLAG_NONE)
8430
            printf("                        none\n");
8431
        printf("    Time-base/decrementer clock source: %s\n",
8432
               env->flags & POWERPC_FLAG_RTC_CLK ? "RTC clock" : "bus clock");
8433
    }
8434
    dump_ppc_insns(env);
8435
    dump_ppc_sprs(env);
8436
    fflush(stdout);
8437
#endif
8438

    
8439
    return 0;
8440
}
8441

    
8442
static const ppc_def_t *ppc_find_by_pvr (uint32_t pvr)
8443
{
8444
    const ppc_def_t *ret;
8445
    uint32_t pvr_rev;
8446
    int i, best, match, best_match, max;
8447

    
8448
    ret = NULL;
8449
    max = sizeof(ppc_defs) / sizeof(ppc_def_t);
8450
    best = -1;
8451
    pvr_rev = pvr & 0xFFFF;
8452
    /* We want all specified bits to match */
8453
    best_match = 32 - ctz32(pvr_rev);
8454
    for (i = 0; i < max; i++) {
8455
        /* We check that the 16 higher bits are the same to ensure the CPU
8456
         * model will be the choosen one.
8457
         */
8458
        if (((pvr ^ ppc_defs[i].pvr) >> 16) == 0) {
8459
            /* We want as much as possible of the low-level 16 bits
8460
             * to be the same but we allow inexact matches.
8461
             */
8462
            match = clz32(pvr_rev ^ (ppc_defs[i].pvr & 0xFFFF));
8463
            /* We check '>=' instead of '>' because the PPC_defs table
8464
             * is ordered by increasing revision.
8465
             * Then, we will match the higher revision compatible
8466
             * with the requested PVR
8467
             */
8468
            if (match >= best_match) {
8469
                best = i;
8470
                best_match = match;
8471
            }
8472
        }
8473
    }
8474
    if (best != -1)
8475
        ret = &ppc_defs[best];
8476

    
8477
    return ret;
8478
}
8479

    
8480
#include <ctype.h>
8481

    
8482
const ppc_def_t *cpu_ppc_find_by_name (const unsigned char *name)
8483
{
8484
    const ppc_def_t *ret;
8485
    const unsigned char *p;
8486
    int i, max, len;
8487

    
8488
    /* Check if the given name is a PVR */
8489
    len = strlen(name);
8490
    if (len == 10 && name[0] == '0' && name[1] == 'x') {
8491
        p = name + 2;
8492
        goto check_pvr;
8493
    } else if (len == 8) {
8494
        p = name;
8495
    check_pvr:
8496
        for (i = 0; i < 8; i++) {
8497
            if (!isxdigit(*p++))
8498
                break;
8499
        }
8500
        if (i == 8)
8501
            return ppc_find_by_pvr(strtoul(name, NULL, 16));
8502
    }
8503
    ret = NULL;
8504
    max = sizeof(ppc_defs) / sizeof(ppc_def_t);
8505
    for (i = 0; i < max; i++) {
8506
        if (strcasecmp(name, ppc_defs[i].name) == 0) {
8507
            ret = &ppc_defs[i];
8508
            break;
8509
        }
8510
    }
8511

    
8512
    return ret;
8513
}
8514

    
8515
void ppc_cpu_list (FILE *f, int (*cpu_fprintf)(FILE *f, const char *fmt, ...))
8516
{
8517
    int i, max;
8518

    
8519
    max = sizeof(ppc_defs) / sizeof(ppc_def_t);
8520
    for (i = 0; i < max; i++) {
8521
        (*cpu_fprintf)(f, "PowerPC %-16s PVR %08x\n",
8522
                       ppc_defs[i].name, ppc_defs[i].pvr);
8523
    }
8524
}