Home | History | Annotate | Download | only in priv
      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-2017
     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