blob: ebfe887573135c4e4442a50cf9aa28b1be74b8f8 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
|
/*++
Copyright (c) 1993 IBM Corporation
Module Name:
ppcinst.h
Abstract:
PowerPC instruction and floating constant definitions.
Author:
Rick Simpson 30 July 1993
Revision History:
--*/
#ifndef _PPCINST_
#define _PPCINST_
//
// POWERPC INSTRUCTION FORMAT STRUCTURES
//
typedef union _PPC_INSTRUCTION {
ULONG Long;
UCHAR Byte[4];
struct {
ULONG bit31 : 1;
ULONG bit30 : 1;
LONG bit6_29 : 24;
ULONG bit0_5 : 6;
} i_f;
#define Primary_Op i_f.bit0_5
#define Iform_LI i_f.bit6_29
#define Iform_AA i_f.bit30
#define Iform_LK i_f.bit31
struct {
ULONG bit31 : 1;
ULONG bit30 : 1;
LONG bit16_29 : 14;
ULONG bit11_15 : 5;
ULONG bit6_10 : 5;
ULONG bit0_5 : 6;
} b_f;
#define Bform_BO b_f.bit6_10
#define Bform_BI b_f.bit11_15
#define Bform_BD b_f.bit16_29
#define Bform_AA b_f.bit30
#define Bform_LK b_f.bit31
struct {
ULONG bit31 : 1;
ULONG bit30 : 1;
ULONG bit6_29 : 24;
ULONG bit0_5 : 6;
} sc_f;
#define SCform_XO sc_f.bit30
struct {
LONG bit16_31 : 16;
ULONG bit11_15 : 5;
ULONG bit6_10 : 5;
ULONG bit0_5 : 6;
} d_f1;
struct {
ULONG bit16_31 : 16;
ULONG bit11_15 : 5;
ULONG bit10 : 1;
ULONG bit9 : 1;
ULONG bit6_8 : 3;
ULONG bit0_5 : 6;
} d_f2;
#define Dform_RT d_f1.bit6_10
#define Dform_RS d_f1.bit6_10
#define Dform_TO d_f1.bit6_10
#define Dform_FRT d_f1.bit6_10
#define Dform_FRS d_f1.bit6_10
#define Dform_BF d_f2.bit6_8
#define Dform_L d_f2.bit10
#define Dform_RA d_f1.bit11_15
#define Dform_D d_f1.bit16_31
#define Dform_SI d_f1.bit16_31
#define Dform_UI d_f2.bit16_31
struct {
ULONG bit30_31 : 2;
LONG bit16_29 : 14;
ULONG bit11_15 : 5;
ULONG bit6_10 : 5;
ULONG bit0_5 : 6;
} ds_f;
#define DSform_RT ds_f.bit6_10
#define DSform_RS ds_f.bit6_10
#define DSform_RA ds_f.bit11_15
#define DSform_DS ds_f.bit16_29
#define DSform_XO ds_f.bit30_31
struct {
ULONG bit31 : 1;
ULONG bit21_30 : 10;
ULONG bit16_20 : 5;
ULONG bit11_15 : 5;
ULONG bit6_10 : 5;
ULONG bit0_5 : 6;
} x_f1;
struct {
ULONG bit20_31 : 12;
ULONG bit16_19 : 4;
ULONG bit14_15 : 2;
ULONG bit11_13 : 3;
ULONG bit10 : 1;
ULONG bit9 : 1;
ULONG bit6_8 : 3;
ULONG bit0_5 : 6;
} x_f2;
struct {
ULONG bit16_31 : 16;
ULONG bit12_15 : 4;
ULONG bit0_11 : 12;
} x_f3;
#define Xform_RT x_f1.bit6_10
#define Xform_RS x_f1.bit6_10
#define Xform_TO x_f1.bit6_10
#define Xform_FRT x_f1.bit6_10
#define Xform_FRS x_f1.bit6_10
#define Xform_BT x_f1.bit6_10
#define Xform_BF x_f2.bit6_8
#define Xform_L x_f2.bit10
#define Xform_RA x_f1.bit11_15
#define Xform_FRA x_f1.bit11_15
#define Xform_BFA x_f2.bit11_13
#define Xform_SR x_f3.bit12_15
#define Xform_RB x_f1.bit16_20
#define Xform_NB x_f1.bit16_20
#define Xform_SH x_f1.bit16_20
#define Xform_FRB x_f1.bit16_20
#define Xform_U x_f2.bit16_19
#define Xform_XO x_f1.bit21_30
#define Xform_RC x_f1.bit31
struct {
ULONG bit31 : 1;
ULONG bit21_30 : 10;
ULONG bit16_20 : 5;
ULONG bit11_15 : 5;
ULONG bit6_10 : 5;
ULONG bit0_5 : 6;
} xl_f1;
struct {
ULONG bit14_31 : 18;
ULONG bit11_13 : 3;
ULONG bit9_10 : 2;
ULONG bit6_8 : 3;
ULONG bit0_5 : 6;
} xl_f2;
#define XLform_LK xl_f1.bit31
#define XLform_XO xl_f1.bit21_30
#define XLform_BB xl_f1.bit16_20
#define XLform_BA xl_f1.bit11_15
#define XLform_BI xl_f1.bit11_15
#define XLform_BFA xl_f2.bit11_13
#define XLform_BT xl_f1.bit6_10
#define XLform_BO xl_f1.bit6_10
#define XLform_BF xl_f2.bit6_8
struct {
ULONG bit31 : 1;
ULONG bit21_30 : 10;
ULONG bit11_20 : 10;
ULONG bit6_10 : 5;
ULONG bit0_5 : 6;
} xfx_f1;
struct {
ULONG bit20_31 : 12;
ULONG bit12_19 : 8;
ULONG bit6_11 : 6;
ULONG bit0_5 : 6;
} xfx_f2;
#define XFXform_RT xfx_f1.bit6_10
#define XFXform_RS xfx_f1.bit6_10
#define XFXform_spr xfx_f1.bit11_20
#define XFXform_tbr xfx_f1.bit11_20
#define XFXform_spr xfx_f1.bit11_20
#define XFXform_FXM xfx_f2.bit12_19
#define XFXform_XO xfx_f1.bit21_30
struct {
ULONG bit31 : 1;
ULONG bit21_30 : 10;
ULONG bit16_20 : 5;
ULONG bit15 : 1;
ULONG bit7_14 : 8;
ULONG bit6 : 1;
ULONG bit0_5 : 6;
} xfl_f;
#define XFLform_FLM xfl_f.bit7_14
#define XFLform_FRB xfl_f.bit16_20
#define XFLform_XO xfl_f.bit21_30
#define XFLform_RC xfl_f.bit31
struct {
ULONG bit31 : 1;
ULONG bit30 : 1;
ULONG bit21_29 : 9;
ULONG bit16_20 : 5;
ULONG bit10_15 : 5;
ULONG bit6_10 : 5;
ULONG bit0_5 : 6;
} xs_f;
#define XSform_RS xs_f.bit6_10
#define XSform_RA xs_f.bit11_15
#define XSform_sh1 xs_f.bit16_20
#define XSform_XO xs_f.bit21_29
#define XSform_sh2 xs_f.bit30
#define XSform_RC xs_f.bit31
struct {
ULONG bit31 : 1;
ULONG bit22_30 : 9;
ULONG bit21 : 1;
ULONG bit16_20 : 5;
ULONG bit10_15 : 5;
ULONG bit6_10 : 5;
ULONG bit0_5 : 6;
} xo_f;
#define XOform_RT xo_f.bit6_10
#define XOform_RA xo_f.bit11_15
#define XOform_RB xo_f.bit16_20
#define XOform_OE xo_f.bit21
#define XOform_XO xo_f.bit22_30
#define XOform_RC xo_f.bit31
struct {
ULONG bit31 : 1;
ULONG bit26_30 : 5;
ULONG bit21_25 : 5;
ULONG bit16_20 : 5;
ULONG bit11_15 : 5;
ULONG bit6_10 : 5;
ULONG bit0_5 : 6;
} a_f;
#define Aform_FRT a_f.bit6_10
#define Aform_FRA a_f.bit11_15
#define Aform_FRB a_f.bit16_20
#define Aform_FRC a_f.bit21_25
#define Aform_XO a_f.bit26_30
#define Aform_RC a_f.bit31
struct {
ULONG bit31 : 1;
ULONG bit26_30 : 5;
ULONG bit21_25 : 5;
ULONG bit16_20 : 5;
ULONG bit11_15 : 5;
ULONG bit6_10 : 5;
ULONG bit0_5 : 6;
} m_f;
#define Mform_RS m_f.bit6_10
#define Mform_RA m_f.bit11_15
#define Mform_RB m_f.bit16_20
#define Mform_SH m_f.bit16_20
#define Mform_MB m_f.bit21_25
#define Mform_ME m_f.bit26_30
#define Mform_RC m_f.bit31
struct {
ULONG bit31 : 1;
ULONG bit30 : 1;
ULONG bit27_29 : 3;
ULONG bit21_26 : 6;
ULONG bit16_20 : 5;
ULONG bit11_15 : 5;
ULONG bit6_10 : 5;
ULONG bit0_5 : 6;
} md_f;
#define MDform_RS md_f.bit6_10
#define MDform_RA md_f.bit11_15
#define MDform_sh1 md_f.bit16_20
#define MDform_mb md_f.bit21_26
#define MDform_me md_f.bit21_26
#define MDform_XO md_f.bit27_29
#define MDform_sh2 md_f.bit30
#define MDform_RC md_f.bit31
struct {
ULONG bit31 : 1;
ULONG bit27_30 : 4;
ULONG bit21_26 : 6;
ULONG bit16_20 : 5;
ULONG bit11_15 : 5;
ULONG bit6_10 : 5;
ULONG bit0_5 : 6;
} mds_f;
#define MDSform_RS mds_f.bit6_10
#define MDSform_RA mds_f.bit11_15
#define MDSform_RB mds_f.bit16_20
#define MDSform_mb mds_f.bit21_26
#define MDSform_me mds_f.bit21_26
#define MDSform_XO mds_f.bit27_30
#define MDSform_RC mds_f.bit31
} PPC_INSTRUCTION, *PPPC_INSTRUCTION;
//
// POWERPC PRIMARY AND SECONDARY (EXTENDED) OPCODES
//
#define TDI_OP 2
#define TWI_OP 3
#define MULLI_OP 7
#define SUBFIC_OP 8
#define CMPLI_OP 10
#define CMPI_OP 11
#define ADDIC_OP 12
#define ADDIC_RC_OP 13
#define ADDI_OP 14
#define ADDIS_OP 15
#define BC_OP 16
#define SC_OP 17
#define B_OP 18
#define X19_OP 19 // Extended ops for primary code 19:
#define MCRF_OP 0
#define BCLR_OP 16
#define CRNOR_OP 33
#define RFI_OP 50
#define CRANDC_OP 129
#define ISYNC_OP 150
#define CRXOR_OP 193
#define CRNAND_OP 225
#define CRAND_OP 257
#define CREQV_OP 289
#define CRORC_OP 417
#define CROR_OP 449
#define BCCTR_OP 528
#define RLWIMI_OP 20
#define RLWINM_OP 21
#define RLWNM_OP 23
#define ORI_OP 24
#define ORIS_OP 25
#define XORI_OP 26
#define XORIS_OP 27
#define ANDI_RC_OP 28
#define ANDIS_RC_OP 29
#define X30_OP 30 // Extended ops for primary code 30:
#define RLDICL_OP 0
#define RLDICR_OP 1
#define RLDIC_OP 2
#define RLDIMI_OP 3
#define RLDCL_OP 8
#define RLDCR_OP 9
#define X31_OP 31 // Extended ops for primary code 31:
#define CMP_OP 0
#define TW_OP 4
#define SUBFC_OP 8
#define MULHDU_OP 9
#define ADDC_OP 10
#define MULHWU_OP 11
#define MFCR_OP 19
#define LWARX_OP 20
#define LDX_OP 21
#define LWZX_OP 23
#define SLW_OP 24
#define CNTLZW_OP 26
#define SLD_OP 27
#define AND_OP 28
#define CMPL_OP 32
#define SUBF_OP 40
#define LDUX_OP 53
#define DCBST_OP 54
#define LWZUX_OP 55
#define CNTLZD_OP 58
#define ANDC_OP 60
#define TD_OP 68
#define MULHD_OP 73
#define MULHW_OP 75
#define MFMSR_OP 83
#define LDARX_OP 84
#define DCBF_OP 86
#define LBZX_OP 87
#define NEG_OP 104
#define LBZUX_OP 119
#define NOR_OP 124
#define SUBFE_OP 136
#define ADDE_OP 138
#define MTCRF_OP 144
#define MTMSR_OP 146
#define STDX_OP 149
#define STWCX_RC_OP 150
#define STWX_OP 151
#define STDUX_OP 181
#define STWUX_OP 183
#define SUBFZE_OP 200
#define ADDZE_OP 202
#define MTSR_OP 210
#define STDCX_RC_OP 214
#define STBX_OP 215
#define SUBFME_OP 232
#define MULLD_OP 233
#define ADDME_OP 234
#define MULLW_OP 235
#define MTSRIN_OP 242
#define DCBTST_OP 246
#define STBUX_OP 247
#define ADD_OP 266
#define DCBT_OP 278
#define LHZX_OP 279
#define EQV_OP 284
#define TLBIE_OP 306
#define ECIWX_OP 310
#define LHZUX_OP 311
#define XOR_OP 316
#define MFSPR_OP 339
#define LWAX_OP 341
#define LHAX_OP 343
#define TLBIA_OP 370
#define MFTB_OP 371
#define LWAUX_OP 373
#define LHAUX_OP 375
#define STHX_OP 407
#define ORC_OP 412
#define SRADI_OP 413
#define SLBIE_OP 434
#define ECOWX_OP 438
#define STHUX_OP 439
#define OR_OP 444
#define DIVDU_OP 457
#define DIVWU_OP 459
#define MTSPR_OP 467
#define DCBI_OP 470
#define NAND_OP 476
#define DIVD_OP 489
#define DIVW_OP 491
#define SLBIA_OP 498
#define MCRXR_OP 512
#define LSWX_OP 533
#define LWBRX_OP 534
#define LFSX_OP 535
#define SRW_OP 536
#define SRD_OP 539
#define TLBSYNC_OP 566
#define LFSUX_OP 567
#define MFSR_OP 595
#define LSWI_OP 597
#define SYNC_OP 598
#define LFDX_OP 599
#define LFDUX_OP 631
#define MFSRIN_OP 659
#define STSWX_OP 661
#define STWBRX_OP 662
#define STFSX_OP 663
#define STFSUX_OP 695
#define STSWI_OP 725
#define STFDX_OP 727
#define STFDUX_OP 759
#define LHBRX_OP 790
#define SRAW_OP 792
#define SRAD_OP 794
#define SRAWI_OP 824
#define EIEIO_OP 854
#define STHBRX_OP 918
#define EXTSH_OP 922
#define EXTSB_OP 954
#define ICBI_OP 982
#define STFIWX_OP 983
#define EXTSW_OP 986
#define DCBZ_OP 1014
#define LWZ_OP 32
#define LWZU_OP 33
#define LBZ_OP 34
#define LBZU_OP 35
#define STW_OP 36
#define STWU_OP 37
#define STB_OP 38
#define STBU_OP 39
#define LHZ_OP 40
#define LHZU_OP 41
#define LHA_OP 42
#define LHAU_OP 43
#define STH_OP 44
#define STHU_OP 45
#define LFS_OP 48
#define LFSU_OP 49
#define LFD_OP 50
#define LFDU_OP 51
#define STFS_OP 52
#define STFSU_OP 53
#define STFD_OP 54
#define STFDU_OP 55
#define X58_OP 58 // Extended ops for primary code 58:
#define LD_OP 0
#define LDU_OP 1
#define LWA_OP 2
#define X59_OP 59 // Extended ops for primary code 59:
#define FDIVS_OP 18
#define FSUBS_OP 20
#define FADDS_OP 21
#define FSQRTS_OP 22
#define FRES_OP 24
#define FMULS_OP 25
#define FMSUBS_OP 28
#define FMADDS_OP 29
#define FNMSUBS_OP 30
#define FNMADDS_OP 31
#define X62_OP 62 // Extended ops for primary code 62:
#define STD_OP 0
#define STDU_OP 1
#define X63_OP 63 // Extended ops for primary code 63:
#define FCMPU_OP 0
#define FRSP_OP 12
#define FCTIW_OP 14
#define FCTIWZ_OP 15
#define FDIV_OP 18
#define FSUB_OP 20
#define FADD_OP 21
#define FSQRT_OP 22
#define FSEL_OP 23
#define FMUL_OP 25
#define FSQRTE_OP 26
#define FMSUB_OP 28
#define FMADD_OP 29
#define FNMSUB_OP 30
#define FNMADD_OP 31
#define FCMPO_OP 32
#define MTFSB1_OP 38
#define FNEG_OP 40
#define MCRFS_OP 64
#define MTFSB0_OP 70
#define FMR_OP 72
#define MTFSFI_OP 134
#define FNABS_OP 136
#define FABS_OP 264
#define MFFS_OP 583
#define MTFSF_OP 711
#define FCTID_OP 814
#define FCTIDZ_OP 815
#define FCFID_OP 846
//
// Define certain specific instructions
//
#define SYSTEM_CALL_INSTR 0x44000002L // sc
#define RETURN_INSTR 0x4E800020L // blr
#define BREAK_INSTR 0x0FE00000L // break <number>
#define TRAP_INSTR 0x0C000000L // trap word immediate
#define NO_OP_INSTR 0x60000000L // ori r.0, r.0, 0
#define INVALID_INSTR 0x00000000L // all 0's => invalid
//
// Define specific values for the TO field of the TRAP_INSTR
//
#define TO_BREAKPOINT 0x03E00000L // Unconditional breakpoint
#define TO_DIVIDE_BY_ZERO 0x00C00000L // Integer divide by zero
#define TO_UNCONDITIONAL_DIVIDE_BY_ZERO 0x00E00000L // Unconditional divide
// by zero
//
// IEEE FLOATING POINT VALUE REPRESENTATION
//
//
// Define maximum and minimum single and double exponent values.
//
#define DOUBLE_MAXIMUM_EXPONENT 2047
#define DOUBLE_MINIMUM_EXPONENT 0
#define SINGLE_MAXIMUM_EXPONENT 255
#define SINGLE_MINIMUM_EXPONENT 0
//
// Define single and double exponent bias values.
//
#define SINGLE_EXPONENT_BIAS 127
#define DOUBLE_EXPONENT_BIAS 1023
//
// Define the largest single and double values;
//
#define DOUBLE_MAXIMUM_VALUE_LOW 0xffffffff
#define DOUBLE_MAXIMUM_VALUE_HIGH 0x7fefffff
#define SINGLE_MAXIMUM_VALUE 0x7f7fffff
//
// Define single and double quite and signaling Nan values.
//
#define DOUBLE_NAN_LOW 0xffffffff
#define DOUBLE_QUIET_NAN 0x7ff7ffff
#define DOUBLE_SIGNAL_NAN 0x7fffffff
#define SINGLE_QUIET_NAN 0x7fbfffff
#define SINGLE_SIGNAL_NAN 0x7fffffff
//
// Define positive single and double infinity values.
//
#define DOUBLE_INFINITY_VALUE_LOW 0x0
#define DOUBLE_INFINITY_VALUE_HIGH 0x7ff00000
#define SINGLE_INFINITY_VALUE 0x7f800000
//
// Define rounding modes.
//
#define ROUND_TO_NEAREST 0
#define ROUND_TO_ZERO 1
#define ROUND_TO_PLUS_INFINITY 2
#define ROUND_TO_MINUS_INFINITY 3
#endif // _PPCINST_
|