| // Copyright 2021 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| // |
| // This file requires gcc and binutils with -mcpu=power10 support. |
| // ppc64util runs a series of commands like: |
| // go run map.go -fmt=asm ../pp64.csv > asm.S |
| // powerpc64le-linux-gnu-gcc -c asm.S -mcpu=power10 -mbig |
| // powerpc64le-linux-gnu-objdump -d asm.o |
| // to create the file decode_generated.txt used to verify the disassembler. |
| // |
| // Note, the golang disassembler is not expected to support every extended |
| // mnemonic, but it should support those which frequently show up in object |
| // files compiled by the golang toolchain. |
| |
| #define RA 1 |
| #define RB 2 |
| #define RS 3 |
| #define RT 4 |
| #define RC 5 |
| #define RSp 6 |
| #define RTp 8 |
| |
| #define MB 1 |
| #define ME 7 |
| #define NB 2 |
| #define CY 1 |
| |
| #define LEV 1 |
| |
| #define FRBp 2 |
| #define FRAp 4 |
| #define FRTp 6 |
| #define FRSp 8 |
| #define FRT 3 |
| #define FRA 5 |
| #define FRB 7 |
| #define FRC 9 |
| #define FRS 11 |
| #define FLM 8 |
| #define U 3 |
| #define W 0 |
| #define TE 15 |
| #define SP 1 |
| #define S 1 |
| #define DRM 0x7 |
| #define RM 0x3 |
| |
| #define BF 3 |
| #define SH 7 |
| |
| #define XT 33 |
| #define XA 35 |
| #define XB 37 |
| #define XS 39 |
| #define XC 41 |
| #define XAp 36 |
| #define XTp 38 |
| #define XSp 40 |
| #define DM 1 |
| #define SHW 2 |
| |
| #define VRA 1 |
| #define VRB 2 |
| #define VRC 3 |
| #define VRT 4 |
| #define VRS 5 |
| #define SHB 3 |
| #define SIX 1 |
| #define ST 1 |
| #define PS 0 |
| #define MP 1 |
| #define bm 0x45FF |
| #define N 3 |
| |
| #define AT 7 |
| #define AS 6 |
| |
| #define RMC 3 |
| |
| #define UIM 1 |
| #define DCMX 0x23 |
| #define DCM 0x11 |
| #define DGM 0x11 |
| #define R 1 |
| |
| #define BA 1 |
| #define BB 2 |
| #define BT 3 |
| #define BO 4 |
| #define BI 6 |
| #define BH 0 |
| #define BFA 7 |
| #define FXM 8 |
| #define BC 11 |
| |
| #define L 1 |
| #define EH 1 |
| |
| #define SPR 69 |
| #define BHRBE 69 |
| #define TO 0x11 |
| #define TBR 268 |
| #define CT 2 |
| #define FC 2 |
| #define TH 3 |
| #define WC 1 |
| #define PL 0 |
| #define IH 4 |
| #define RIC 1 |
| #define PRS 1 |
| |
| #define SIM 6 |
| #define IMM 13 |
| #define IMM8 14 |
| #define D 0x80 |
| #define SC 1 |
| |
| #define target_addr 0x690 |
| |
| #define XMSK 0x9 |
| #define YMSK 0x3 |
| #define PMSK 0x2 |
| |
| #define IX 1 |
| #define IMM32 0x1234567 |
| #define Dpfx 0x160032 |
| #define RApfx 0x0 |
| #define Rpfx 1 |
| #define SIpfx 0xFFFFFFFE00010007 |
| |
| // A valid displacement value for the hash check and hash store instructions. |
| #define offset -128 |
| |
| // These decode as m.fpr* or m.vr*. This is a matter of preference. We |
| // don't support these mnemonics, and I don't think they improve reading |
| // disassembled code in most cases. so ignore. |
| // |
| // Likewise, if you add to this list, add tests to decode.txt to ensure we |
| // still test these, while ignoring the extended mnemonics which get |
| // generated. |
| #define mfvsrd xsrsp |
| #define mfvsrwz xsrsp |
| #define mtvsrd xsrsp |
| #define mtvsrwz xsrsp |
| #define mtvsrwa xsrsp |
| |
| // isel BC bit is not decoded like other BC fields. |
| // A special test case is added to decode.txt to verify this. |
| // We decode it like other BC fields. |
| #define isel rldicl |
| |
| |
| // Likewise, these are obscure book ii instructions with extended mnemonics |
| // which are almost guaranteed never to show up in go code |
| #define dcbf add |
| #define sync xsrsp |
| #define wait xsrsp |
| #define rfebb sc |
| |
| // sync 1,1 is the stncisync extended mnemonic. Similar to the above, but |
| // the lwsync/hwsync extended mnemonics are tested in decode.txt |
| #define sync xsrsp |