xref: /linux/arch/s390/include/asm/dis.h (revision b2d0f5d5dc53532e6f07bc546a476a55ebdfe0f3)
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