Suzuki K. Poulose | 648ae35 | 2013-08-29 14:35:48 +0530 | [diff] [blame] | 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 | |
Heiko Carstens | 0f20822 | 2013-09-13 13:36:25 +0200 | [diff] [blame] | 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); |
Heiko Carstens | 1ffa11a | 2013-09-13 14:14:10 +0200 | [diff] [blame] | 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 | } |
Heiko Carstens | 0f20822 | 2013-09-13 13:36:25 +0200 | [diff] [blame] | 51 | |
Suzuki K. Poulose | 648ae35 | 2013-08-29 14:35:48 +0530 | [diff] [blame] | 52 | #endif /* __ASM_S390_DIS_H__ */ |