18844a6329d275814456e3a2a5a7bffac75da0957florian/* -*- mode: C; c-basic-offset: 3; -*- */
22019a976f07ff418dde2dfc7cc74667ef66d7764sewardj
32019a976f07ff418dde2dfc7cc74667ef66d7764sewardj/*--------------------------------------------------------------------*/
42019a976f07ff418dde2dfc7cc74667ef66d7764sewardj/*--- Common defs for s390x                  libvex_s390x_common.h ---*/
52019a976f07ff418dde2dfc7cc74667ef66d7764sewardj/*--------------------------------------------------------------------*/
62019a976f07ff418dde2dfc7cc74667ef66d7764sewardj
72019a976f07ff418dde2dfc7cc74667ef66d7764sewardj/*
82019a976f07ff418dde2dfc7cc74667ef66d7764sewardj   This file is part of Valgrind, a dynamic binary instrumentation
92019a976f07ff418dde2dfc7cc74667ef66d7764sewardj   framework.
102019a976f07ff418dde2dfc7cc74667ef66d7764sewardj
1189ae8477745fd2a15453557d729a50e627325ee2sewardj   Copyright IBM Corp. 2010-2013
122019a976f07ff418dde2dfc7cc74667ef66d7764sewardj
132019a976f07ff418dde2dfc7cc74667ef66d7764sewardj   This program is free software; you can redistribute it and/or
142019a976f07ff418dde2dfc7cc74667ef66d7764sewardj   modify it under the terms of the GNU General Public License as
152019a976f07ff418dde2dfc7cc74667ef66d7764sewardj   published by the Free Software Foundation; either version 2 of the
162019a976f07ff418dde2dfc7cc74667ef66d7764sewardj   License, or (at your option) any later version.
172019a976f07ff418dde2dfc7cc74667ef66d7764sewardj
182019a976f07ff418dde2dfc7cc74667ef66d7764sewardj   This program is distributed in the hope that it will be useful, but
192019a976f07ff418dde2dfc7cc74667ef66d7764sewardj   WITHOUT ANY WARRANTY; without even the implied warranty of
202019a976f07ff418dde2dfc7cc74667ef66d7764sewardj   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
212019a976f07ff418dde2dfc7cc74667ef66d7764sewardj   General Public License for more details.
222019a976f07ff418dde2dfc7cc74667ef66d7764sewardj
232019a976f07ff418dde2dfc7cc74667ef66d7764sewardj   You should have received a copy of the GNU General Public License
242019a976f07ff418dde2dfc7cc74667ef66d7764sewardj   along with this program; if not, write to the Free Software
252019a976f07ff418dde2dfc7cc74667ef66d7764sewardj   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
262019a976f07ff418dde2dfc7cc74667ef66d7764sewardj   02110-1301, USA.
272019a976f07ff418dde2dfc7cc74667ef66d7764sewardj
282019a976f07ff418dde2dfc7cc74667ef66d7764sewardj   The GNU General Public License is contained in the file COPYING.
292019a976f07ff418dde2dfc7cc74667ef66d7764sewardj*/
302019a976f07ff418dde2dfc7cc74667ef66d7764sewardj
312019a976f07ff418dde2dfc7cc74667ef66d7764sewardj#ifndef __LIBVEX_PUB_S390X_H
322019a976f07ff418dde2dfc7cc74667ef66d7764sewardj#define __LIBVEX_PUB_S390X_H
332019a976f07ff418dde2dfc7cc74667ef66d7764sewardj
342019a976f07ff418dde2dfc7cc74667ef66d7764sewardj/* This file includes definitions for s390.
352019a976f07ff418dde2dfc7cc74667ef66d7764sewardj
362019a976f07ff418dde2dfc7cc74667ef66d7764sewardj   It must be suitable for inclusion in assembler source files. */
372019a976f07ff418dde2dfc7cc74667ef66d7764sewardj
382019a976f07ff418dde2dfc7cc74667ef66d7764sewardj
392019a976f07ff418dde2dfc7cc74667ef66d7764sewardj/*--------------------------------------------------------------*/
402019a976f07ff418dde2dfc7cc74667ef66d7764sewardj/*--- Dedicated registers                                    ---*/
412019a976f07ff418dde2dfc7cc74667ef66d7764sewardj/*--------------------------------------------------------------*/
422019a976f07ff418dde2dfc7cc74667ef66d7764sewardj
432019a976f07ff418dde2dfc7cc74667ef66d7764sewardj#define S390_REGNO_RETURN_VALUE         2
448844a6329d275814456e3a2a5a7bffac75da0957florian#define S390_REGNO_TCHAIN_SCRATCH      12
452019a976f07ff418dde2dfc7cc74667ef66d7764sewardj#define S390_REGNO_GUEST_STATE_POINTER 13
462019a976f07ff418dde2dfc7cc74667ef66d7764sewardj#define S390_REGNO_LINK_REGISTER       14
472019a976f07ff418dde2dfc7cc74667ef66d7764sewardj#define S390_REGNO_STACK_POINTER       15
482019a976f07ff418dde2dfc7cc74667ef66d7764sewardj
492019a976f07ff418dde2dfc7cc74667ef66d7764sewardj
502019a976f07ff418dde2dfc7cc74667ef66d7764sewardj/*--------------------------------------------------------------*/
512019a976f07ff418dde2dfc7cc74667ef66d7764sewardj/*--- Offsets in the stack frame allocated by the dispatcher ---*/
522019a976f07ff418dde2dfc7cc74667ef66d7764sewardj/*--------------------------------------------------------------*/
532019a976f07ff418dde2dfc7cc74667ef66d7764sewardj
54203b99870081208d57a7dc789220abec24ab5838florian/* Dispatcher will save 8 FPRs at offsets 160 + 0 ... 160 + 56 */
55203b99870081208d57a7dc789220abec24ab5838florian
568844a6329d275814456e3a2a5a7bffac75da0957florian/* Where the dispatcher saves the r2 contents. */
57203b99870081208d57a7dc789220abec24ab5838florian#define S390_OFFSET_SAVED_R2 160+80
581b2768a13b015c80aea0f80a364e1c26bd67c3c2florian
592019a976f07ff418dde2dfc7cc74667ef66d7764sewardj/* Where client's FPC register is saved. */
60203b99870081208d57a7dc789220abec24ab5838florian#define S390_OFFSET_SAVED_FPC_C 160+72
612019a976f07ff418dde2dfc7cc74667ef66d7764sewardj
622019a976f07ff418dde2dfc7cc74667ef66d7764sewardj/* Where valgrind's FPC register is saved. */
63203b99870081208d57a7dc789220abec24ab5838florian#define S390_OFFSET_SAVED_FPC_V 160+64
642019a976f07ff418dde2dfc7cc74667ef66d7764sewardj
653587828e8f4e5664fe02eebea435789655ac7625florian/* Size of frame allocated by VG_(disp_run_translations)
662019a976f07ff418dde2dfc7cc74667ef66d7764sewardj   Need size for
672019a976f07ff418dde2dfc7cc74667ef66d7764sewardj       8 FPRs
68203b99870081208d57a7dc789220abec24ab5838florian     + 1 GPR  (SAVED_R2)
692019a976f07ff418dde2dfc7cc74667ef66d7764sewardj     + 2 FPCs (SAVED_FPC_C and SAVED_FPC_V).
702019a976f07ff418dde2dfc7cc74667ef66d7764sewardj
712019a976f07ff418dde2dfc7cc74667ef66d7764sewardj   Additionally, we need a standard frame for helper functions being called
722019a976f07ff418dde2dfc7cc74667ef66d7764sewardj   from client code. (See figure 1-16 in zSeries ABI) */
73203b99870081208d57a7dc789220abec24ab5838florian#define S390_INNERLOOP_FRAME_SIZE ((8+1+2)*8 + 160)
742019a976f07ff418dde2dfc7cc74667ef66d7764sewardj
752019a976f07ff418dde2dfc7cc74667ef66d7764sewardj
762019a976f07ff418dde2dfc7cc74667ef66d7764sewardj/*--------------------------------------------------------------*/
77aec8e057c2fa910eabc8e665ab63bc16badb3c27florian/*--- Facility bits                                          ---*/
78aec8e057c2fa910eabc8e665ab63bc16badb3c27florian/*--------------------------------------------------------------*/
79aec8e057c2fa910eabc8e665ab63bc16badb3c27florian
80aec8e057c2fa910eabc8e665ab63bc16badb3c27florian/* The value of the macro is the number of the facility bit as per POP. */
81aec8e057c2fa910eabc8e665ab63bc16badb3c27florian#define S390_FAC_MSA     17  // message-security-assist
82aec8e057c2fa910eabc8e665ab63bc16badb3c27florian#define S390_FAC_LDISP   18  // long displacement
83aec8e057c2fa910eabc8e665ab63bc16badb3c27florian#define S390_FAC_HFPMAS  20  // HFP multiply-and-add-subtract
84aec8e057c2fa910eabc8e665ab63bc16badb3c27florian#define S390_FAC_EIMM    21  // extended immediate
85aec8e057c2fa910eabc8e665ab63bc16badb3c27florian#define S390_FAC_HFPUNX  23  // HFP unnormalized extension
86aec8e057c2fa910eabc8e665ab63bc16badb3c27florian#define S390_FAC_ETF2    24  // ETF2-enhancement
87aec8e057c2fa910eabc8e665ab63bc16badb3c27florian#define S390_FAC_STCKF   25  // store clock fast insn
88aec8e057c2fa910eabc8e665ab63bc16badb3c27florian#define S390_FAC_PENH    26  // parsing-enhancement
89aec8e057c2fa910eabc8e665ab63bc16badb3c27florian#define S390_FAC_ETF3    30  // ETF3-enhancement
90aec8e057c2fa910eabc8e665ab63bc16badb3c27florian#define S390_FAC_XCPUT   31  // extract-CPU-time
91aec8e057c2fa910eabc8e665ab63bc16badb3c27florian#define S390_FAC_GIE     34  // general insn extension
92aec8e057c2fa910eabc8e665ab63bc16badb3c27florian#define S390_FAC_EXEXT   35  // execute extension
93aec8e057c2fa910eabc8e665ab63bc16badb3c27florian#define S390_FAC_FPEXT   37  // floating-point extension
94aec8e057c2fa910eabc8e665ab63bc16badb3c27florian#define S390_FAC_FPSE    41  // floating-point support enhancement
95aec8e057c2fa910eabc8e665ab63bc16badb3c27florian#define S390_FAC_DFP     42  // decimal floating point
96aec8e057c2fa910eabc8e665ab63bc16badb3c27florian#define S390_FAC_PFPO    44  // perform floating point operation insn
97aec8e057c2fa910eabc8e665ab63bc16badb3c27florian#define S390_FAC_HIGHW   45  // high-word extension
98aec8e057c2fa910eabc8e665ab63bc16badb3c27florian#define S390_FAC_LSC     45  // load/store on condition
99aec8e057c2fa910eabc8e665ab63bc16badb3c27florian#define S390_FAC_DFPZC   48  // DFP zoned-conversion
100aec8e057c2fa910eabc8e665ab63bc16badb3c27florian#define S390_FAC_MISC    49  // miscellaneous insn
101aec8e057c2fa910eabc8e665ab63bc16badb3c27florian#define S390_FAC_CTREXE  50  // constrained transactional execution
102aec8e057c2fa910eabc8e665ab63bc16badb3c27florian#define S390_FAC_TREXE   73  // transactional execution
103aec8e057c2fa910eabc8e665ab63bc16badb3c27florian#define S390_FAC_MSA4    77  // message-security-assist 4
104aec8e057c2fa910eabc8e665ab63bc16badb3c27florian
105aec8e057c2fa910eabc8e665ab63bc16badb3c27florian
106aec8e057c2fa910eabc8e665ab63bc16badb3c27florian/*--------------------------------------------------------------*/
1072019a976f07ff418dde2dfc7cc74667ef66d7764sewardj/*--- Miscellaneous                                          ---*/
1082019a976f07ff418dde2dfc7cc74667ef66d7764sewardj/*--------------------------------------------------------------*/
1092019a976f07ff418dde2dfc7cc74667ef66d7764sewardj
1102019a976f07ff418dde2dfc7cc74667ef66d7764sewardj/* Number of arguments that can be passed in registers */
1112019a976f07ff418dde2dfc7cc74667ef66d7764sewardj#define S390_NUM_GPRPARMS 5
1122019a976f07ff418dde2dfc7cc74667ef66d7764sewardj
113933065d4f3548466da4666c5cfda7e5eaff93759florian/* Number of double words needed to store all facility bits. */
114933065d4f3548466da4666c5cfda7e5eaff93759florian#define S390_NUM_FACILITY_DW 2
115933065d4f3548466da4666c5cfda7e5eaff93759florian
1162019a976f07ff418dde2dfc7cc74667ef66d7764sewardj#endif /* __LIBVEX_PUB_S390X_H */
1172019a976f07ff418dde2dfc7cc74667ef66d7764sewardj
1182019a976f07ff418dde2dfc7cc74667ef66d7764sewardj/*--------------------------------------------------------------------*/
1192019a976f07ff418dde2dfc7cc74667ef66d7764sewardj/*--- end                                    libvex_s390x_common.h ---*/
1202019a976f07ff418dde2dfc7cc74667ef66d7764sewardj/*--------------------------------------------------------------------*/
121