Add mvcl instruction
[mono.git] / mono / arch / s390 / s390-codegen.h
blob00bf06b8defdadd2717448cf950de607e927c56c
1 /*
2 Copyright (C) 2001 Radek Doulik
3 */
5 #ifndef S390_H
6 #define S390_H
7 #include <glib.h>
8 #include <assert.h>
10 #define FLOAT_REGS 2 /* No. float registers for parms */
11 #define GENERAL_REGS 5 /* No. general registers for parms */
13 #define ARG_BASE s390_r10 /* Register for addressing arguments*/
14 #define STKARG \
15 (i*(sizeof(stackval))) /* Displacement of ith argument */
17 #define MINV_POS 96 /* MonoInvocation stack offset */
18 #define STACK_POS (MINV_POS - sizeof (stackval) * sig->param_count)
19 #define OBJ_POS 8
20 #define TYPE_OFFSET (G_STRUCT_OFFSET (stackval, type))
22 #define MIN_CACHE_LINE 256
24 /*------------------------------------------------------------------*/
25 /* Sequence to add an int/long long to parameters to stack_from_data*/
26 /*------------------------------------------------------------------*/
27 #define ADD_ISTACK_PARM(r, i) \
28 if (reg_param < GENERAL_REGS-(r)) { \
29 s390_la (p, s390_r4, 0, STK_BASE, \
30 local_start + (reg_param - this_flag) * sizeof(long)); \
31 reg_param += (i); \
32 } else { \
33 s390_la (p, s390_r4, 0, STK_BASE, \
34 sz.stack_size + MINV_POS + stack_param * sizeof(long)); \
35 stack_param += (i); \
38 /*------------------------------------------------------------------*/
39 /* Sequence to add a float/double to parameters to stack_from_data */
40 /*------------------------------------------------------------------*/
41 #define ADD_RSTACK_PARM(i) \
42 if (fpr_param < FLOAT_REGS) { \
43 s390_la (p, s390_r4, 0, STK_BASE, \
44 float_pos + (fpr_param * sizeof(float) * (i))); \
45 fpr_param++; \
46 } else { \
47 stack_param += (stack_param % (i)); \
48 s390_la (p, s390_r4, 0, STK_BASE, \
49 sz.stack_size + MINV_POS + stack_param * sizeof(float) * (i)); \
50 stack_param += (i); \
53 /*------------------------------------------------------------------*/
54 /* Sequence to add a structure ptr to parameters to stack_from_data */
55 /*------------------------------------------------------------------*/
56 #define ADD_TSTACK_PARM \
57 if (reg_param < GENERAL_REGS) { \
58 s390_l (p, s390_r4, 0, STK_BASE, \
59 local_start + (reg_param - this_flag) * sizeof(long)); \
60 reg_param++; \
61 } else { \
62 s390_l (p, s390_r4, 0, STK_BASE, \
63 sz.stack_size + MINV_POS + stack_param * sizeof(long)); \
64 stack_param++; \
67 #define ADD_PSTACK_PARM(r, i) \
68 if (reg_param < GENERAL_REGS-(r)) { \
69 s390_la (p, s390_r4, 0, STK_BASE, \
70 local_start + (reg_param - this_flag) * sizeof(long)); \
71 reg_param += (i); \
72 } else { \
73 s390_l (p, s390_r4, 0, STK_BASE, \
74 sz.stack_size + MINV_POS + stack_param * sizeof(long)); \
75 stack_param++; \
77 typedef enum {
78 s390_r0 = 0,
79 s390_r1,
80 s390_r2,
81 s390_r3,
82 s390_r4,
83 s390_r5,
84 s390_r6,
85 s390_r7,
86 s390_r8,
87 s390_r9,
88 s390_r10,
89 s390_r11,
90 s390_r12,
91 s390_r13,
92 s390_r14,
93 s390_r15,
94 } S390IntRegister;
96 typedef enum {
97 s390_f0 = 0,
98 s390_f1,
99 s390_f2,
100 s390_f3,
101 s390_f4,
102 s390_f5,
103 s390_f6,
104 s390_f7,
105 s390_f8,
106 s390_f9,
107 s390_f10,
108 s390_f11,
109 s390_f12,
110 s390_f13,
111 s390_f14,
112 s390_f15,
113 } S390FloatRegister;
115 typedef enum {
116 s390_a0 = 0,
117 s390_a1,
118 s390_a2,
119 s390_a3,
120 s390_a4,
121 s390_a5,
122 s390_a6,
123 s390_a7,
124 s390_a8,
125 s390_a9,
126 s390_a10,
127 s390_a11,
128 s390_a12,
129 s390_a13,
130 s390_a14,
131 s390_a15,
132 } S390AccRegister;
134 typedef enum {
135 s390_fpc = 256,
136 } S390SpecialRegister;
138 #define s390_is_imm16(val) ((gint)val >= (gint)-(1<<15) && \
139 (gint)val <= (gint)((1<<15)-1))
140 #define s390_is_uimm16(val) ((gint)val >= 0 && (gint)val <= 65535)
141 #define s390_is_imm12(val) ((gint)val >= (gint)-(1<<11) && \
142 (gint)val <= (gint)((1<<15)-1))
143 #define s390_is_uimm12(val) ((gint)val >= 0 && (gint)val <= 4095)
145 #define STK_BASE s390_r15
146 #define S390_MINIMAL_STACK_SIZE 96
147 #define S390_REG_SAVE_OFFSET 24
148 #define S390_RET_ADDR_OFFSET 56
150 #define S390_CC_ZR 8
151 #define S390_CC_NE 7
152 #define S390_CC_NZ 7
153 #define S390_CC_LT 4
154 #define S390_CC_GT 2
155 #define S390_CC_GE 11
156 #define S390_CC_LE 13
157 #define S390_CC_OV 1
158 #define S390_CC_NO 14
159 #define S390_CC_CY 3
160 #define S390_CC_NC 12
161 #define S390_CC_UN 15
163 #define s390_word(addr, value) do {*((guint32 *) addr) = (guint32) (value); \
164 ((guint32 *) addr)++;} while (0)
165 #define s390_float(addr, value) do {*((guint32 *) addr) = (guint32) (value); \
166 ((guint32 *) addr)++;} while (0)
167 #define s390_llong(addr, value) do {*((guint64 *) addr) = (guint64) (value); \
168 ((guint64 *) addr)++;} while (0)
169 #define s390_double(addr, value) do {*((guint64 *) addr) = (guint64) (value); \
170 ((guint64 *) addr)++;} while (0)
171 #define s390_emit16(c, x) do {*((guint16 *) c) = x; ((guint16 *) c)++;} while(0)
172 #define s390_emit32(c, x) do {*((guint32 *) c) = x; ((guint32 *) c)++;} while(0)
173 #define s390_basr(code, r1, r2) s390_emit16 (code, (13 << 8 | (r1) << 4 | (r2)))
174 #define s390_bras(code, r, o) s390_emit32 (code, (167 << 24 | (r) << 20 | 5 << 16 | (o)))
175 #define s390_brasl(code, r, o) do {s390_emit16 (code, (192 << 8 | (r) << 4 | 5)); \
176 s390_emit32 (code, (o));} while(0)
177 #define s390_ahi(code, r, v) s390_emit32 (code, (167 << 24 | (r) << 20 | 10 << 16 | ((v) & 0xffff)))
178 #define s390_alcr(code, r1, r2) s390_emit32 (code, (185 << 24 | 152 << 16 | (r1) << 4 | (r2)))
179 #define s390_ar(code, r1, r2) s390_emit16 (code, (26 << 8 | (r1) << 4 | (r2)))
180 #define s390_alr(code, r1, r2) s390_emit16 (code, (30 << 8 | (r1) << 4 | (r2)))
181 #define s390_a(code, r, x, b, d) s390_emit32 (code, (90 << 24 | (r) << 20 | (x) << 16 | (b) << 12 | ((d) & 0xfff)))
182 #define s390_al(code, r, x, b, d) s390_emit32 (code, (94 << 24 | (r) << 20 | (x) << 16 | (b) << 12 | ((d) & 0xfff)))
183 #define s390_slbr(code, r1, r2) s390_emit32 (code, (185 << 24 | 153 << 16 | (r1) << 4 | (r2)))
184 #define s390_sr(code, r1, r2) s390_emit16 (code, (27 << 8 | (r1) << 4 | (r2)))
185 #define s390_slr(code, r1, r2) s390_emit16 (code, (31 << 8 | (r1) << 4 | (r2)))
186 #define s390_s(code, r, x, b, d) s390_emit32 (code, (91 << 24 | (r) << 20 | (x) << 16 | (b) << 12 | ((d) & 0xfff)))
187 #define s390_sl(code, r, x, b, d) s390_emit32 (code, (95 << 24 | (r) << 20 | (x) << 16 | (b) << 12 | ((d) & 0xfff)))
188 #define s390_mr(code, r1, r2) s390_emit16 (code, (28 << 8 | (r1) << 4 | (r2)))
189 #define s390_m(code, r, x, b, d) s390_emit32 (code, (92 << 24 | (r) << 20 | (x) << 16 | (b) << 12 | ((d) & 0xfff)))
190 #define s390_msr(code, r1, r2) s390_emit32 (code, (178 << 24 | 82 << 16 | (r1) << 4| (r2)))
191 #define s390_ms(code, r, x, b, d) s390_emit32 (code, (113 << 24 | (r) << 20 | (x) << 16 | (b) << 12 | ((d) & 0xfff)))
192 #define s390_mlr(code, r1, r2) s390_emit32 (code, (185 << 24 | 150 << 16 | (r1) << 4| (r2)))
193 #define s390_dr(code, r1, r2) s390_emit16 (code, (29 << 8 | (r1) << 4 | (r2)))
194 #define s390_d(code, r, x, b, d) s390_emit32 (code, (93 << 24 | (r) << 20 | (x) << 16 | (b) << 12 | ((d) & 0xfff)))
195 #define s390_dlr(code, r1, r2) s390_emit32 (code, (185 << 24 | 151 << 16 | (r1) << 4| (r2)))
196 #define s390_br(code, r) s390_emit16 (code, (7 << 8 | 15 << 4 | (r)))
197 #define s390_nr(code, r1, r2) s390_emit16 (code, (20 << 8 | (r1) << 4 | (r2)))
198 #define s390_n(code, r, x, b, d) s390_emit32 (code, (84 << 24 | (r) << 20 | (x) << 16 | (b) << 12 | ((d) & 0xfff)))
199 #define s390_or(code, r1, r2) s390_emit16 (code, (22 << 8 | (r1) << 4 | (r2)))
200 #define s390_o(code, r, x, b, d) s390_emit32 (code, (86 << 24 | (r) << 20 | (x) << 16 | (b) << 12 | ((d) & 0xfff)))
201 #define s390_xr(code, r1, r2) s390_emit16 (code, (23 << 8 | (r1) << 4 | (r2)))
202 #define s390_x(code, r, x, b, d) s390_emit32 (code, (87 << 24 | (r) << 20 | (x) << 16 | (b) << 12 | ((d) & 0xfff)))
203 #define s390_lr(code, r1, r2) s390_emit16 (code, (24 << 8 | (r1) << 4 | (r2)))
204 #define s390_ltr(code, r1, r2) s390_emit16 (code, (18 << 8 | (r1) << 4 | (r2)))
205 #define s390_l(code, r, x, b, d) s390_emit32 (code, (88 << 24 | (r) << 20 | (x) << 16 | (b) << 12 | ((d) & 0xfff)))
206 #define s390_lcr(code, r1, r2) s390_emit16 (code, (19 << 8 | (r1) << 4 | (r2)))
207 #define s390_lnr(code, r1, r2) s390_emit16 (code, (17 << 8 | (r1) << 4 | (r2)))
208 #define s390_lpr(code, r1, r2) s390_emit16 (code, (16 << 8 | (r1) << 4 | (r2)))
209 #define s390_lm(code, r1, r2, b, d) s390_emit32 (code, (152 << 24 | (r1) << 20 | (r2) << 16 \
210 | (b) << 12 | ((d) & 0xfff)))
211 #define s390_lh(code, r, x, b, d) s390_emit32 (code, (72 << 24 | (r) << 20 | (x) << 16 | (b) << 12 | ((d) & 0xfff)))
212 #define s390_lhi(code, r, v) s390_emit32 (code, (167 << 24 | (r) << 20 | 8 << 16 | ((v) & 0xffff)))
213 #define s390_ic(code, r, x, b, d) s390_emit32 (code, (67 << 24 | (r) << 20 | (x) << 16 | (b) << 12 | ((d) & 0xfff)))
214 #define s390_icm(code, r, m, b, d) s390_emit32 (code, (191 << 24 | (r) << 20 | (m) << 16 | (b) << 12 | ((d) & 0xfff)))
215 #define s390_st(code, r, x, b, d) s390_emit32 (code, (80 << 24 | (r) << 20 | (x) << 16 | (b) << 12 | ((d) & 0xfff)))
216 #define s390_stm(code, r1, r2, b, d) s390_emit32 (code, (144 << 24 | (r1) << 20 | (r2) << 16 \
217 | (b) << 12 | ((d) & 0xfff)))
218 #define s390_stam(c, r1, r2, b, d) s390_emit32 (code, (155 << 24 | (r1) << 20 | (r2) << 16 \
219 | (b) << 12 | ((d) & 0xfff)))
220 #define s390_lam(c, r1, r2, b, d) s390_emit32 (code, (154 << 24 | (r1) << 20 | (r2) << 16 \
221 | (b) << 12 | ((d) & 0xfff)))
222 #define s390_sth(code, r, x, b, d) s390_emit32 (code, (64 << 24 | (r) << 20 | (x) << 16 | (b) << 12 | ((d) & 0xfff)))
223 #define s390_stc(code, r, x, b, d) s390_emit32 (code, (66 << 24 | (r) << 20 | (x) << 16 | (b) << 12 | ((d) & 0xfff)))
224 #define s390_stcm(code, r, m, b, d) s390_emit32 (code, (190 << 24 | (r) << 20 | (m) << 16 | (b) << 12 | ((d) & 0xfff)))
225 #define s390_la(code, r, x, b, d) s390_emit32 (code, (65 << 24 | (r) << 20 | (x) << 16 | (b) << 12 | ((d) & 0xfff)))
226 #define s390_larl(code, r, o) do { \
227 s390_emit16 (code, (192 << 8 | (r) << 4)); \
228 s390_emit32 (code, (o)); \
229 } while (0)
230 #define s390_ld(code, f, x, b, d) s390_emit32 (code, (104 << 24 | (f) << 20 | (x) << 16 | (b) << 12 | ((d) & 0xfff)))
231 #define s390_le(code, f, x, b, d) s390_emit32 (code, (120 << 24 | (f) << 20 | (x) << 16 | (b) << 12 | ((d) & 0xfff)))
232 #define s390_std(code, f, x, b, d) s390_emit32 (code, (96 << 24 | (f) << 20 | (x) << 16 | (b) << 12 | ((d) & 0xfff)))
233 #define s390_ste(code, f, x, b, d) s390_emit32 (code, (112 << 24 | (f) << 20 | (x) << 16 | (b) << 12 | ((d) & 0xfff)))
234 #define s390_mvc(c, l, b1, d1, b2, d2) do {s390_emit32 (c, (210 << 24 | ((((l)-1) << 16) & 0x00ff0000) | \
235 (b1) << 12 | ((d1) & 0xfff))); \
236 s390_emit16 (c, ((b2) << 12 | ((d2) & 0xfff)));} while (0)
237 #define s390_mvcl(c, r1, r2) s390_emit16 (c, (14 << 8 | (r1) << 4 | (r2)))
238 #define s390_mvcle(c, r1, r3, d2, b2) s390_emit32 (c, (168 << 24 | (r1) << 20 | \
239 (r3) << 16 | (b2) << 12 | \
240 ((d2) & 0xfff)))
241 #define s390_break(c) s390_emit16 (c, 0)
242 #define s390_nill(c, r1, v) s390_emit32 (c, (165 << 24 | (r1) << 20 | 7 << 16 | ((v) & 0xffff)))
243 #define s390_nilh(c, r1, v) s390_emit32 (c, (165 << 24 | (r1) << 20 | 6 << 16 | ((v) & 0xffff)))
244 #define s390_brc(c, m, d) s390_emit32 (c, (167 << 24 | ((m) & 0xff) << 20 | 4 << 16 | ((d) & 0xffff)))
245 #define s390_cr(c, r1, r2) s390_emit16 (c, (25 << 8 | (r1) << 4 | (r2)))
246 #define s390_clr(c, r1, r2) s390_emit16 (c, (21 << 8 | (r1) << 4 | (r2)))
247 #define s390_c(c, r, x, b, d) s390_emit32 (c, (89 << 24 | (r) << 20 | (x) << 16 | (b) << 12 | ((d) & 0xfff)))
248 #define s390_cl(c, r, x, b, d) s390_emit32 (c, (85 << 24 | (r) << 20 | (x) << 16 | (b) << 12 | ((d) & 0xfff)))
249 #define s390_chi(c, r, i) s390_emit32 (c, (167 << 24 | (r) << 20 | 15 << 16 | ((i) & 0xffff)))
250 #define s390_j(c,d) s390_brc(c, S390_CC_UN, d)
251 #define s390_je(c, d) s390_brc(c, S390_CC_EQ, d)
252 #define s390_jeo(c, d) s390_brc(c, S390_CC_ZR|S390_CC_OV, d)
253 #define s390_jz(c, d) s390_brc(c, S390_CC_ZR, d)
254 #define s390_jnz(c, d) s390_brc(c, S390_CC_NZ, d)
255 #define s390_jne(c, d) s390_brc(c, S390_CC_NZ, d)
256 #define s390_jp(c, d) s390_brc(c, S390_CC_GT, d)
257 #define s390_jm(c, d) s390_brc(c, S390_CC_LT, d)
258 #define s390_jh(c, d) s390_brc(c, S390_CC_GT, d)
259 #define s390_jl(c, d) s390_brc(c, S390_CC_LT, d)
260 #define s390_jnh(c, d) s390_brc(c, S390_CC_LE, d)
261 #define s390_jo(c, d) s390_brc(c, S390_CC_OV, d)
262 #define s390_jnl(c, d) s390_brc(c, S390_CC_GE, d)
263 #define s390_jlo(c, d) s390_brc(c, S390_CC_LT|S390_CC_OV, d)
264 #define s390_jho(c, d) s390_brc(c, S390_CC_GT|S390_CC_OV, d)
265 #define s390_jc(c, m, d) s390_brc(c, m, d)
266 #define s390_jcl(c, m, d) do {s390_emit16 (c, (192 << 8 | (m) << 4 | 4)); \
267 s390_emit32 (c, (d));} while(0)
268 #define s390_slda(c, r, b, d) s390_emit32 (c, (143 << 24 | (r) << 20 | (b) << 12 | ((d) & 0xfff)))
269 #define s390_sldl(c, r, b, d) s390_emit32 (c, (141 << 24 | (r) << 20 | (b) << 12 | ((d) & 0xfff)))
270 #define s390_srda(c, r, b, d) s390_emit32 (c, (142 << 24 | (r) << 20 | (b) << 12 | ((d) & 0xfff)))
271 #define s390_srdl(c, r, b, d) s390_emit32 (c, (140 << 24 | (r) << 20 | (b) << 12 | ((d) & 0xfff)))
272 #define s390_sla(c, r, b, d) s390_emit32 (c, (139 << 24 | (r) << 20 | (b) << 12 | ((d) & 0xfff)))
273 #define s390_sll(c, r, b, d) s390_emit32 (c, (137 << 24 | (r) << 20 | (b) << 12 | ((d) & 0xfff)))
274 #define s390_sra(c, r, b, d) s390_emit32 (c, (138 << 24 | (r) << 20 | (b) << 12 | ((d) & 0xfff)))
275 #define s390_srl(c, r, b, d) s390_emit32 (c, (136 << 24 | (r) << 20 | (b) << 12 | ((d) & 0xfff)))
276 #define s390_sqdbr(c, r1, r2) s390_emit32 (c, (179 << 24 | 21 << 16 | ((r1) << 4) | (r2)))
277 #define s390_sqebr(c, r1, r2) s390_emit32 (c, (179 << 24 | 20 << 16 | ((r1) << 4) | (r2)))
278 #define s390_adbr(c, r1, r2) s390_emit32 (c, (179 << 24 | 26 << 16 | ((r1) << 4) | (r2)))
279 #define s390_aebr(c, r1, r2) s390_emit32 (c, (179 << 24 | 10 << 16 | ((r1) << 4) | (r2)))
280 #define s390_adb(c, r, x, b, d) do {s390_emit32 (c, (237 << 24 | (r) << 20 | \
281 (x) << 16 | (b) << 12 | ((d) & 0xfff))); \
282 s390_emit16 (c, (26)); \
283 } while (0)
284 #define s390_sdbr(c, r1, r2) s390_emit32 (c, (179 << 24 | 27 << 16 | ((r1) << 4) | (r2)))
285 #define s390_sdb(c, r, x, b, d) do {s390_emit32 (c, (237 << 24 | (r) << 20 | \
286 (x) << 16 | (b) << 12 | ((d) & 0xfff))); \
287 s390_emit16 (c, (27)); \
288 } while (0)
289 #define s390_sebr(c, r1, r2) s390_emit32 (c, (179 << 24 | 11 << 16 | ((r1) << 4) | (r2)))
290 #define s390_mdbr(c, r1, r2) s390_emit32 (c, (179 << 24 | 28 << 16 | ((r1) << 4) | (r2)))
291 #define s390_meebr(c, r1, r2) s390_emit32 (c, (179 << 24 | 23 << 16 | ((r1) << 4) | (r2)))
292 #define s390_ldr(c, r1, r2) s390_emit16 (c, (40 << 8 | (r1) << 4 | (r2)))
293 #define s390_ler(c, r1, r2) s390_emit16 (c, (56 << 8 | (r1) << 4 | (r2)))
294 #define s390_lzdr(c, r1) s390_emit32 (c, (179 << 24 | 117 << 16 | (r1) << 4))
295 #define s390_lzer(c, r1) s390_emit32 (c, (179 << 24 | 116 << 16 | (r1) << 4))
296 #define s390_ddbr(c, r1, r2) s390_emit32 (c, (179 << 24 | 29 << 16 | ((r1) << 4) | (r2)))
297 #define s390_debr(c, r1, r2) s390_emit32 (c, (179 << 24 | 13 << 16 | ((r1) << 4) | (r2)))
298 #define s390_didbr(c, r1, r2, m, r3) s390_emit32 (c, (179 << 24 | 91 << 16 | ((r3) << 12) | ((m) << 8) | ((r1) << 4) | (r2)))
299 #define s390_lcdbr(c, r1, r2) s390_emit32 (c, (179 << 24 | 19 << 16 | ((r1) << 4) | (r2)))
300 #define s390_lndbr(c, r1, r2) s390_emit32 (c, (179 << 24 | 17 << 16 | ((r1) << 4) | (r2)))
301 #define s390_ldebr(c, r1, r2) s390_emit32 (c, (179 << 24 | 4 << 16 | ((r1) << 4) | (r2)))
302 #define s390_lnebr(c, r1, r2) s390_emit32 (c, (179 << 24 | 1 << 16 | ((r1) << 4) | (r2)))
303 #define s390_ledbr(c, r1, r2) s390_emit32 (c, (179 << 24 | 68 << 16 | ((r1) << 4) | (r2)))
304 #define s390_ldeb(c, r, x, b, d) do {s390_emit32 (c, (237 << 24 | (r) << 20 | \
305 (x) << 16 | (b) << 12 | ((d) & 0xfff))); \
306 s390_emit16 (c, (4)); \
307 } while (0)
308 #define s390_cfdbr(c, r1, m, f2) s390_emit32 (c, (179 << 24 | 153 << 16 | (m) << 12 | (r1) << 4 | (f2)))
309 #define s390_cdfbr(c, r1, r2) s390_emit32 (c, (179 << 24 | 149 << 16 | (r1) << 4 | (r2)))
310 #define s390_cefbr(c, r1, r2) s390_emit32 (c, (179 << 24 | 148 << 16 | (r1) << 4 | (r2)))
311 #define s390_cdbr(c, r1, r2) s390_emit32 (c, (179 << 24 | 25 << 16 | (r1) << 4 | (r2)))
312 #define s390_cebr(c, r1, r2) s390_emit32 (c, (179 << 24 | 9 << 16 | (r1) << 4 | (r2)))
313 #define s390_cdb(c, r, x, b, d) do {s390_emit32 (c, (237 << 24 | (r) << 20 | \
314 (x) << 16 | (b) << 12 | ((d) & 0xfff))); \
315 s390_emit16 (c, (25)); \
316 } while (0)
317 #define s390_tcdb(c, r, x, b, d) do {s390_emit32 (c, (237 << 24 | (r) << 20 | \
318 (x) << 16 | (b) << 12 | ((d) & 0xfff))); \
319 s390_emit16 (c, (17)); \
320 } while (0)
321 #define s390_tedb(c, r, x, b, d) do {s390_emit32 (c, (237 << 24 | (r) << 20 | \
322 (x) << 16 | (b) << 12 | ((d) & 0xfff))); \
323 s390_emit16 (c, (16)); \
324 } while (0)
325 #define s390_stfpc(c, b, d) s390_emit32 (c, (178 << 24 | 156 << 16 | \
326 (b) << 12 | ((d) & 0xfff)))
328 #endif