1 /* -*- mode: C; c-basic-offset: 3; -*- */
2 
3 /*---------------------------------------------------------------*/
4 /*--- begin                                     s390_disasm.h ---*/
5 /*---------------------------------------------------------------*/
6 
7 /*
8    This file is part of Valgrind, a dynamic binary instrumentation
9    framework.
10 
11    Copyright IBM Corp. 2010-2015
12 
13    This program is free software; you can redistribute it and/or
14    modify it under the terms of the GNU General Public License as
15    published by the Free Software Foundation; either version 2 of the
16    License, or (at your option) any later version.
17 
18    This program is distributed in the hope that it will be useful, but
19    WITHOUT ANY WARRANTY; without even the implied warranty of
20    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
21    General Public License for more details.
22 
23    You should have received a copy of the GNU General Public License
24    along with this program; if not, write to the Free Software
25    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
26    02110-1301, USA.
27 
28    The GNU General Public License is contained in the file COPYING.
29 */
30 
31 #ifndef __VEX_S390_DISASM_H
32 #define __VEX_S390_DISASM_H
33 
34 #include "libvex_basictypes.h"
35 
36 /* Macros to encode a command for s390_disasm. */
37 #undef  P
38 #define P(a) (S390_ARG_##a)
39 #undef  ENC1
40 #define ENC1(a) ((P(DONE) << 4) | P(a))
41 #undef  ENC2
42 #define ENC2(a,b) ((P(DONE) << 8) | (P(b) << 4) | P(a))
43 #undef  ENC3
44 #define ENC3(a,b,c) ((P(DONE) << 12) | (P(c) << 8) | (P(b) << 4) | P(a))
45 #undef  ENC4
46 #define ENC4(a,b,c,d) ((P(DONE) << 16) | (P(d) << 12) | (P(c) << 8) | \
47                        (P(b) << 4) | P(a))
48 #undef  ENC5
49 #define ENC5(a,b,c,d,e) ((P(DONE) << 20) | (P(e) << 16) | (P(d) << 12) | \
50                          (P(c) << 8) | (P(b) << 4) | P(a))
51 #undef  ENC6
52 #define ENC6(a,b,c,d,e,f) ((P(DONE) << 24) | (P(f) << 20) | (P(e) << 16) | \
53                            (P(d) << 12) | (P(c) << 8) | (P(b) << 4) | P(a))
54 
55 /* The different kinds of operands in an asm insn */
56 enum {
57    S390_ARG_DONE = 0,
58    S390_ARG_GPR = 1,
59    S390_ARG_FPR = 2,
60    S390_ARG_AR = 3,
61    S390_ARG_INT = 4,
62    S390_ARG_UINT = 5,
63    S390_ARG_PCREL = 6,
64    S390_ARG_SDXB = 7,
65    S390_ARG_UDXB = 8,
66    S390_ARG_UDLB = 9,
67    S390_ARG_CABM = 10,
68    S390_ARG_MNM = 11,
69    S390_ARG_XMNM = 12
70 };
71 
72 /* The different kinds of extended mnemonics */
73 enum {
74    S390_XMNM_CAB = 0,
75    S390_XMNM_BCR = 1,
76    S390_XMNM_BC = 2,
77    S390_XMNM_BRC = 3,
78    S390_XMNM_BRCL = 4,
79    S390_XMNM_LOCR = 5,
80    S390_XMNM_LOCGR = 6,
81    S390_XMNM_LOC = 7,
82    S390_XMNM_LOCG = 8,
83    S390_XMNM_STOC = 9,
84    S390_XMNM_STOCG = 10
85 };
86 
87 void s390_disasm(UInt command, ...);
88 
89 /*---------------------------------------------------------------*/
90 /*--- end                                       s390_disasm.h ---*/
91 /*---------------------------------------------------------------*/
92 
93 #endif /* __VEX_S390_DISASM_H */
94