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
25struct 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
31struct s390_insn {
32	const char name[5];
33	unsigned char opfrag;
34	unsigned char format;
35};
36
37
38static inline int insn_length(unsigned char code)
39{
40	return ((((int) code + 64) >> 7) + 1) << 1;
41}
42
43void show_code(struct pt_regs *regs);
44void print_fn_code(unsigned char *code, unsigned long len);
45int insn_to_mnemonic(unsigned char *instruction, char *buf, unsigned int len);
46struct s390_insn *find_insn(unsigned char *code);
47
48static inline int is_known_insn(unsigned char *code)
49{
50	return !!find_insn(code);
51}
52
53#endif /* __ASM_S390_DIS_H__ */
54