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