1/* -*- mode: C; c-basic-offset: 3; -*- */ 2 3/*--------------------------------------------------------------------*/ 4/*--- Common defs for s390x libvex_s390x_common.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 __LIBVEX_PUB_S390X_H 32#define __LIBVEX_PUB_S390X_H 33 34/* This file includes definitions for s390. 35 36 It must be suitable for inclusion in assembler source files. */ 37 38 39/*--------------------------------------------------------------*/ 40/*--- Dedicated registers ---*/ 41/*--------------------------------------------------------------*/ 42 43#define S390_REGNO_RETURN_VALUE 2 44#define S390_REGNO_TCHAIN_SCRATCH 12 45#define S390_REGNO_GUEST_STATE_POINTER 13 46#define S390_REGNO_LINK_REGISTER 14 47#define S390_REGNO_STACK_POINTER 15 48 49 50/*--------------------------------------------------------------*/ 51/*--- Offsets in the stack frame allocated by the dispatcher ---*/ 52/*--------------------------------------------------------------*/ 53 54/* Dispatcher will save 8 FPRs at offsets 160 + 0 ... 160 + 56 */ 55 56/* Where the dispatcher saves the r2 contents. */ 57#define S390_OFFSET_SAVED_R2 160+80 58 59/* Where client's FPC register is saved. */ 60#define S390_OFFSET_SAVED_FPC_C 160+72 61 62/* Where valgrind's FPC register is saved. */ 63#define S390_OFFSET_SAVED_FPC_V 160+64 64 65/* Size of frame allocated by VG_(disp_run_translations) 66 Need size for 67 8 FPRs 68 + 1 GPR (SAVED_R2) 69 + 2 FPCs (SAVED_FPC_C and SAVED_FPC_V). 70 71 Additionally, we need a standard frame for helper functions being called 72 from client code. (See figure 1-16 in zSeries ABI) */ 73#define S390_INNERLOOP_FRAME_SIZE ((8+1+2)*8 + 160) 74 75 76/*--------------------------------------------------------------*/ 77/*--- Facility bits ---*/ 78/*--------------------------------------------------------------*/ 79 80/* The value of the macro is the number of the facility bit as per POP. */ 81#define S390_FAC_MSA 17 // message-security-assist 82#define S390_FAC_LDISP 18 // long displacement 83#define S390_FAC_HFPMAS 20 // HFP multiply-and-add-subtract 84#define S390_FAC_EIMM 21 // extended immediate 85#define S390_FAC_HFPUNX 23 // HFP unnormalized extension 86#define S390_FAC_ETF2 24 // ETF2-enhancement 87#define S390_FAC_STCKF 25 // store clock fast insn 88#define S390_FAC_PENH 26 // parsing-enhancement 89#define S390_FAC_ETF3 30 // ETF3-enhancement 90#define S390_FAC_XCPUT 31 // extract-CPU-time 91#define S390_FAC_GIE 34 // general insn extension 92#define S390_FAC_EXEXT 35 // execute extension 93#define S390_FAC_FPEXT 37 // floating-point extension 94#define S390_FAC_FPSE 41 // floating-point support enhancement 95#define S390_FAC_DFP 42 // decimal floating point 96#define S390_FAC_PFPO 44 // perform floating point operation insn 97#define S390_FAC_HIGHW 45 // high-word extension 98#define S390_FAC_LSC 45 // load/store on condition 99#define S390_FAC_DFPZC 48 // DFP zoned-conversion 100#define S390_FAC_MISC 49 // miscellaneous insn 101#define S390_FAC_CTREXE 50 // constrained transactional execution 102#define S390_FAC_TREXE 73 // transactional execution 103#define S390_FAC_MSA4 77 // message-security-assist 4 104 105 106/*--------------------------------------------------------------*/ 107/*--- Miscellaneous ---*/ 108/*--------------------------------------------------------------*/ 109 110/* Number of arguments that can be passed in registers */ 111#define S390_NUM_GPRPARMS 5 112 113/* Number of double words needed to store all facility bits. */ 114#define S390_NUM_FACILITY_DW 2 115 116#endif /* __LIBVEX_PUB_S390X_H */ 117 118/*--------------------------------------------------------------------*/ 119/*--- end libvex_s390x_common.h ---*/ 120/*--------------------------------------------------------------------*/ 121