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_VR 0x10 /* Operand printed as %vx */ 17 #define OPERAND_DISP 0x20 /* Operand printed as displacement */ 18 #define OPERAND_BASE 0x40 /* Operand printed as base register */ 19 #define OPERAND_INDEX 0x80 /* Operand printed as index register */ 20 #define OPERAND_PCREL 0x100 /* Operand printed as pc-relative symbol */ 21 #define OPERAND_SIGNED 0x200 /* Operand printed as signed value */ 22 #define OPERAND_LENGTH 0x400 /* Operand printed as length (+1) */ 23 24 25 struct s390_operand { 26 int bits; /* The number of bits in the operand. */ 27 int shift; /* The number of bits to shift. */ 28 int flags; /* One bit syntax flags. */ 29 }; 30 31 struct s390_insn { 32 const char name[5]; 33 unsigned char opfrag; 34 unsigned char format; 35 }; 36 37 38 static inline int insn_length(unsigned char code) 39 { 40 return ((((int) code + 64) >> 7) + 1) << 1; 41 } 42 43 struct pt_regs; 44 45 void show_code(struct pt_regs *regs); 46 void print_fn_code(unsigned char *code, unsigned long len); 47 int insn_to_mnemonic(unsigned char *instruction, char *buf, unsigned int len); 48 struct s390_insn *find_insn(unsigned char *code); 49 50 static inline int is_known_insn(unsigned char *code) 51 { 52 return !!find_insn(code); 53 } 54 55 #endif /* __ASM_S390_DIS_H__ */ 56