1 /* -*- mode: C; c-basic-offset: 3; -*- */
3 /*---------------------------------------------------------------*/
4 /*--- begin s390_defs.h ---*/
5 /*---------------------------------------------------------------*/
8 This file is part of Valgrind, a dynamic binary instrumentation
11 Copyright IBM Corp. 2010-2017
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.
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.
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
28 The GNU General Public License is contained in the file COPYING.
31 #ifndef __VEX_S390_DEFS_H
32 #define __VEX_S390_DEFS_H
35 /* Condition code. The encoding of the enumerators matches the value of
36 the mask field in the various branch opcodes. */
39 S390_CC_OVFL
= 1, /* overflow */
40 S390_CC_H
= 2, /* A > B ; high */
41 S390_CC_NLE
= 3, /* not low or equal */
42 S390_CC_L
= 4, /* A < B ; low */
43 S390_CC_NHE
= 5, /* not high or equal */
44 S390_CC_LH
= 6, /* low or high */
45 S390_CC_NE
= 7, /* A != B ; not zero */
46 S390_CC_E
= 8, /* A == B ; zero */
47 S390_CC_NLH
= 9, /* not low or high */
48 S390_CC_HE
= 10, /* A >= B ; high or equal*/
49 S390_CC_NL
= 11, /* not low */
50 S390_CC_LE
= 12, /* A <= B ; low or equal */
51 S390_CC_NH
= 13, /* not high */
52 S390_CC_NO
= 14, /* not overflow */
57 /* Invert the condition code */
58 static __inline__ s390_cc_t
59 s390_cc_invert(s390_cc_t cond
)
61 return S390_CC_ALWAYS
- cond
;
65 /* BFP Rounding mode as it is encoded in the m3 field of certain
66 instructions (e.g. CFEBR) */
68 S390_BFP_ROUND_PER_FPC
= 0,
69 S390_BFP_ROUND_NEAREST_AWAY
= 1,
70 /* 2 is not allowed */
71 S390_BFP_ROUND_PREPARE_SHORT
= 3,
72 S390_BFP_ROUND_NEAREST_EVEN
= 4,
73 S390_BFP_ROUND_ZERO
= 5,
74 S390_BFP_ROUND_POSINF
= 6,
75 S390_BFP_ROUND_NEGINF
= 7
79 /* BFP Rounding mode as it is encoded in bits [29:31] of the FPC register.
80 Only rounding modes 0..3 are universally supported. Others require
81 additional hardware facilities. */
83 S390_FPC_BFP_ROUND_NEAREST_EVEN
= 0,
84 S390_FPC_BFP_ROUND_ZERO
= 1,
85 S390_FPC_BFP_ROUND_POSINF
= 2,
86 S390_FPC_BFP_ROUND_NEGINF
= 3,
87 /* 4,5,6 are not allowed */
88 S390_FPC_BFP_ROUND_PREPARE_SHORT
= 7 /* floating point extension facility */
89 } s390_fpc_bfp_round_t
;
92 /* DFP Rounding mode as it is encoded in the m3 field of certain
93 instructions (e.g. CGDTR) */
95 S390_DFP_ROUND_PER_FPC_0
= 0,
96 S390_DFP_ROUND_NEAREST_TIE_AWAY_0_1
= 1,
97 S390_DFP_ROUND_PER_FPC_2
= 2,
98 S390_DFP_ROUND_PREPARE_SHORT_3
= 3,
99 S390_DFP_ROUND_NEAREST_EVEN_4
= 4,
100 S390_DFP_ROUND_ZERO_5
= 5,
101 S390_DFP_ROUND_POSINF_6
= 6,
102 S390_DFP_ROUND_NEGINF_7
= 7,
103 S390_DFP_ROUND_NEAREST_EVEN_8
= 8,
104 S390_DFP_ROUND_ZERO_9
= 9,
105 S390_DFP_ROUND_POSINF_10
= 10,
106 S390_DFP_ROUND_NEGINF_11
= 11,
107 S390_DFP_ROUND_NEAREST_TIE_AWAY_0_12
= 12,
108 S390_DFP_ROUND_NEAREST_TIE_TOWARD_0
= 13,
109 S390_DFP_ROUND_AWAY_0
= 14,
110 S390_DFP_ROUND_PREPARE_SHORT_15
= 15
114 /* DFP Rounding mode as it is encoded in bits [25:27] of the FPC register. */
116 S390_FPC_DFP_ROUND_NEAREST_EVEN
= 0,
117 S390_FPC_DFP_ROUND_ZERO
= 1,
118 S390_FPC_DFP_ROUND_POSINF
= 2,
119 S390_FPC_DFP_ROUND_NEGINF
= 3,
120 S390_FPC_DFP_ROUND_NEAREST_AWAY_0
= 4,
121 S390_FPC_DFP_ROUND_NEAREST_TOWARD_0
= 5,
122 S390_FPC_DFP_ROUND_AWAY_ZERO
= 6,
123 S390_FPC_DFP_ROUND_PREPARE_SHORT
= 7
124 } s390_fpc_dfp_round_t
;
126 /* PFPO function code as it is encoded in bits [33:55] of GR0
127 when PFPO insn is executed. */
129 S390_PFPO_F32_TO_D32
= 0x010805,
130 S390_PFPO_F32_TO_D64
= 0x010905,
131 S390_PFPO_F32_TO_D128
= 0x010A05,
132 S390_PFPO_F64_TO_D32
= 0x010806,
133 S390_PFPO_F64_TO_D64
= 0x010906,
134 S390_PFPO_F64_TO_D128
= 0x010A06,
135 S390_PFPO_F128_TO_D32
= 0x010807,
136 S390_PFPO_F128_TO_D64
= 0x010907,
137 S390_PFPO_F128_TO_D128
= 0x010A07,
138 S390_PFPO_D32_TO_F32
= 0x010508,
139 S390_PFPO_D32_TO_F64
= 0x010608,
140 S390_PFPO_D32_TO_F128
= 0x010708,
141 S390_PFPO_D64_TO_F32
= 0x010509,
142 S390_PFPO_D64_TO_F64
= 0x010609,
143 S390_PFPO_D64_TO_F128
= 0x010709,
144 S390_PFPO_D128_TO_F32
= 0x01050A,
145 S390_PFPO_D128_TO_F64
= 0x01060A,
146 S390_PFPO_D128_TO_F128
= 0x01070A
147 } s390_pfpo_function_t
;
149 /* PPNO function code as it is encoded in bits [57:63] of GR0
150 when PPNO insn is executed. */
153 S390_PPNO_QUERY
= 0x00,
154 S390_PPNO_SHA512_GEN
= 0x03,
155 S390_PPNO_SHA512_SEED
= 0x83
156 } s390_ppno_function_t
;
158 /* Size of parameter block for PPNO functions.
159 All values are in bytes.
161 #define S390_PPNO_PARAM_BLOCK_SIZE_QUERY 16
162 #define S390_PPNO_PARAM_BLOCK_SIZE_SHA512 240
164 /* Maximum length of modified memory for PPNO functions.
165 All values are in bytes.
167 #define S390_PPNO_MAX_SIZE_SHA512_SEED 512
168 #define S390_PPNO_MAX_SIZE_SHA512_GEN 64
171 /* The length of the longest mnemonic: locgrnhe */
172 #define S390_MAX_MNEMONIC_LEN 8
175 /*---------------------------------------------------------------*/
176 /*--- end s390_defs.h ---*/
177 /*---------------------------------------------------------------*/
179 #endif /* __VEX_S390_DEFS_H */