1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 3 * Disassemble s390 instructions. 4 * 5 * Copyright IBM Corp. 2007 6 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com), 7 */ 8 9 #ifndef __ASM_S390_DIS_H__ 10 #define __ASM_S390_DIS_H__ 11 12 /* Type of operand */ 13 #define OPERAND_GPR 0x1 /* Operand printed as %rx */ 14 #define OPERAND_FPR 0x2 /* Operand printed as %fx */ 15 #define OPERAND_AR 0x4 /* Operand printed as %ax */ 16 #define OPERAND_CR 0x8 /* Operand printed as %cx */ 17 #define OPERAND_VR 0x10 /* Operand printed as %vx */ 18 #define OPERAND_DISP 0x20 /* Operand printed as displacement */ 19 #define OPERAND_BASE 0x40 /* Operand printed as base register */ 20 #define OPERAND_INDEX 0x80 /* Operand printed as index register */ 21 #define OPERAND_PCREL 0x100 /* Operand printed as pc-relative symbol */ 22 #define OPERAND_SIGNED 0x200 /* Operand printed as signed value */ 23 #define OPERAND_LENGTH 0x400 /* Operand printed as length (+1) */ 24 25 26 struct s390_operand { 27 int bits; /* The number of bits in the operand. */ 28 int shift; /* The number of bits to shift. */ 29 int flags; /* One bit syntax flags. */ 30 }; 31 32 struct s390_insn { 33 const char name[5]; 34 unsigned char opfrag; 35 unsigned char format; 36 }; 37 38 39 static inline int insn_length(unsigned char code) 40 { 41 return ((((int) code + 64) >> 7) + 1) << 1; 42 } 43 44 struct pt_regs; 45 46 void show_code(struct pt_regs *regs); 47 void print_fn_code(unsigned char *code, unsigned long len); 48 int insn_to_mnemonic(unsigned char *instruction, char *buf, unsigned int len); 49 struct s390_insn *find_insn(unsigned char *code); 50 51 static inline int is_known_insn(unsigned char *code) 52 { 53 return !!find_insn(code); 54 } 55 56 #endif /* __ASM_S390_DIS_H__ */ 57