guest_s390_toIR.c revision b32f58018498ea2225959b0ba11c18f0c433deef
1b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* -*- mode: C; c-basic-offset: 3; -*- */
2b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/*---------------------------------------------------------------*/
4b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/*--- begin                                 guest_s390_toIR.c ---*/
5b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/*---------------------------------------------------------------*/
6b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/*
8b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   This file is part of Valgrind, a dynamic binary instrumentation
9b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   framework.
10b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
11b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   Copyright IBM Corp. 2010-2011
12b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
13b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   This program is free software; you can redistribute it and/or
14b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   modify it under the terms of the GNU General Public License as
15b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   published by the Free Software Foundation; either version 2 of the
16b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   License, or (at your option) any later version.
17b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
18b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   This program is distributed in the hope that it will be useful, but
19b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   WITHOUT ANY WARRANTY; without even the implied warranty of
20b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
21b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   General Public License for more details.
22b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
23b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   You should have received a copy of the GNU General Public License
24b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   along with this program; if not, write to the Free Software
25b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
26b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   02110-1301, USA.
27b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
28b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   The GNU General Public License is contained in the file COPYING.
29b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov*/
30b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
31b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Contributed by Florian Krohm and Christian Borntraeger */
32b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
33b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Translates s390 code to IR. */
34b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
35b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#include "libvex_basictypes.h"
36b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#include "libvex_ir.h"
37b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#include "libvex_guest_s390x.h"      /* VexGuestS390XState */
38b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#include "libvex.h"                  /* needed for bb_to_IR.h */
39b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#include "libvex_guest_offsets.h"    /* OFFSET_s390x_SYSNO */
40b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#include "libvex_s390x_common.h"
41b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#include "main_util.h"               /* vassert */
42b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#include "main_globals.h"            /* vex_traceflags */
43b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#include "guest_generic_bb_to_IR.h"  /* DisResult */
44b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#include "guest_s390_defs.h"         /* prototypes for this file's functions */
45b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#include "host_s390_disasm.h"
46b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#include "host_s390_defs.h"          /* S390_ROUND_xyzzy */
47b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
48b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
49b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/*------------------------------------------------------------*/
50b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/*--- Forward declarations                                 ---*/
51b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/*------------------------------------------------------------*/
52b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic UInt s390_decode_and_irgen(UChar *, UInt, DisResult *);
53b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
54b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
55b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/*------------------------------------------------------------*/
56b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/*--- Globals                                              ---*/
57b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/*------------------------------------------------------------*/
58b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
59b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* The IRSB* into which we're generating code. */
60b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic IRSB *irsb;
61b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
62b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* The guest address for the instruction currently being
63b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   translated. */
64b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic Addr64 guest_IA_curr_instr;
65b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
66b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* The guest address for the instruction following the current instruction. */
67b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic Addr64 guest_IA_next_instr;
68b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
69b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Result of disassembly step. */
70b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic DisResult *dis_res;
71b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
72b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Resteer function and callback data */
73b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic Bool (*resteer_fn)(void *, Addr64);
74b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void *resteer_data;
75b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
76b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* The last seen execute target instruction */
77b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy StepanovULong last_execute_target;
78b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
79b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* The possible outcomes of a decoding operation */
80b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovtypedef enum {
81b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   S390_DECODE_OK,
82b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   S390_DECODE_UNKNOWN_INSN,
83b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   S390_DECODE_UNIMPLEMENTED_INSN,
84b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   S390_DECODE_UNKNOWN_SPECIAL_INSN,
85b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   S390_DECODE_ERROR
86b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov} s390_decode_t;
87b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
88b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/*------------------------------------------------------------*/
89b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/*--- Helpers for constructing IR.                         ---*/
90b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/*------------------------------------------------------------*/
91b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
92b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Sign extend a value with the given number of bits. This is a
93b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   macro because it allows us to overload the type of the value.
94b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   Note that VALUE must have a signed type! */
95b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#undef sign_extend
96b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define sign_extend(value,num_bits) \
97b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov(((value) << (sizeof(__typeof__(value)) * 8 - (num_bits))) >> \
98b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov (sizeof(__typeof__(value)) * 8 - (num_bits)))
99b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
100b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
101b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Add a statement to the current irsb. */
102b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ void
103b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstmt(IRStmt *st)
104b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
105b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   addStmtToIRSB(irsb, st);
106b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
107b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
108b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Allocate a new temporary of the given type. */
109b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ IRTemp
110b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy StepanovnewTemp(IRType type)
111b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
112b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   vassert(isPlausibleIRType(type));
113b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
114b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return newIRTemp(irsb->tyenv, type);
115b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
116b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
117b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Create an expression node for a temporary */
118b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ IRExpr *
119b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovmkexpr(IRTemp tmp)
120b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
121b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return IRExpr_RdTmp(tmp);
122b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
123b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
124b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Add a statement that assigns to a temporary */
125b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ void
126b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovassign(IRTemp dst, IRExpr *expr)
127b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
128b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   stmt(IRStmt_WrTmp(dst, expr));
129b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
130b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
131b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Create a temporary of the given type and assign the expression to it */
132b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ IRTemp
133b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovmktemp(IRType type, IRExpr *expr)
134b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
135b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp temp = newTemp(type);
136b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
137b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(temp, expr);
138b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
139b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return temp;
140b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
141b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
142b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Create a unary expression */
143b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ IRExpr *
144b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovunop(IROp kind, IRExpr *op)
145b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
146b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return IRExpr_Unop(kind, op);
147b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
148b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
149b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Create a binary expression */
150b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ IRExpr *
151b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovbinop(IROp kind, IRExpr *op1, IRExpr *op2)
152b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
153b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return IRExpr_Binop(kind, op1, op2);
154b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
155b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
156b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Create a ternary expression */
157b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ IRExpr *
158b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovtriop(IROp kind, IRExpr *op1, IRExpr *op2, IRExpr *op3)
159b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
160b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return IRExpr_Triop(kind, op1, op2, op3);
161b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
162b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
163b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Create a quaternary expression */
164b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__  IRExpr *
165b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovqop(IROp kind, IRExpr *op1, IRExpr *op2, IRExpr *op3, IRExpr *op4)
166b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
167b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return IRExpr_Qop(kind, op1, op2, op3, op4);
168b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
169b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
170b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Create an expression node for an 8-bit integer constant */
171b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ IRExpr *
172b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy StepanovmkU8(UInt value)
173b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
174b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   vassert(value < 256);
175b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
176b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return IRExpr_Const(IRConst_U8((UChar)value));
177b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
178b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
179b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Create an expression node for a 16-bit integer constant */
180b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ IRExpr *
181b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy StepanovmkU16(UInt value)
182b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
183b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   vassert(value < 65536);
184b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
185b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return IRExpr_Const(IRConst_U16((UShort)value));
186b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
187b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
188b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Create an expression node for a 32-bit integer constant */
189b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ IRExpr *
190b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy StepanovmkU32(UInt value)
191b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
192b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return IRExpr_Const(IRConst_U32(value));
193b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
194b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
195b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Create an expression node for a 64-bit integer constant */
196b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ IRExpr *
197b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy StepanovmkU64(ULong value)
198b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
199b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return IRExpr_Const(IRConst_U64(value));
200b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
201b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
202b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Create an expression node for a 32-bit floating point constant
203b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   whose value is given by a bit pattern. */
204b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ IRExpr *
205b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy StepanovmkF32i(UInt value)
206b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
207b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return IRExpr_Const(IRConst_F32i(value));
208b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
209b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
210b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Create an expression node for a 32-bit floating point constant
211b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   whose value is given by a bit pattern. */
212b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ IRExpr *
213b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy StepanovmkF64i(ULong value)
214b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
215b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return IRExpr_Const(IRConst_F64i(value));
216b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
217b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
218b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Little helper function for my sanity. ITE = if-then-else */
219b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic IRExpr *
220b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovmkite(IRExpr *condition, IRExpr *iftrue, IRExpr *iffalse)
221b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
222b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   vassert(typeOfIRExpr(irsb->tyenv, condition) == Ity_I1);
223b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
224b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return IRExpr_Mux0X(unop(Iop_1Uto8, condition), iffalse, iftrue);
225b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
226b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
227b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Add a statement that stores DATA at ADDR. This is a big-endian machine. */
228b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void __inline__
229b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstore(IRExpr *addr, IRExpr *data)
230b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
231b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   stmt(IRStmt_Store(Iend_BE, addr, data));
232b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
233b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
234b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Create an expression that loads a TYPE sized value from ADDR.
235b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   This is a big-endian machine. */
236b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ IRExpr *
237b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovload(IRType type, IRExpr *addr)
238b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
239b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return IRExpr_Load(Iend_BE, type, addr);
240b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
241b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
242b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Function call */
243b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
244b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovcall_function(IRExpr *callee_address)
245b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
246b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   irsb->next = callee_address;
247b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   irsb->jumpkind = Ijk_Call;
248b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
249b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   dis_res->whatNext = Dis_StopHere;
250b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
251b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
252b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Function call with known target. */
253b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
254b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovcall_function_and_chase(Addr64 callee_address)
255b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
256b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (resteer_fn(resteer_data, callee_address)) {
257b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      dis_res->whatNext   = Dis_ResteerU;
258b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      dis_res->continueAt = callee_address;
259b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } else {
260b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      irsb->next = mkU64(callee_address);
261b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      irsb->jumpkind = Ijk_Call;
262b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      dis_res->whatNext = Dis_StopHere;
263b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
264b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
265b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
266b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Function return sequence */
267b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
268b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovreturn_from_function(IRExpr *return_address)
269b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
270b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   irsb->next = return_address;
271b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   irsb->jumpkind = Ijk_Ret;
272b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
273b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   dis_res->whatNext = Dis_StopHere;
274b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
275b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
276b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* A conditional branch whose target is not known at instrumentation time.
277b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
278b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (condition) goto computed_target;
279b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
280b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   Needs to be represented as:
281b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
282b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (! condition) goto next_instruction;
283b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   goto computed_target;
284b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
285b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   This inversion is being handled at code generation time. So we just
286b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   take the condition here as is.
287b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov*/
288b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
289b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovif_not_condition_goto_computed(IRExpr *condition, IRExpr *target)
290b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
291b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   vassert(typeOfIRExpr(irsb->tyenv, condition) == Ity_I1);
292b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
293b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   stmt(IRStmt_Exit(condition, Ijk_Boring, IRConst_U64(guest_IA_next_instr)));
294b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
295b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   irsb->next = target;
296b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   irsb->jumpkind = Ijk_Boring;
297b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
298b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   dis_res->whatNext = Dis_StopHere;
299b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
300b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
301b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* A conditional branch whose target is known at instrumentation time. */
302b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
303b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovif_condition_goto(IRExpr *condition, Addr64 target)
304b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
305b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   vassert(typeOfIRExpr(irsb->tyenv, condition) == Ity_I1);
306b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
307b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   stmt(IRStmt_Exit(condition, Ijk_Boring, IRConst_U64(target)));
308b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   dis_res->whatNext = Dis_Continue;
309b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
310b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
311b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* An unconditional branch. Target may or may not be known at instrumentation
312b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   time. */
313b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
314b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovalways_goto(IRExpr *target)
315b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
316b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   irsb->next = target;
317b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   irsb->jumpkind = Ijk_Boring;
318b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
319b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   dis_res->whatNext = Dis_StopHere;
320b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
321b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
322b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* An unconditional branch to a known target. */
323b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
324b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovalways_goto_and_chase(Addr64 target)
325b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
326b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (resteer_fn(resteer_data, target)) {
327b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      dis_res->whatNext   = Dis_ResteerU;
328b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      dis_res->continueAt = target;
329b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } else {
330b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      irsb->next = mkU64(target);
331b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      irsb->jumpkind = Ijk_Boring;
332b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      dis_res->whatNext = Dis_StopHere;
333b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
334b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
335b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
336b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* A system call */
337b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
338b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovsystem_call(IRExpr *sysno)
339b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
340b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* Store the system call number in the pseudo register. */
341b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   stmt(IRStmt_Put(OFFSET_s390x_SYSNO, sysno));
342b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
343b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* Store the current IA into guest_IP_AT_SYSCALL. libvex_ir.h says so. */
344b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   stmt(IRStmt_Put(OFFSET_s390x_IP_AT_SYSCALL, mkU64(guest_IA_curr_instr)));
345b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
346b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* It's important that all ArchRegs carry their up-to-date value
347b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      at this point.  So we declare an end-of-block here, which
348b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      forces any TempRegs caching ArchRegs to be flushed. */
349b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   irsb->next = mkU64(guest_IA_next_instr);
350b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
351b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   irsb->jumpkind = Ijk_Sys_syscall;
352b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
353b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   dis_res->whatNext = Dis_StopHere;
354b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
355b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
356b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Encode the s390 rounding mode as it appears in the m3/m4 fields of certain
357b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   instructions to VEX's IRRoundingMode. */
358b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic IRRoundingMode
359b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovencode_rounding_mode(UChar mode)
360b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
361b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   switch (mode) {
362b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case S390_ROUND_NEAREST_EVEN:  return Irrm_NEAREST;
363b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case S390_ROUND_ZERO:          return Irrm_ZERO;
364b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case S390_ROUND_POSINF:        return Irrm_PosINF;
365b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case S390_ROUND_NEGINF:        return Irrm_NegINF;
366b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
367b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   vpanic("encode_rounding_mode");
368b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
369b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
370b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ IRExpr *get_fpr_dw0(UInt);
371b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ void    put_fpr_dw0(UInt, IRExpr *);
372b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
373b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Read a floating point register pair and combine their contents into a
374b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   128-bit value */
375b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic IRExpr *
376b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovget_fpr_pair(UInt archreg)
377b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
378b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRExpr *high = get_fpr_dw0(archreg);
379b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRExpr *low  = get_fpr_dw0(archreg + 2);
380b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
381b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return binop(Iop_F64HLtoF128, high, low);
382b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
383b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
384b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Write a 128-bit floating point value into a register pair. */
385b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
386b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovput_fpr_pair(UInt archreg, IRExpr *expr)
387b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
388b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRExpr *high = unop(Iop_F128HItoF64, expr);
389b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRExpr *low  = unop(Iop_F128LOtoF64, expr);
390b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
391b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_dw0(archreg,     high);
392b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_dw0(archreg + 2, low);
393b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
394b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
395b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
396b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Flags thunk offsets */
397b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define S390X_GUEST_OFFSET_CC_OP    S390X_GUEST_OFFSET(guest_CC_OP)
398b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define S390X_GUEST_OFFSET_CC_DEP1  S390X_GUEST_OFFSET(guest_CC_DEP1)
399b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define S390X_GUEST_OFFSET_CC_DEP2  S390X_GUEST_OFFSET(guest_CC_DEP2)
400b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define S390X_GUEST_OFFSET_CC_NDEP  S390X_GUEST_OFFSET(guest_CC_NDEP)
401b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
402b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/*------------------------------------------------------------*/
403b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/*--- Build the flags thunk.                               ---*/
404b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/*------------------------------------------------------------*/
405b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
406b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Completely fill the flags thunk. We're always filling all fields.
407b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   Apparently, that is better for redundant PUT elimination. */
408b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
409b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_cc_thunk_fill(IRExpr *op, IRExpr *dep1, IRExpr *dep2, IRExpr *ndep)
410b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
411b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UInt op_off, dep1_off, dep2_off, ndep_off;
412b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
413b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op_off   = S390X_GUEST_OFFSET_CC_OP;
414b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   dep1_off = S390X_GUEST_OFFSET_CC_DEP1;
415b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   dep2_off = S390X_GUEST_OFFSET_CC_DEP2;
416b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   ndep_off = S390X_GUEST_OFFSET_CC_NDEP;
417b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
418b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   stmt(IRStmt_Put(op_off,   op));
419b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   stmt(IRStmt_Put(dep1_off, dep1));
420b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   stmt(IRStmt_Put(dep2_off, dep2));
421b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   stmt(IRStmt_Put(ndep_off, ndep));
422b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
423b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
424b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
425b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Create an expression for V and widen the result to 64 bit. */
426b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic IRExpr *
427b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_cc_widen(IRTemp v, Bool sign_extend)
428b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
429b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRExpr *expr;
430b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
431b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   expr = mkexpr(v);
432b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
433b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   switch (typeOfIRTemp(irsb->tyenv, v)) {
434b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case Ity_I64:
435b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      break;
436b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case Ity_I32:
437b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      expr = unop(sign_extend ? Iop_32Sto64 : Iop_32Uto64, expr);
438b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      break;
439b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case Ity_I16:
440b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      expr = unop(sign_extend ? Iop_16Sto64 : Iop_16Uto64, expr);
441b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      break;
442b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case Ity_I8:
443b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      expr = unop(sign_extend ? Iop_8Sto64 : Iop_8Uto64, expr);
444b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      break;
445b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   default:
446b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      vpanic("s390_cc_widen");
447b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
448b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
449b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return expr;
450b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
451b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
452b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
453b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_cc_thunk_put1(UInt opc, IRTemp d1, Bool sign_extend)
454b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
455b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRExpr *op, *dep1, *dep2, *ndep;
456b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
457b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op   = mkU64(opc);
458b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   dep1 = s390_cc_widen(d1, sign_extend);
459b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   dep2 = mkU64(0);
460b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   ndep = mkU64(0);
461b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
462b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_fill(op, dep1, dep2, ndep);
463b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
464b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
465b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
466b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
467b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_cc_thunk_put2(UInt opc, IRTemp d1, IRTemp d2, Bool sign_extend)
468b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
469b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRExpr *op, *dep1, *dep2, *ndep;
470b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
471b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op   = mkU64(opc);
472b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   dep1 = s390_cc_widen(d1, sign_extend);
473b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   dep2 = s390_cc_widen(d2, sign_extend);
474b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   ndep = mkU64(0);
475b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
476b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_fill(op, dep1, dep2, ndep);
477b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
478b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
479b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
480b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* memcheck believes that the NDEP field in the flags thunk is always
481b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   defined. But for some flag computations (e.g. add with carry) that is
482b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   just not true. We therefore need to convey to memcheck that the value
483b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   of the ndep field does matter and therefore we make the DEP2 field
484b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   depend on it:
485b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
486b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   DEP2 = original_DEP2 ^ NDEP
487b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
488b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   In s390_calculate_cc we exploit that  (a^b)^b == a
489b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   I.e. we xor the DEP2 value with the NDEP value to recover the
490b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   original_DEP2 value. */
491b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
492b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_cc_thunk_put3(UInt opc, IRTemp d1, IRTemp d2, IRTemp nd, Bool sign_extend)
493b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
494b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRExpr *op, *dep1, *dep2, *ndep, *dep2x;
495b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
496b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op   = mkU64(opc);
497b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   dep1 = s390_cc_widen(d1, sign_extend);
498b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   dep2 = s390_cc_widen(d2, sign_extend);
499b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   ndep = s390_cc_widen(nd, sign_extend);
500b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
501b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   dep2x = binop(Iop_Xor64, dep2, ndep);
502b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
503b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_fill(op, dep1, dep2x, ndep);
504b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
505b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
506b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
507b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Write one floating point value into the flags thunk */
508b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
509b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_cc_thunk_put1f(UInt opc, IRTemp d1)
510b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
511b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRExpr *op, *dep1, *dep2, *ndep;
512b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
513b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op   = mkU64(opc);
514b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   dep1 = mkexpr(d1);
515b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   dep2 = mkU64(0);
516b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   ndep = mkU64(0);
517b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
518b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_fill(op, dep1, dep2, ndep);
519b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
520b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
521b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
522b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Write a floating point value and an integer into the flags thunk. The
523b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   integer value is zero-extended first. */
524b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
525b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_cc_thunk_putFZ(UInt opc, IRTemp d1, IRTemp d2)
526b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
527b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRExpr *op, *dep1, *dep2, *ndep;
528b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
529b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op   = mkU64(opc);
530b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   dep1 = mkexpr(d1);
531b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   dep2 = s390_cc_widen(d2, False);
532b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   ndep = mkU64(0);
533b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
534b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_fill(op, dep1, dep2, ndep);
535b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
536b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
537b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
538b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Write a 128-bit floating point value into the flags thunk. This is
539b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   done by splitting the value into two 64-bits values. */
540b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
541b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_cc_thunk_put1f128(UInt opc, IRTemp d1)
542b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
543b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRExpr *op, *hi, *lo, *ndep;
544b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
545b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op   = mkU64(opc);
546b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   hi   = unop(Iop_F128HItoF64, mkexpr(d1));
547b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   lo   = unop(Iop_F128LOtoF64, mkexpr(d1));
548b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   ndep = mkU64(0);
549b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
550b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_fill(op, hi, lo, ndep);
551b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
552b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
553b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
554b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Write a 128-bit floating point value and an integer into the flags thunk.
555b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   The integer value is zero-extended first. */
556b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
557b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_cc_thunk_put1f128Z(UInt opc, IRTemp d1, IRTemp nd)
558b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
559b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRExpr *op, *hi, *lo, *lox, *ndep;
560b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
561b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op   = mkU64(opc);
562b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   hi   = unop(Iop_F128HItoF64, mkexpr(d1));
563b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   lo   = unop(Iop_ReinterpF64asI64, unop(Iop_F128LOtoF64, mkexpr(d1)));
564b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   ndep = s390_cc_widen(nd, False);
565b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
566b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   lox = binop(Iop_Xor64, lo, ndep);  /* convey dependency */
567b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
568b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_fill(op, hi, lox, ndep);
569b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
570b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
571b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
572b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
573b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_cc_set(UInt val)
574b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
575b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_fill(mkU64(S390_CC_OP_SET),
576b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                      mkU64(val), mkU64(0), mkU64(0));
577b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
578b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
579b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Build IR to calculate the condition code from flags thunk.
580b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   Returns an expression of type Ity_I32 */
581b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic IRExpr *
582b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_call_calculate_cc(void)
583b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
584b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRExpr **args, *call, *op, *dep1, *dep2, *ndep;
585b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
586b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op   = IRExpr_Get(S390X_GUEST_OFFSET_CC_OP,   Ity_I64);
587b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   dep1 = IRExpr_Get(S390X_GUEST_OFFSET_CC_DEP1, Ity_I64);
588b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   dep2 = IRExpr_Get(S390X_GUEST_OFFSET_CC_DEP2, Ity_I64);
589b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   ndep = IRExpr_Get(S390X_GUEST_OFFSET_CC_NDEP, Ity_I64);
590b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
591b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   args = mkIRExprVec_4(op, dep1, dep2, ndep);
592b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   call = mkIRExprCCall(Ity_I32, 0 /*regparm*/,
593b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                        "s390_calculate_cc", &s390_calculate_cc, args);
594b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
595b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* Exclude OP and NDEP from definedness checking.  We're only
596b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      interested in DEP1 and DEP2. */
597b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   call->Iex.CCall.cee->mcx_mask = (1<<0) | (1<<3);
598b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
599b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return call;
600b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
601b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
602b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Build IR to calculate the internal condition code for a "compare and branch"
603b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   insn. Returns an expression of type Ity_I32 */
604b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic IRExpr *
605b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_call_calculate_icc(UInt opc, IRTemp op1, IRTemp op2, Bool sign_extend)
606b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
607b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRExpr **args, *call, *op, *dep1, *dep2;
608b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
609b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op   = mkU64(opc);
610b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   dep1 = s390_cc_widen(op1, sign_extend);
611b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   dep2 = s390_cc_widen(op2, sign_extend);
612b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
613b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   args = mkIRExprVec_3(op, dep1, dep2);
614b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   call = mkIRExprCCall(Ity_I32, 0 /*regparm*/,
615b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                        "s390_calculate_icc", &s390_calculate_icc, args);
616b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
617b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* Exclude OP from definedness checking.  We're only
618b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      interested in DEP1 and DEP2. */
619b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   call->Iex.CCall.cee->mcx_mask = (1<<0);
620b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
621b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return call;
622b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
623b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
624b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Build IR to calculate the condition code from flags thunk.
625b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   Returns an expression of type Ity_I32 */
626b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic IRExpr *
627b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_call_calculate_cond(UInt m)
628b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
629b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRExpr **args, *call, *op, *dep1, *dep2, *ndep, *mask;
630b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
631b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   mask = mkU64(m);
632b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op   = IRExpr_Get(S390X_GUEST_OFFSET_CC_OP,   Ity_I64);
633b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   dep1 = IRExpr_Get(S390X_GUEST_OFFSET_CC_DEP1, Ity_I64);
634b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   dep2 = IRExpr_Get(S390X_GUEST_OFFSET_CC_DEP2, Ity_I64);
635b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   ndep = IRExpr_Get(S390X_GUEST_OFFSET_CC_NDEP, Ity_I64);
636b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
637b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   args = mkIRExprVec_5(mask, op, dep1, dep2, ndep);
638b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   call = mkIRExprCCall(Ity_I32, 0 /*regparm*/,
639b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                        "s390_calculate_cond", &s390_calculate_cond, args);
640b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
641b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* Exclude the requested condition, OP and NDEP from definedness
642b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      checking.  We're only interested in DEP1 and DEP2. */
643b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   call->Iex.CCall.cee->mcx_mask = (1<<0) | (1<<1) | (1<<4);
644b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
645b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return call;
646b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
647b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
648b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define s390_cc_thunk_putZ(op,dep1)  s390_cc_thunk_put1(op,dep1,False)
649b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define s390_cc_thunk_putS(op,dep1)  s390_cc_thunk_put1(op,dep1,True)
650b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define s390_cc_thunk_putF(op,dep1)  s390_cc_thunk_put1f(op,dep1)
651b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define s390_cc_thunk_putZZ(op,dep1,dep2) s390_cc_thunk_put2(op,dep1,dep2,False)
652b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define s390_cc_thunk_putSS(op,dep1,dep2) s390_cc_thunk_put2(op,dep1,dep2,True)
653b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define s390_cc_thunk_putFF(op,dep1,dep2) s390_cc_thunk_put2f(op,dep1,dep2)
654b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define s390_cc_thunk_putZZZ(op,dep1,dep2,ndep) \
655b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        s390_cc_thunk_put3(op,dep1,dep2,ndep,False)
656b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define s390_cc_thunk_putSSS(op,dep1,dep2,ndep) \
657b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        s390_cc_thunk_put3(op,dep1,dep2,ndep,True)
658b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define s390_call_calculate_iccZZ(op,dep1,dep2) \
659b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        s390_call_calculate_icc(op,dep1,dep2,False)
660b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define s390_call_calculate_iccSS(op,dep1,dep2) \
661b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        s390_call_calculate_icc(op,dep1,dep2,True)
662b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
663b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
664b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define OFFB_TISTART   S390X_GUEST_OFFSET(guest_TISTART)
665b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define OFFB_TILEN     S390X_GUEST_OFFSET(guest_TILEN)
666b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
667b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
668b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/*------------------------------------------------------------*/
669b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/*--- Guest register access                                ---*/
670b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/*------------------------------------------------------------*/
671b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
672b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
673b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/*------------------------------------------------------------*/
674b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/*--- ar registers                                         ---*/
675b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/*------------------------------------------------------------*/
676b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
677b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Return the guest state offset of a ar register. */
678b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic UInt
679b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovar_offset(UInt archreg)
680b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
681b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   static const UInt offset[16] = {
682b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      S390X_GUEST_OFFSET(guest_a0),
683b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      S390X_GUEST_OFFSET(guest_a1),
684b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      S390X_GUEST_OFFSET(guest_a2),
685b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      S390X_GUEST_OFFSET(guest_a3),
686b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      S390X_GUEST_OFFSET(guest_a4),
687b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      S390X_GUEST_OFFSET(guest_a5),
688b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      S390X_GUEST_OFFSET(guest_a6),
689b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      S390X_GUEST_OFFSET(guest_a7),
690b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      S390X_GUEST_OFFSET(guest_a8),
691b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      S390X_GUEST_OFFSET(guest_a9),
692b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      S390X_GUEST_OFFSET(guest_a10),
693b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      S390X_GUEST_OFFSET(guest_a11),
694b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      S390X_GUEST_OFFSET(guest_a12),
695b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      S390X_GUEST_OFFSET(guest_a13),
696b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      S390X_GUEST_OFFSET(guest_a14),
697b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      S390X_GUEST_OFFSET(guest_a15),
698b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   };
699b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
700b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   vassert(archreg < 16);
701b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
702b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return offset[archreg];
703b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
704b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
705b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
706b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Return the guest state offset of word #0 of a ar register. */
707b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ UInt
708b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovar_w0_offset(UInt archreg)
709b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
710b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return ar_offset(archreg) + 0;
711b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
712b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
713b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Write word #0 of a ar to the guest state. */
714b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ void
715b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovput_ar_w0(UInt archreg, IRExpr *expr)
716b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
717b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   vassert(typeOfIRExpr(irsb->tyenv, expr) == Ity_I32);
718b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
719b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   stmt(IRStmt_Put(ar_w0_offset(archreg), expr));
720b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
721b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
722b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Read word #0 of a ar register. */
723b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ IRExpr *
724b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovget_ar_w0(UInt archreg)
725b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
726b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return IRExpr_Get(ar_w0_offset(archreg), Ity_I32);
727b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
728b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
729b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
730b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/*------------------------------------------------------------*/
731b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/*--- fpr registers                                        ---*/
732b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/*------------------------------------------------------------*/
733b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
734b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Return the guest state offset of a fpr register. */
735b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic UInt
736b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovfpr_offset(UInt archreg)
737b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
738b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   static const UInt offset[16] = {
739b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      S390X_GUEST_OFFSET(guest_f0),
740b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      S390X_GUEST_OFFSET(guest_f1),
741b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      S390X_GUEST_OFFSET(guest_f2),
742b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      S390X_GUEST_OFFSET(guest_f3),
743b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      S390X_GUEST_OFFSET(guest_f4),
744b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      S390X_GUEST_OFFSET(guest_f5),
745b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      S390X_GUEST_OFFSET(guest_f6),
746b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      S390X_GUEST_OFFSET(guest_f7),
747b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      S390X_GUEST_OFFSET(guest_f8),
748b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      S390X_GUEST_OFFSET(guest_f9),
749b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      S390X_GUEST_OFFSET(guest_f10),
750b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      S390X_GUEST_OFFSET(guest_f11),
751b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      S390X_GUEST_OFFSET(guest_f12),
752b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      S390X_GUEST_OFFSET(guest_f13),
753b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      S390X_GUEST_OFFSET(guest_f14),
754b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      S390X_GUEST_OFFSET(guest_f15),
755b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   };
756b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
757b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   vassert(archreg < 16);
758b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
759b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return offset[archreg];
760b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
761b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
762b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
763b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Return the guest state offset of word #0 of a fpr register. */
764b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ UInt
765b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovfpr_w0_offset(UInt archreg)
766b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
767b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return fpr_offset(archreg) + 0;
768b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
769b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
770b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Write word #0 of a fpr to the guest state. */
771b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ void
772b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovput_fpr_w0(UInt archreg, IRExpr *expr)
773b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
774b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   vassert(typeOfIRExpr(irsb->tyenv, expr) == Ity_F32);
775b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
776b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   stmt(IRStmt_Put(fpr_w0_offset(archreg), expr));
777b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
778b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
779b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Read word #0 of a fpr register. */
780b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ IRExpr *
781b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovget_fpr_w0(UInt archreg)
782b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
783b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return IRExpr_Get(fpr_w0_offset(archreg), Ity_F32);
784b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
785b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
786b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Return the guest state offset of double word #0 of a fpr register. */
787b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ UInt
788b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovfpr_dw0_offset(UInt archreg)
789b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
790b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return fpr_offset(archreg) + 0;
791b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
792b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
793b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Write double word #0 of a fpr to the guest state. */
794b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ void
795b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovput_fpr_dw0(UInt archreg, IRExpr *expr)
796b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
797b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   vassert(typeOfIRExpr(irsb->tyenv, expr) == Ity_F64);
798b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
799b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   stmt(IRStmt_Put(fpr_dw0_offset(archreg), expr));
800b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
801b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
802b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Read double word #0 of a fpr register. */
803b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ IRExpr *
804b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovget_fpr_dw0(UInt archreg)
805b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
806b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return IRExpr_Get(fpr_dw0_offset(archreg), Ity_F64);
807b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
808b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
809b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
810b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/*------------------------------------------------------------*/
811b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/*--- gpr registers                                        ---*/
812b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/*------------------------------------------------------------*/
813b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
814b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Return the guest state offset of a gpr register. */
815b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic UInt
816b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovgpr_offset(UInt archreg)
817b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
818b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   static const UInt offset[16] = {
819b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      S390X_GUEST_OFFSET(guest_r0),
820b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      S390X_GUEST_OFFSET(guest_r1),
821b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      S390X_GUEST_OFFSET(guest_r2),
822b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      S390X_GUEST_OFFSET(guest_r3),
823b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      S390X_GUEST_OFFSET(guest_r4),
824b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      S390X_GUEST_OFFSET(guest_r5),
825b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      S390X_GUEST_OFFSET(guest_r6),
826b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      S390X_GUEST_OFFSET(guest_r7),
827b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      S390X_GUEST_OFFSET(guest_r8),
828b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      S390X_GUEST_OFFSET(guest_r9),
829b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      S390X_GUEST_OFFSET(guest_r10),
830b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      S390X_GUEST_OFFSET(guest_r11),
831b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      S390X_GUEST_OFFSET(guest_r12),
832b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      S390X_GUEST_OFFSET(guest_r13),
833b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      S390X_GUEST_OFFSET(guest_r14),
834b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      S390X_GUEST_OFFSET(guest_r15),
835b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   };
836b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
837b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   vassert(archreg < 16);
838b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
839b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return offset[archreg];
840b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
841b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
842b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
843b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Return the guest state offset of word #0 of a gpr register. */
844b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ UInt
845b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovgpr_w0_offset(UInt archreg)
846b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
847b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return gpr_offset(archreg) + 0;
848b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
849b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
850b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Write word #0 of a gpr to the guest state. */
851b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ void
852b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovput_gpr_w0(UInt archreg, IRExpr *expr)
853b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
854b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   vassert(typeOfIRExpr(irsb->tyenv, expr) == Ity_I32);
855b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
856b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   stmt(IRStmt_Put(gpr_w0_offset(archreg), expr));
857b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
858b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
859b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Read word #0 of a gpr register. */
860b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ IRExpr *
861b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovget_gpr_w0(UInt archreg)
862b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
863b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return IRExpr_Get(gpr_w0_offset(archreg), Ity_I32);
864b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
865b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
866b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Return the guest state offset of double word #0 of a gpr register. */
867b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ UInt
868b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovgpr_dw0_offset(UInt archreg)
869b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
870b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return gpr_offset(archreg) + 0;
871b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
872b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
873b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Write double word #0 of a gpr to the guest state. */
874b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ void
875b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovput_gpr_dw0(UInt archreg, IRExpr *expr)
876b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
877b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   vassert(typeOfIRExpr(irsb->tyenv, expr) == Ity_I64);
878b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
879b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   stmt(IRStmt_Put(gpr_dw0_offset(archreg), expr));
880b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
881b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
882b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Read double word #0 of a gpr register. */
883b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ IRExpr *
884b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovget_gpr_dw0(UInt archreg)
885b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
886b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return IRExpr_Get(gpr_dw0_offset(archreg), Ity_I64);
887b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
888b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
889b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Return the guest state offset of half word #1 of a gpr register. */
890b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ UInt
891b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovgpr_hw1_offset(UInt archreg)
892b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
893b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return gpr_offset(archreg) + 2;
894b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
895b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
896b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Write half word #1 of a gpr to the guest state. */
897b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ void
898b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovput_gpr_hw1(UInt archreg, IRExpr *expr)
899b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
900b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   vassert(typeOfIRExpr(irsb->tyenv, expr) == Ity_I16);
901b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
902b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   stmt(IRStmt_Put(gpr_hw1_offset(archreg), expr));
903b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
904b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
905b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Read half word #1 of a gpr register. */
906b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ IRExpr *
907b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovget_gpr_hw1(UInt archreg)
908b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
909b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return IRExpr_Get(gpr_hw1_offset(archreg), Ity_I16);
910b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
911b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
912b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Return the guest state offset of byte #6 of a gpr register. */
913b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ UInt
914b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovgpr_b6_offset(UInt archreg)
915b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
916b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return gpr_offset(archreg) + 6;
917b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
918b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
919b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Write byte #6 of a gpr to the guest state. */
920b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ void
921b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovput_gpr_b6(UInt archreg, IRExpr *expr)
922b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
923b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   vassert(typeOfIRExpr(irsb->tyenv, expr) == Ity_I8);
924b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
925b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   stmt(IRStmt_Put(gpr_b6_offset(archreg), expr));
926b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
927b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
928b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Read byte #6 of a gpr register. */
929b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ IRExpr *
930b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovget_gpr_b6(UInt archreg)
931b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
932b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return IRExpr_Get(gpr_b6_offset(archreg), Ity_I8);
933b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
934b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
935b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Return the guest state offset of byte #3 of a gpr register. */
936b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ UInt
937b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovgpr_b3_offset(UInt archreg)
938b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
939b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return gpr_offset(archreg) + 3;
940b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
941b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
942b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Write byte #3 of a gpr to the guest state. */
943b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ void
944b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovput_gpr_b3(UInt archreg, IRExpr *expr)
945b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
946b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   vassert(typeOfIRExpr(irsb->tyenv, expr) == Ity_I8);
947b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
948b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   stmt(IRStmt_Put(gpr_b3_offset(archreg), expr));
949b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
950b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
951b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Read byte #3 of a gpr register. */
952b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ IRExpr *
953b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovget_gpr_b3(UInt archreg)
954b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
955b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return IRExpr_Get(gpr_b3_offset(archreg), Ity_I8);
956b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
957b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
958b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Return the guest state offset of byte #0 of a gpr register. */
959b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ UInt
960b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovgpr_b0_offset(UInt archreg)
961b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
962b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return gpr_offset(archreg) + 0;
963b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
964b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
965b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Write byte #0 of a gpr to the guest state. */
966b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ void
967b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovput_gpr_b0(UInt archreg, IRExpr *expr)
968b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
969b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   vassert(typeOfIRExpr(irsb->tyenv, expr) == Ity_I8);
970b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
971b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   stmt(IRStmt_Put(gpr_b0_offset(archreg), expr));
972b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
973b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
974b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Read byte #0 of a gpr register. */
975b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ IRExpr *
976b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovget_gpr_b0(UInt archreg)
977b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
978b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return IRExpr_Get(gpr_b0_offset(archreg), Ity_I8);
979b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
980b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
981b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Return the guest state offset of word #1 of a gpr register. */
982b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ UInt
983b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovgpr_w1_offset(UInt archreg)
984b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
985b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return gpr_offset(archreg) + 4;
986b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
987b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
988b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Write word #1 of a gpr to the guest state. */
989b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ void
990b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovput_gpr_w1(UInt archreg, IRExpr *expr)
991b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
992b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   vassert(typeOfIRExpr(irsb->tyenv, expr) == Ity_I32);
993b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
994b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   stmt(IRStmt_Put(gpr_w1_offset(archreg), expr));
995b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
996b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
997b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Read word #1 of a gpr register. */
998b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ IRExpr *
999b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovget_gpr_w1(UInt archreg)
1000b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1001b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return IRExpr_Get(gpr_w1_offset(archreg), Ity_I32);
1002b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1003b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1004b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Return the guest state offset of half word #3 of a gpr register. */
1005b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ UInt
1006b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovgpr_hw3_offset(UInt archreg)
1007b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1008b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return gpr_offset(archreg) + 6;
1009b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1010b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1011b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Write half word #3 of a gpr to the guest state. */
1012b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ void
1013b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovput_gpr_hw3(UInt archreg, IRExpr *expr)
1014b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1015b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   vassert(typeOfIRExpr(irsb->tyenv, expr) == Ity_I16);
1016b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1017b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   stmt(IRStmt_Put(gpr_hw3_offset(archreg), expr));
1018b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1019b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1020b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Read half word #3 of a gpr register. */
1021b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ IRExpr *
1022b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovget_gpr_hw3(UInt archreg)
1023b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1024b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return IRExpr_Get(gpr_hw3_offset(archreg), Ity_I16);
1025b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1026b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1027b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Return the guest state offset of byte #7 of a gpr register. */
1028b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ UInt
1029b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovgpr_b7_offset(UInt archreg)
1030b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1031b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return gpr_offset(archreg) + 7;
1032b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1033b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1034b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Write byte #7 of a gpr to the guest state. */
1035b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ void
1036b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovput_gpr_b7(UInt archreg, IRExpr *expr)
1037b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1038b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   vassert(typeOfIRExpr(irsb->tyenv, expr) == Ity_I8);
1039b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1040b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   stmt(IRStmt_Put(gpr_b7_offset(archreg), expr));
1041b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1042b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1043b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Read byte #7 of a gpr register. */
1044b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ IRExpr *
1045b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovget_gpr_b7(UInt archreg)
1046b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1047b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return IRExpr_Get(gpr_b7_offset(archreg), Ity_I8);
1048b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1049b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1050b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Return the guest state offset of half word #0 of a gpr register. */
1051b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ UInt
1052b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovgpr_hw0_offset(UInt archreg)
1053b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1054b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return gpr_offset(archreg) + 0;
1055b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1056b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1057b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Write half word #0 of a gpr to the guest state. */
1058b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ void
1059b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovput_gpr_hw0(UInt archreg, IRExpr *expr)
1060b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1061b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   vassert(typeOfIRExpr(irsb->tyenv, expr) == Ity_I16);
1062b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1063b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   stmt(IRStmt_Put(gpr_hw0_offset(archreg), expr));
1064b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1065b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1066b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Read half word #0 of a gpr register. */
1067b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ IRExpr *
1068b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovget_gpr_hw0(UInt archreg)
1069b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1070b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return IRExpr_Get(gpr_hw0_offset(archreg), Ity_I16);
1071b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1072b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1073b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Return the guest state offset of byte #4 of a gpr register. */
1074b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ UInt
1075b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovgpr_b4_offset(UInt archreg)
1076b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1077b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return gpr_offset(archreg) + 4;
1078b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1079b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1080b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Write byte #4 of a gpr to the guest state. */
1081b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ void
1082b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovput_gpr_b4(UInt archreg, IRExpr *expr)
1083b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1084b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   vassert(typeOfIRExpr(irsb->tyenv, expr) == Ity_I8);
1085b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1086b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   stmt(IRStmt_Put(gpr_b4_offset(archreg), expr));
1087b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1088b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1089b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Read byte #4 of a gpr register. */
1090b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ IRExpr *
1091b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovget_gpr_b4(UInt archreg)
1092b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1093b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return IRExpr_Get(gpr_b4_offset(archreg), Ity_I8);
1094b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1095b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1096b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Return the guest state offset of byte #1 of a gpr register. */
1097b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ UInt
1098b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovgpr_b1_offset(UInt archreg)
1099b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1100b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return gpr_offset(archreg) + 1;
1101b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1102b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1103b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Write byte #1 of a gpr to the guest state. */
1104b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ void
1105b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovput_gpr_b1(UInt archreg, IRExpr *expr)
1106b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1107b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   vassert(typeOfIRExpr(irsb->tyenv, expr) == Ity_I8);
1108b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1109b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   stmt(IRStmt_Put(gpr_b1_offset(archreg), expr));
1110b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1111b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1112b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Read byte #1 of a gpr register. */
1113b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ IRExpr *
1114b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovget_gpr_b1(UInt archreg)
1115b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1116b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return IRExpr_Get(gpr_b1_offset(archreg), Ity_I8);
1117b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1118b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1119b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Return the guest state offset of half word #2 of a gpr register. */
1120b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ UInt
1121b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovgpr_hw2_offset(UInt archreg)
1122b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1123b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return gpr_offset(archreg) + 4;
1124b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1125b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1126b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Write half word #2 of a gpr to the guest state. */
1127b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ void
1128b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovput_gpr_hw2(UInt archreg, IRExpr *expr)
1129b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1130b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   vassert(typeOfIRExpr(irsb->tyenv, expr) == Ity_I16);
1131b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1132b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   stmt(IRStmt_Put(gpr_hw2_offset(archreg), expr));
1133b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1134b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1135b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Read half word #2 of a gpr register. */
1136b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ IRExpr *
1137b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovget_gpr_hw2(UInt archreg)
1138b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1139b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return IRExpr_Get(gpr_hw2_offset(archreg), Ity_I16);
1140b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1141b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1142b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Return the guest state offset of byte #5 of a gpr register. */
1143b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ UInt
1144b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovgpr_b5_offset(UInt archreg)
1145b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1146b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return gpr_offset(archreg) + 5;
1147b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1148b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1149b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Write byte #5 of a gpr to the guest state. */
1150b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ void
1151b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovput_gpr_b5(UInt archreg, IRExpr *expr)
1152b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1153b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   vassert(typeOfIRExpr(irsb->tyenv, expr) == Ity_I8);
1154b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1155b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   stmt(IRStmt_Put(gpr_b5_offset(archreg), expr));
1156b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1157b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1158b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Read byte #5 of a gpr register. */
1159b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ IRExpr *
1160b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovget_gpr_b5(UInt archreg)
1161b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1162b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return IRExpr_Get(gpr_b5_offset(archreg), Ity_I8);
1163b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1164b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1165b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Return the guest state offset of byte #2 of a gpr register. */
1166b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ UInt
1167b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovgpr_b2_offset(UInt archreg)
1168b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1169b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return gpr_offset(archreg) + 2;
1170b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1171b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1172b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Write byte #2 of a gpr to the guest state. */
1173b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ void
1174b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovput_gpr_b2(UInt archreg, IRExpr *expr)
1175b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1176b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   vassert(typeOfIRExpr(irsb->tyenv, expr) == Ity_I8);
1177b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1178b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   stmt(IRStmt_Put(gpr_b2_offset(archreg), expr));
1179b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1180b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1181b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Read byte #2 of a gpr register. */
1182b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ IRExpr *
1183b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovget_gpr_b2(UInt archreg)
1184b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1185b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return IRExpr_Get(gpr_b2_offset(archreg), Ity_I8);
1186b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1187b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1188b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Return the guest state offset of the counter register. */
1189b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic UInt
1190b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovcounter_offset(void)
1191b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1192b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return S390X_GUEST_OFFSET(guest_counter);
1193b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1194b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1195b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Return the guest state offset of double word #0 of the counter register. */
1196b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ UInt
1197b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovcounter_dw0_offset(void)
1198b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1199b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return counter_offset() + 0;
1200b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1201b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1202b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Write double word #0 of the counter to the guest state. */
1203b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ void
1204b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovput_counter_dw0(IRExpr *expr)
1205b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1206b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   vassert(typeOfIRExpr(irsb->tyenv, expr) == Ity_I64);
1207b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1208b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   stmt(IRStmt_Put(counter_dw0_offset(), expr));
1209b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1210b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1211b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Read double word #0 of the counter register. */
1212b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ IRExpr *
1213b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovget_counter_dw0(void)
1214b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1215b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return IRExpr_Get(counter_dw0_offset(), Ity_I64);
1216b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1217b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1218b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Return the guest state offset of word #0 of the counter register. */
1219b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ UInt
1220b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovcounter_w0_offset(void)
1221b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1222b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return counter_offset() + 0;
1223b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1224b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1225b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Return the guest state offset of word #1 of the counter register. */
1226b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ UInt
1227b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovcounter_w1_offset(void)
1228b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1229b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return counter_offset() + 4;
1230b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1231b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1232b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Write word #0 of the counter to the guest state. */
1233b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ void
1234b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovput_counter_w0(IRExpr *expr)
1235b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1236b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   vassert(typeOfIRExpr(irsb->tyenv, expr) == Ity_I32);
1237b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1238b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   stmt(IRStmt_Put(counter_w0_offset(), expr));
1239b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1240b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1241b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Read word #0 of the counter register. */
1242b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ IRExpr *
1243b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovget_counter_w0(void)
1244b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1245b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return IRExpr_Get(counter_w0_offset(), Ity_I32);
1246b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1247b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1248b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Write word #1 of the counter to the guest state. */
1249b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ void
1250b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovput_counter_w1(IRExpr *expr)
1251b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1252b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   vassert(typeOfIRExpr(irsb->tyenv, expr) == Ity_I32);
1253b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1254b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   stmt(IRStmt_Put(counter_w1_offset(), expr));
1255b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1256b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1257b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Read word #1 of the counter register. */
1258b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ IRExpr *
1259b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovget_counter_w1(void)
1260b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1261b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return IRExpr_Get(counter_w1_offset(), Ity_I32);
1262b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1263b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1264b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Return the guest state offset of the fpc register. */
1265b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic UInt
1266b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovfpc_offset(void)
1267b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1268b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return S390X_GUEST_OFFSET(guest_fpc);
1269b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1270b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1271b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Return the guest state offset of word #0 of the fpc register. */
1272b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ UInt
1273b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovfpc_w0_offset(void)
1274b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1275b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return fpc_offset() + 0;
1276b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1277b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1278b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Write word #0 of the fpc to the guest state. */
1279b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ void
1280b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovput_fpc_w0(IRExpr *expr)
1281b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1282b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   vassert(typeOfIRExpr(irsb->tyenv, expr) == Ity_I32);
1283b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1284b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   stmt(IRStmt_Put(fpc_w0_offset(), expr));
1285b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1286b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1287b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Read word #0 of the fpc register. */
1288b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ IRExpr *
1289b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovget_fpc_w0(void)
1290b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1291b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return IRExpr_Get(fpc_w0_offset(), Ity_I32);
1292b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1293b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1294b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1295b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/*------------------------------------------------------------*/
1296b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/*--- Build IR for formats                                 ---*/
1297b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/*------------------------------------------------------------*/
1298b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
1299b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_format_I(HChar *(*irgen)(UChar i),
1300b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov              UChar i)
1301b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1302b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   HChar *mnm = irgen(i);
1303b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1304b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
1305b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC2(MNM, UINT), mnm, i);
1306b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1307b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1308b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
1309b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_format_RI(HChar *(*irgen)(UChar r1, UShort i2),
1310b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov               UChar r1, UShort i2)
1311b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1312b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   irgen(r1, i2);
1313b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1314b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1315b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
1316b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_format_RI_RU(HChar *(*irgen)(UChar r1, UShort i2),
1317b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                  UChar r1, UShort i2)
1318b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1319b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   HChar *mnm = irgen(r1, i2);
1320b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1321b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
1322b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC3(MNM, GPR, UINT), mnm, r1, i2);
1323b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1324b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1325b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
1326b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_format_RI_RI(HChar *(*irgen)(UChar r1, UShort i2),
1327b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                  UChar r1, UShort i2)
1328b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1329b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   HChar *mnm = irgen(r1, i2);
1330b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1331b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
1332b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC3(MNM, GPR, INT), mnm, r1, (Int)(Short)i2);
1333b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1334b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1335b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
1336b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_format_RI_RP(HChar *(*irgen)(UChar r1, UShort i2),
1337b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                  UChar r1, UShort i2)
1338b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1339b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   HChar *mnm = irgen(r1, i2);
1340b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1341b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
1342b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC3(MNM, GPR, PCREL), mnm, r1, (Int)(Short)i2);
1343b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1344b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1345b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
1346b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_format_RIE_RRP(HChar *(*irgen)(UChar r1, UChar r3, UShort i2),
1347b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    UChar r1, UChar r3, UShort i2)
1348b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1349b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   HChar *mnm = irgen(r1, r3, i2);
1350b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1351b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
1352b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC4(MNM, GPR, GPR, PCREL), mnm, r1, r3, (Int)(Short)i2);
1353b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1354b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1355b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
1356b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_format_RIE_RRI0(HChar *(*irgen)(UChar r1, UChar r3, UShort i2),
1357b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     UChar r1, UChar r3, UShort i2)
1358b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1359b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   HChar *mnm = irgen(r1, r3, i2);
1360b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1361b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
1362b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC4(MNM, GPR, GPR, INT), mnm, r1, r3, (Int)(Short)i2);
1363b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1364b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1365b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
1366b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_format_RIE_RRUUU(HChar *(*irgen)(UChar r1, UChar r2, UChar i3, UChar i4,
1367b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                      UChar i5),
1368b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                      UChar r1, UChar r2, UChar i3, UChar i4, UChar i5)
1369b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1370b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   HChar *mnm = irgen(r1, r2, i3, i4, i5);
1371b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1372b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
1373b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC6(MNM, GPR, GPR, UINT, UINT, UINT), mnm, r1, r2, i3, i4,
1374b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                  i5);
1375b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1376b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1377b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
1378b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_format_RIE_RRPU(HChar *(*irgen)(UChar r1, UChar r2, UShort i4, UChar m3),
1379b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     UChar r1, UChar r2, UShort i4, UChar m3)
1380b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1381b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   HChar *mnm = irgen(r1, r2, i4, m3);
1382b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1383b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
1384b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC5(XMNM, GPR, GPR, CABM, PCREL), S390_XMNM_CAB, mnm, m3, r1,
1385b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                  r2, m3, (Int)(Short)i4);
1386b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1387b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1388b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
1389b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_format_RIE_RUPU(HChar *(*irgen)(UChar r1, UChar m3, UShort i4, UChar i2),
1390b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     UChar r1, UChar m3, UShort i4, UChar i2)
1391b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1392b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   HChar *mnm = irgen(r1, m3, i4, i2);
1393b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1394b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
1395b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC5(XMNM, GPR, UINT, CABM, PCREL), S390_XMNM_CAB, mnm, m3,
1396b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                  r1, i2, m3, (Int)(Short)i4);
1397b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1398b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1399b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
1400b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_format_RIE_RUPI(HChar *(*irgen)(UChar r1, UChar m3, UShort i4, UChar i2),
1401b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     UChar r1, UChar m3, UShort i4, UChar i2)
1402b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1403b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   HChar *mnm = irgen(r1, m3, i4, i2);
1404b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1405b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
1406b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC5(XMNM, GPR, INT, CABM, PCREL), S390_XMNM_CAB, mnm, m3, r1,
1407b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                  (Int)(Char)i2, m3, (Int)(Short)i4);
1408b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1409b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1410b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
1411b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_format_RIL(HChar *(*irgen)(UChar r1, UInt i2),
1412b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                UChar r1, UInt i2)
1413b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1414b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   irgen(r1, i2);
1415b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1416b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1417b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
1418b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_format_RIL_RU(HChar *(*irgen)(UChar r1, UInt i2),
1419b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                   UChar r1, UInt i2)
1420b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1421b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   HChar *mnm = irgen(r1, i2);
1422b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1423b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
1424b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC3(MNM, GPR, UINT), mnm, r1, i2);
1425b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1426b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1427b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
1428b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_format_RIL_RI(HChar *(*irgen)(UChar r1, UInt i2),
1429b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                   UChar r1, UInt i2)
1430b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1431b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   HChar *mnm = irgen(r1, i2);
1432b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1433b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
1434b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC3(MNM, GPR, INT), mnm, r1, i2);
1435b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1436b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1437b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
1438b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_format_RIL_RP(HChar *(*irgen)(UChar r1, UInt i2),
1439b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                   UChar r1, UInt i2)
1440b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1441b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   HChar *mnm = irgen(r1, i2);
1442b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1443b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
1444b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC3(MNM, GPR, PCREL), mnm, r1, i2);
1445b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1446b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1447b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
1448b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_format_RIL_UP(HChar *(*irgen)(void),
1449b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                   UChar r1, UInt i2)
1450b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1451b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   HChar *mnm = irgen();
1452b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1453b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
1454b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC3(MNM, UINT, PCREL), mnm, r1, i2);
1455b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1456b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1457b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
1458b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_format_RIS_RURDI(HChar *(*irgen)(UChar r1, UChar m3, UChar i2,
1459b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                      IRTemp op4addr),
1460b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                      UChar r1, UChar m3, UChar b4, UShort d4, UChar i2)
1461b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1462b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   HChar *mnm;
1463b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op4addr = newTemp(Ity_I64);
1464b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1465b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op4addr, binop(Iop_Add64, mkU64(d4), b4 != 0 ? get_gpr_dw0(b4) :
1466b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkU64(0)));
1467b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1468b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   mnm = irgen(r1, m3, i2, op4addr);
1469b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1470b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
1471b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC5(XMNM, GPR, INT, CABM, UDXB), S390_XMNM_CAB, mnm, m3, r1,
1472b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                  (Int)(Char)i2, m3, d4, 0, b4);
1473b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1474b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1475b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
1476b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_format_RIS_RURDU(HChar *(*irgen)(UChar r1, UChar m3, UChar i2,
1477b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                      IRTemp op4addr),
1478b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                      UChar r1, UChar m3, UChar b4, UShort d4, UChar i2)
1479b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1480b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   HChar *mnm;
1481b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op4addr = newTemp(Ity_I64);
1482b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1483b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op4addr, binop(Iop_Add64, mkU64(d4), b4 != 0 ? get_gpr_dw0(b4) :
1484b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkU64(0)));
1485b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1486b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   mnm = irgen(r1, m3, i2, op4addr);
1487b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1488b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
1489b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC5(XMNM, GPR, UINT, CABM, UDXB), S390_XMNM_CAB, mnm, m3, r1,
1490b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                  i2, m3, d4, 0, b4);
1491b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1492b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1493b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
1494b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_format_RR(HChar *(*irgen)(UChar r1, UChar r2),
1495b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov               UChar r1, UChar r2)
1496b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1497b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   irgen(r1, r2);
1498b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1499b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1500b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
1501b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_format_RR_RR(HChar *(*irgen)(UChar r1, UChar r2),
1502b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                  UChar r1, UChar r2)
1503b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1504b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   HChar *mnm = irgen(r1, r2);
1505b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1506b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
1507b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC3(MNM, GPR, GPR), mnm, r1, r2);
1508b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1509b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1510b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
1511b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_format_RR_FF(HChar *(*irgen)(UChar r1, UChar r2),
1512b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                  UChar r1, UChar r2)
1513b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1514b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   HChar *mnm = irgen(r1, r2);
1515b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1516b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
1517b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC3(MNM, FPR, FPR), mnm, r1, r2);
1518b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1519b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1520b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
1521b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_format_RRE(HChar *(*irgen)(UChar r1, UChar r2),
1522b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                UChar r1, UChar r2)
1523b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1524b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   irgen(r1, r2);
1525b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1526b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1527b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
1528b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_format_RRE_RR(HChar *(*irgen)(UChar r1, UChar r2),
1529b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                   UChar r1, UChar r2)
1530b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1531b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   HChar *mnm = irgen(r1, r2);
1532b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1533b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
1534b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC3(MNM, GPR, GPR), mnm, r1, r2);
1535b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1536b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1537b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
1538b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_format_RRE_FF(HChar *(*irgen)(UChar r1, UChar r2),
1539b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                   UChar r1, UChar r2)
1540b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1541b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   HChar *mnm = irgen(r1, r2);
1542b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1543b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
1544b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC3(MNM, FPR, FPR), mnm, r1, r2);
1545b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1546b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1547b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
1548b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_format_RRE_RF(HChar *(*irgen)(UChar, UChar),
1549b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                   UChar r1, UChar r2)
1550b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1551b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   HChar *mnm = irgen(r1, r2);
1552b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1553b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
1554b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC3(MNM, GPR, FPR), mnm, r1, r2);
1555b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1556b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1557b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
1558b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_format_RRE_FR(HChar *(*irgen)(UChar r1, UChar r2),
1559b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                   UChar r1, UChar r2)
1560b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1561b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   HChar *mnm = irgen(r1, r2);
1562b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1563b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
1564b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC3(MNM, FPR, GPR), mnm, r1, r2);
1565b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1566b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1567b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
1568b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_format_RRE_R0(HChar *(*irgen)(UChar r1),
1569b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                   UChar r1)
1570b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1571b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   HChar *mnm = irgen(r1);
1572b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1573b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
1574b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC2(MNM, GPR), mnm, r1);
1575b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1576b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1577b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
1578b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_format_RRE_F0(HChar *(*irgen)(UChar r1),
1579b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                   UChar r1)
1580b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1581b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   HChar *mnm = irgen(r1);
1582b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1583b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
1584b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC2(MNM, FPR), mnm, r1);
1585b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1586b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1587b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
1588b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_format_RRF_F0FF(HChar *(*irgen)(UChar, UChar, UChar),
1589b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     UChar r1, UChar r3, UChar r2)
1590b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1591b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   HChar *mnm = irgen(r1, r3, r2);
1592b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1593b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
1594b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC4(MNM, FPR, FPR, FPR), mnm, r1, r3, r2);
1595b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1596b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1597b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
1598b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_format_RRF_U0RR(HChar *(*irgen)(UChar m3, UChar r1, UChar r2),
1599b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     UChar m3, UChar r1, UChar r2, Int xmnm_kind)
1600b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1601b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   irgen(m3, r1, r2);
1602b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1603b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
1604b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC3(XMNM, GPR, GPR), xmnm_kind, m3, r1, r2);
1605b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1606b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1607b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
1608b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_format_RRF_U0RF(HChar *(*irgen)(UChar r3, UChar r1, UChar r2),
1609b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     UChar r3, UChar r1, UChar r2)
1610b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1611b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   HChar *mnm = irgen(r3, r1, r2);
1612b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1613b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
1614b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC4(MNM, GPR, UINT, FPR), mnm, r1, r3, r2);
1615b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1616b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1617b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
1618b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_format_RRF_F0FF2(HChar *(*irgen)(UChar, UChar, UChar),
1619b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                      UChar r3, UChar r1, UChar r2)
1620b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1621b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   HChar *mnm = irgen(r3, r1, r2);
1622b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1623b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
1624b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC4(MNM, FPR, FPR, FPR), mnm, r1, r3, r2);
1625b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1626b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1627b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
1628b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_format_RRF_R0RR2(HChar *(*irgen)(UChar r3, UChar r1, UChar r2),
1629b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                      UChar r3, UChar r1, UChar r2)
1630b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1631b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   HChar *mnm = irgen(r3, r1, r2);
1632b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1633b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
1634b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC4(MNM, GPR, GPR, GPR), mnm, r1, r2, r3);
1635b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1636b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1637b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
1638b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_format_RRS(HChar *(*irgen)(UChar r1, UChar r2, UChar m3, IRTemp op4addr),
1639b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                UChar r1, UChar r2, UChar b4, UShort d4, UChar m3)
1640b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1641b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   HChar *mnm;
1642b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op4addr = newTemp(Ity_I64);
1643b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1644b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op4addr, binop(Iop_Add64, mkU64(d4), b4 != 0 ? get_gpr_dw0(b4) :
1645b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkU64(0)));
1646b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1647b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   mnm = irgen(r1, r2, m3, op4addr);
1648b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1649b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
1650b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC5(XMNM, GPR, GPR, CABM, UDXB), S390_XMNM_CAB, mnm, m3, r1,
1651b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                  r2, m3, d4, 0, b4);
1652b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1653b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1654b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
1655b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_format_RS_R0RD(HChar *(*irgen)(UChar r1, IRTemp op2addr),
1656b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    UChar r1, UChar b2, UShort d2)
1657b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1658b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   HChar *mnm;
1659b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2addr = newTemp(Ity_I64);
1660b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1661b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2addr, binop(Iop_Add64, mkU64(d2), b2 != 0 ? get_gpr_dw0(b2) :
1662b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkU64(0)));
1663b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1664b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   mnm = irgen(r1, op2addr);
1665b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1666b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
1667b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC3(MNM, GPR, UDXB), mnm, r1, d2, 0, b2);
1668b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1669b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1670b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
1671b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_format_RS_RRRD(HChar *(*irgen)(UChar r1, UChar r3, IRTemp op2addr),
1672b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    UChar r1, UChar r3, UChar b2, UShort d2)
1673b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1674b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   HChar *mnm;
1675b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2addr = newTemp(Ity_I64);
1676b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1677b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2addr, binop(Iop_Add64, mkU64(d2), b2 != 0 ? get_gpr_dw0(b2) :
1678b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkU64(0)));
1679b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1680b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   mnm = irgen(r1, r3, op2addr);
1681b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1682b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
1683b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC4(MNM, GPR, GPR, UDXB), mnm, r1, r3, d2, 0, b2);
1684b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1685b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1686b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
1687b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_format_RS_RURD(HChar *(*irgen)(UChar r1, UChar r3, IRTemp op2addr),
1688b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    UChar r1, UChar r3, UChar b2, UShort d2)
1689b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1690b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   HChar *mnm;
1691b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2addr = newTemp(Ity_I64);
1692b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1693b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2addr, binop(Iop_Add64, mkU64(d2), b2 != 0 ? get_gpr_dw0(b2) :
1694b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkU64(0)));
1695b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1696b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   mnm = irgen(r1, r3, op2addr);
1697b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1698b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
1699b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC4(MNM, GPR, UINT, UDXB), mnm, r1, r3, d2, 0, b2);
1700b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1701b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1702b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
1703b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_format_RS_AARD(HChar *(*irgen)(UChar, UChar, IRTemp),
1704b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    UChar r1, UChar r3, UChar b2, UShort d2)
1705b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1706b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   HChar *mnm;
1707b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2addr = newTemp(Ity_I64);
1708b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1709b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2addr, binop(Iop_Add64, mkU64(d2), b2 != 0 ? get_gpr_dw0(b2) :
1710b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkU64(0)));
1711b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1712b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   mnm = irgen(r1, r3, op2addr);
1713b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1714b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
1715b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC4(MNM, AR, AR, UDXB), mnm, r1, r3, d2, 0, b2);
1716b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1717b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1718b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
1719b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_format_RSI_RRP(HChar *(*irgen)(UChar r1, UChar r3, UShort i2),
1720b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    UChar r1, UChar r3, UShort i2)
1721b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1722b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   HChar *mnm = irgen(r1, r3, i2);
1723b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1724b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
1725b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC4(MNM, GPR, GPR, PCREL), mnm, r1, r3, (Int)(Short)i2);
1726b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1727b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1728b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
1729b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_format_RSY_RRRD(HChar *(*irgen)(UChar r1, UChar r3, IRTemp op2addr),
1730b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     UChar r1, UChar r3, UChar b2, UShort dl2, UChar dh2)
1731b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1732b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   HChar *mnm;
1733b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2addr = newTemp(Ity_I64);
1734b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp d2 = newTemp(Ity_I64);
1735b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1736b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(d2, mkU64(((ULong)(Long)(Char)dh2 << 12) | ((ULong)dl2)));
1737b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2addr, binop(Iop_Add64, mkexpr(d2), b2 != 0 ? get_gpr_dw0(b2) :
1738b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkU64(0)));
1739b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1740b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   mnm = irgen(r1, r3, op2addr);
1741b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1742b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
1743b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC4(MNM, GPR, GPR, SDXB), mnm, r1, r3, dh2, dl2, 0, b2);
1744b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1745b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1746b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
1747b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_format_RSY_AARD(HChar *(*irgen)(UChar, UChar, IRTemp),
1748b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     UChar r1, UChar r3, UChar b2, UShort dl2, UChar dh2)
1749b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1750b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   HChar *mnm;
1751b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2addr = newTemp(Ity_I64);
1752b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp d2 = newTemp(Ity_I64);
1753b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1754b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(d2, mkU64(((ULong)(Long)(Char)dh2 << 12) | ((ULong)dl2)));
1755b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2addr, binop(Iop_Add64, mkexpr(d2), b2 != 0 ? get_gpr_dw0(b2) :
1756b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkU64(0)));
1757b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1758b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   mnm = irgen(r1, r3, op2addr);
1759b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1760b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
1761b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC4(MNM, AR, AR, SDXB), mnm, r1, r3, dh2, dl2, 0, b2);
1762b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1763b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1764b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
1765b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_format_RSY_RURD(HChar *(*irgen)(UChar r1, UChar r3, IRTemp op2addr),
1766b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     UChar r1, UChar r3, UChar b2, UShort dl2, UChar dh2)
1767b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1768b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   HChar *mnm;
1769b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2addr = newTemp(Ity_I64);
1770b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp d2 = newTemp(Ity_I64);
1771b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1772b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(d2, mkU64(((ULong)(Long)(Char)dh2 << 12) | ((ULong)dl2)));
1773b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2addr, binop(Iop_Add64, mkexpr(d2), b2 != 0 ? get_gpr_dw0(b2) :
1774b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkU64(0)));
1775b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1776b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   mnm = irgen(r1, r3, op2addr);
1777b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1778b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
1779b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC4(MNM, GPR, UINT, SDXB), mnm, r1, r3, dh2, dl2, 0, b2);
1780b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1781b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1782b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
1783b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_format_RSY_RDRM(HChar *(*irgen)(UChar r1, IRTemp op2addr),
1784b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     UChar r1, UChar m3, UChar b2, UShort dl2, UChar dh2,
1785b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     Int xmnm_kind)
1786b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1787b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2addr = newTemp(Ity_I64);
1788b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp d2 = newTemp(Ity_I64);
1789b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1790b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if_condition_goto(binop(Iop_CmpEQ32, s390_call_calculate_cond(m3), mkU32(0)),
1791b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     guest_IA_next_instr);
1792b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(d2, mkU64(((ULong)(Long)(Char)dh2 << 12) | ((ULong)dl2)));
1793b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2addr, binop(Iop_Add64, mkexpr(d2), b2 != 0 ? get_gpr_dw0(b2) :
1794b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkU64(0)));
1795b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1796b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   irgen(r1, op2addr);
1797b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1798b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
1799b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC3(XMNM, GPR, SDXB), xmnm_kind, m3, r1, dh2, dl2, 0, b2);
1800b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1801b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1802b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
1803b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_format_RX(HChar *(*irgen)(UChar r1, UChar x2, UChar b2, UShort d2,
1804b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov               IRTemp op2addr),
1805b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov               UChar r1, UChar x2, UChar b2, UShort d2)
1806b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1807b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2addr = newTemp(Ity_I64);
1808b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1809b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2addr, binop(Iop_Add64, binop(Iop_Add64, mkU64(d2),
1810b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          b2 != 0 ? get_gpr_dw0(b2) : mkU64(0)), x2 != 0 ? get_gpr_dw0(x2) :
1811b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkU64(0)));
1812b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1813b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   irgen(r1, x2, b2, d2, op2addr);
1814b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1815b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1816b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
1817b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_format_RX_RRRD(HChar *(*irgen)(UChar r1, IRTemp op2addr),
1818b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    UChar r1, UChar x2, UChar b2, UShort d2)
1819b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1820b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   HChar *mnm;
1821b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2addr = newTemp(Ity_I64);
1822b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1823b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2addr, binop(Iop_Add64, binop(Iop_Add64, mkU64(d2),
1824b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          b2 != 0 ? get_gpr_dw0(b2) : mkU64(0)), x2 != 0 ? get_gpr_dw0(x2) :
1825b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkU64(0)));
1826b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1827b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   mnm = irgen(r1, op2addr);
1828b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1829b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
1830b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC3(MNM, GPR, UDXB), mnm, r1, d2, x2, b2);
1831b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1832b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1833b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
1834b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_format_RX_FRRD(HChar *(*irgen)(UChar r1, IRTemp op2addr),
1835b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    UChar r1, UChar x2, UChar b2, UShort d2)
1836b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1837b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   HChar *mnm;
1838b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2addr = newTemp(Ity_I64);
1839b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1840b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2addr, binop(Iop_Add64, binop(Iop_Add64, mkU64(d2),
1841b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          b2 != 0 ? get_gpr_dw0(b2) : mkU64(0)), x2 != 0 ? get_gpr_dw0(x2) :
1842b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkU64(0)));
1843b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1844b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   mnm = irgen(r1, op2addr);
1845b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1846b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
1847b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC3(MNM, FPR, UDXB), mnm, r1, d2, x2, b2);
1848b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1849b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1850b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
1851b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_format_RXE_FRRD(HChar *(*irgen)(UChar r1, IRTemp op2addr),
1852b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     UChar r1, UChar x2, UChar b2, UShort d2)
1853b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1854b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   HChar *mnm;
1855b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2addr = newTemp(Ity_I64);
1856b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1857b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2addr, binop(Iop_Add64, binop(Iop_Add64, mkU64(d2),
1858b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          b2 != 0 ? get_gpr_dw0(b2) : mkU64(0)), x2 != 0 ? get_gpr_dw0(x2) :
1859b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkU64(0)));
1860b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1861b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   mnm = irgen(r1, op2addr);
1862b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1863b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
1864b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC3(MNM, FPR, UDXB), mnm, r1, d2, x2, b2);
1865b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1866b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1867b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
1868b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_format_RXF_FRRDF(HChar *(*irgen)(UChar, IRTemp, UChar),
1869b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                      UChar r3, UChar x2, UChar b2, UShort d2, UChar r1)
1870b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1871b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   HChar *mnm;
1872b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2addr = newTemp(Ity_I64);
1873b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1874b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2addr, binop(Iop_Add64, binop(Iop_Add64, mkU64(d2),
1875b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          b2 != 0 ? get_gpr_dw0(b2) : mkU64(0)), x2 != 0 ? get_gpr_dw0(x2) :
1876b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkU64(0)));
1877b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1878b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   mnm = irgen(r3, op2addr, r1);
1879b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1880b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
1881b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC4(MNM, FPR, FPR, UDXB), mnm, r1, r3, d2, x2, b2);
1882b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1883b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1884b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
1885b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_format_RXY_RRRD(HChar *(*irgen)(UChar r1, IRTemp op2addr),
1886b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2)
1887b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1888b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   HChar *mnm;
1889b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2addr = newTemp(Ity_I64);
1890b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp d2 = newTemp(Ity_I64);
1891b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1892b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(d2, mkU64(((ULong)(Long)(Char)dh2 << 12) | ((ULong)dl2)));
1893b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2addr, binop(Iop_Add64, binop(Iop_Add64, mkexpr(d2),
1894b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          b2 != 0 ? get_gpr_dw0(b2) : mkU64(0)), x2 != 0 ? get_gpr_dw0(x2) :
1895b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkU64(0)));
1896b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1897b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   mnm = irgen(r1, op2addr);
1898b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1899b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
1900b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC3(MNM, GPR, SDXB), mnm, r1, dh2, dl2, x2, b2);
1901b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1902b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1903b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
1904b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_format_RXY_FRRD(HChar *(*irgen)(UChar r1, IRTemp op2addr),
1905b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2)
1906b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1907b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   HChar *mnm;
1908b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2addr = newTemp(Ity_I64);
1909b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp d2 = newTemp(Ity_I64);
1910b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1911b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(d2, mkU64(((ULong)(Long)(Char)dh2 << 12) | ((ULong)dl2)));
1912b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2addr, binop(Iop_Add64, binop(Iop_Add64, mkexpr(d2),
1913b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          b2 != 0 ? get_gpr_dw0(b2) : mkU64(0)), x2 != 0 ? get_gpr_dw0(x2) :
1914b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkU64(0)));
1915b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1916b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   mnm = irgen(r1, op2addr);
1917b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1918b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
1919b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC3(MNM, FPR, SDXB), mnm, r1, dh2, dl2, x2, b2);
1920b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1921b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1922b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
1923b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_format_RXY_URRD(HChar *(*irgen)(void),
1924b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2)
1925b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1926b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   HChar *mnm;
1927b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2addr = newTemp(Ity_I64);
1928b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp d2 = newTemp(Ity_I64);
1929b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1930b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(d2, mkU64(((ULong)(Long)(Char)dh2 << 12) | ((ULong)dl2)));
1931b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2addr, binop(Iop_Add64, binop(Iop_Add64, mkexpr(d2),
1932b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          b2 != 0 ? get_gpr_dw0(b2) : mkU64(0)), x2 != 0 ? get_gpr_dw0(x2) :
1933b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkU64(0)));
1934b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1935b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   mnm = irgen();
1936b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1937b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
1938b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC3(MNM, UINT, SDXB), mnm, r1, dh2, dl2, x2, b2);
1939b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1940b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1941b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
1942b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_format_S_RD(HChar *(*irgen)(IRTemp op2addr),
1943b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                 UChar b2, UShort d2)
1944b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1945b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   HChar *mnm;
1946b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2addr = newTemp(Ity_I64);
1947b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1948b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2addr, binop(Iop_Add64, mkU64(d2), b2 != 0 ? get_gpr_dw0(b2) :
1949b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkU64(0)));
1950b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1951b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   mnm = irgen(op2addr);
1952b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1953b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
1954b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC2(MNM, UDXB), mnm, d2, 0, b2);
1955b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1956b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1957b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
1958b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_format_SI_URD(HChar *(*irgen)(UChar i2, IRTemp op1addr),
1959b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                   UChar i2, UChar b1, UShort d1)
1960b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1961b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   HChar *mnm;
1962b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1addr = newTemp(Ity_I64);
1963b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1964b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1addr, binop(Iop_Add64, mkU64(d1), b1 != 0 ? get_gpr_dw0(b1) :
1965b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkU64(0)));
1966b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1967b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   mnm = irgen(i2, op1addr);
1968b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1969b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
1970b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC3(MNM, UDXB, UINT), mnm, d1, 0, b1, i2);
1971b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1972b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1973b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
1974b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_format_SIY_URD(HChar *(*irgen)(UChar i2, IRTemp op1addr),
1975b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    UChar i2, UChar b1, UShort dl1, UChar dh1)
1976b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1977b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   HChar *mnm;
1978b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1addr = newTemp(Ity_I64);
1979b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp d1 = newTemp(Ity_I64);
1980b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1981b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(d1, mkU64(((ULong)(Long)(Char)dh1 << 12) | ((ULong)dl1)));
1982b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1addr, binop(Iop_Add64, mkexpr(d1), b1 != 0 ? get_gpr_dw0(b1) :
1983b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkU64(0)));
1984b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1985b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   mnm = irgen(i2, op1addr);
1986b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1987b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
1988b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC3(MNM, SDXB, UINT), mnm, dh1, dl1, 0, b1, i2);
1989b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
1990b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1991b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
1992b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_format_SIY_IRD(HChar *(*irgen)(UChar i2, IRTemp op1addr),
1993b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    UChar i2, UChar b1, UShort dl1, UChar dh1)
1994b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
1995b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   HChar *mnm;
1996b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1addr = newTemp(Ity_I64);
1997b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp d1 = newTemp(Ity_I64);
1998b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
1999b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(d1, mkU64(((ULong)(Long)(Char)dh1 << 12) | ((ULong)dl1)));
2000b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1addr, binop(Iop_Add64, mkexpr(d1), b1 != 0 ? get_gpr_dw0(b1) :
2001b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkU64(0)));
2002b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2003b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   mnm = irgen(i2, op1addr);
2004b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2005b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
2006b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC3(MNM, SDXB, INT), mnm, dh1, dl1, 0, b1, (Int)(Char)i2);
2007b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2008b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2009b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
2010b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_format_SS_L0RDRD(HChar *(*irgen)(UChar, IRTemp, IRTemp),
2011b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                      UChar l, UChar b1, UShort d1, UChar b2, UShort d2)
2012b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2013b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   HChar *mnm;
2014b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1addr = newTemp(Ity_I64);
2015b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2addr = newTemp(Ity_I64);
2016b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2017b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1addr, binop(Iop_Add64, mkU64(d1), b1 != 0 ? get_gpr_dw0(b1) :
2018b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkU64(0)));
2019b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2addr, binop(Iop_Add64, mkU64(d2), b2 != 0 ? get_gpr_dw0(b2) :
2020b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkU64(0)));
2021b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2022b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   mnm = irgen(l, op1addr, op2addr);
2023b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2024b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
2025b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC3(MNM, UDLB, UDXB), mnm, d1, l, b1, d2, 0, b2);
2026b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2027b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2028b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
2029b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_format_SIL_RDI(HChar *(*irgen)(UShort i2, IRTemp op1addr),
2030b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    UChar b1, UShort d1, UShort i2)
2031b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2032b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   HChar *mnm;
2033b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1addr = newTemp(Ity_I64);
2034b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2035b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1addr, binop(Iop_Add64, mkU64(d1), b1 != 0 ? get_gpr_dw0(b1) :
2036b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkU64(0)));
2037b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2038b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   mnm = irgen(i2, op1addr);
2039b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2040b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
2041b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC3(MNM, UDXB, INT), mnm, d1, 0, b1, (Int)(Short)i2);
2042b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2043b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2044b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
2045b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_format_SIL_RDU(HChar *(*irgen)(UShort i2, IRTemp op1addr),
2046b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    UChar b1, UShort d1, UShort i2)
2047b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2048b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   HChar *mnm;
2049b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1addr = newTemp(Ity_I64);
2050b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2051b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1addr, binop(Iop_Add64, mkU64(d1), b1 != 0 ? get_gpr_dw0(b1) :
2052b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkU64(0)));
2053b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2054b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   mnm = irgen(i2, op1addr);
2055b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2056b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
2057b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC3(MNM, UDXB, UINT), mnm, d1, 0, b1, i2);
2058b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2059b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2060b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2061b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2062b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/*------------------------------------------------------------*/
2063b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/*--- Build IR for opcodes                                 ---*/
2064b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/*------------------------------------------------------------*/
2065b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2066b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
2067b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_00(UChar r1 __attribute__((unused)),
2068b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov              UChar r2 __attribute__((unused)))
2069b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2070b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRDirty *d;
2071b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2072b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   d = unsafeIRDirty_0_N (0, "s390x_dirtyhelper_00", &s390x_dirtyhelper_00,
2073b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                          mkIRExprVec_0());
2074b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   d->needsBBP = 1;  /* Need to pass pointer to guest state to helper */
2075b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2076b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   d->fxState[0].fx     = Ifx_Modify;  /* read then write */
2077b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   d->fxState[0].offset = S390X_GUEST_OFFSET(guest_IA);
2078b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   d->fxState[0].size   = sizeof(ULong);
2079b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   d->nFxState = 1;
2080b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2081b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   stmt(IRStmt_Dirty(d));
2082b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2083b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "00";
2084b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2085b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2086b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
2087b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_AR(UChar r1, UChar r2)
2088b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2089b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
2090b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
2091b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
2092b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2093b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1));
2094b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_w1(r2));
2095b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Add32, mkexpr(op1), mkexpr(op2)));
2096b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_ADD_32, op1, op2);
2097b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(result));
2098b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2099b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "ar";
2100b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2101b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2102b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
2103b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_AGR(UChar r1, UChar r2)
2104b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2105b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
2106b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
2107b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
2108b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2109b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_dw0(r1));
2110b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_dw0(r2));
2111b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Add64, mkexpr(op1), mkexpr(op2)));
2112b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_ADD_64, op1, op2);
2113b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(result));
2114b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2115b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "agr";
2116b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2117b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2118b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
2119b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_AGFR(UChar r1, UChar r2)
2120b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2121b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
2122b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
2123b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
2124b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2125b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_dw0(r1));
2126b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, unop(Iop_32Sto64, get_gpr_w1(r2)));
2127b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Add64, mkexpr(op1), mkexpr(op2)));
2128b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_ADD_64, op1, op2);
2129b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(result));
2130b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2131b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "agfr";
2132b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2133b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2134b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
2135b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_ARK(UChar r3, UChar r1, UChar r2)
2136b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2137b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
2138b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op3 = newTemp(Ity_I32);
2139b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
2140b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2141b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_w1(r2));
2142b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op3, get_gpr_w1(r3));
2143b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Add32, mkexpr(op2), mkexpr(op3)));
2144b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_ADD_32, op2, op3);
2145b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(result));
2146b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2147b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "ark";
2148b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2149b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2150b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
2151b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_AGRK(UChar r3, UChar r1, UChar r2)
2152b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2153b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
2154b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op3 = newTemp(Ity_I64);
2155b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
2156b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2157b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_dw0(r2));
2158b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op3, get_gpr_dw0(r3));
2159b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Add64, mkexpr(op2), mkexpr(op3)));
2160b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_ADD_64, op2, op3);
2161b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(result));
2162b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2163b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "agrk";
2164b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2165b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2166b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
2167b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_A(UChar r1, IRTemp op2addr)
2168b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2169b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
2170b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
2171b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
2172b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2173b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1));
2174b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I32, mkexpr(op2addr)));
2175b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Add32, mkexpr(op1), mkexpr(op2)));
2176b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_ADD_32, op1, op2);
2177b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(result));
2178b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2179b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "a";
2180b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2181b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2182b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
2183b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_AY(UChar r1, IRTemp op2addr)
2184b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2185b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
2186b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
2187b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
2188b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2189b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1));
2190b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I32, mkexpr(op2addr)));
2191b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Add32, mkexpr(op1), mkexpr(op2)));
2192b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_ADD_32, op1, op2);
2193b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(result));
2194b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2195b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "ay";
2196b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2197b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2198b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
2199b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_AG(UChar r1, IRTemp op2addr)
2200b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2201b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
2202b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
2203b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
2204b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2205b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_dw0(r1));
2206b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I64, mkexpr(op2addr)));
2207b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Add64, mkexpr(op1), mkexpr(op2)));
2208b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_ADD_64, op1, op2);
2209b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(result));
2210b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2211b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "ag";
2212b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2213b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2214b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
2215b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_AGF(UChar r1, IRTemp op2addr)
2216b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2217b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
2218b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
2219b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
2220b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2221b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_dw0(r1));
2222b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, unop(Iop_32Sto64, load(Ity_I32, mkexpr(op2addr))));
2223b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Add64, mkexpr(op1), mkexpr(op2)));
2224b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_ADD_64, op1, op2);
2225b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(result));
2226b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2227b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "agf";
2228b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2229b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2230b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
2231b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_AFI(UChar r1, UInt i2)
2232b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2233b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
2234b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   Int op2;
2235b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
2236b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2237b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1));
2238b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op2 = (Int)i2;
2239b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Add32, mkexpr(op1), mkU32((UInt)op2)));
2240b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_ADD_32, op1, mktemp(Ity_I32,
2241b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                       mkU32((UInt)op2)));
2242b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(result));
2243b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2244b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "afi";
2245b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2246b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2247b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
2248b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_AGFI(UChar r1, UInt i2)
2249b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2250b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
2251b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   Long op2;
2252b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
2253b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2254b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_dw0(r1));
2255b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op2 = (Long)(Int)i2;
2256b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Add64, mkexpr(op1), mkU64((ULong)op2)));
2257b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_ADD_64, op1, mktemp(Ity_I64,
2258b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                       mkU64((ULong)op2)));
2259b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(result));
2260b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2261b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "agfi";
2262b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2263b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2264b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
2265b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_AHIK(UChar r1, UChar r3, UShort i2)
2266b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2267b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   Int op2;
2268b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op3 = newTemp(Ity_I32);
2269b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
2270b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2271b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op2 = (Int)(Short)i2;
2272b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op3, get_gpr_w1(r3));
2273b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Add32, mkU32((UInt)op2), mkexpr(op3)));
2274b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_ADD_32, mktemp(Ity_I32, mkU32((UInt)
2275b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                       op2)), op3);
2276b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(result));
2277b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2278b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "ahik";
2279b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2280b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2281b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
2282b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_AGHIK(UChar r1, UChar r3, UShort i2)
2283b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2284b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   Long op2;
2285b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op3 = newTemp(Ity_I64);
2286b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
2287b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2288b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op2 = (Long)(Short)i2;
2289b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op3, get_gpr_dw0(r3));
2290b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Add64, mkU64((ULong)op2), mkexpr(op3)));
2291b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_ADD_64, mktemp(Ity_I64, mkU64((ULong)
2292b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                       op2)), op3);
2293b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(result));
2294b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2295b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "aghik";
2296b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2297b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2298b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
2299b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_ASI(UChar i2, IRTemp op1addr)
2300b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2301b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
2302b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   Int op2;
2303b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
2304b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2305b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, load(Ity_I32, mkexpr(op1addr)));
2306b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op2 = (Int)(Char)i2;
2307b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Add32, mkexpr(op1), mkU32((UInt)op2)));
2308b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(mkexpr(op1addr), mkexpr(result));
2309b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_ADD_32, op1, mktemp(Ity_I32,
2310b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                       mkU32((UInt)op2)));
2311b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2312b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "asi";
2313b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2314b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2315b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
2316b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_AGSI(UChar i2, IRTemp op1addr)
2317b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2318b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
2319b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   Long op2;
2320b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
2321b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2322b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, load(Ity_I64, mkexpr(op1addr)));
2323b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op2 = (Long)(Char)i2;
2324b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Add64, mkexpr(op1), mkU64((ULong)op2)));
2325b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(mkexpr(op1addr), mkexpr(result));
2326b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_ADD_64, op1, mktemp(Ity_I64,
2327b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                       mkU64((ULong)op2)));
2328b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2329b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "agsi";
2330b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2331b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2332b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
2333b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_AH(UChar r1, IRTemp op2addr)
2334b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2335b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
2336b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
2337b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
2338b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2339b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1));
2340b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, unop(Iop_16Sto32, load(Ity_I16, mkexpr(op2addr))));
2341b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Add32, mkexpr(op1), mkexpr(op2)));
2342b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_ADD_32, op1, op2);
2343b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(result));
2344b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2345b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "ah";
2346b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2347b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2348b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
2349b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_AHY(UChar r1, IRTemp op2addr)
2350b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2351b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
2352b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
2353b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
2354b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2355b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1));
2356b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, unop(Iop_16Sto32, load(Ity_I16, mkexpr(op2addr))));
2357b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Add32, mkexpr(op1), mkexpr(op2)));
2358b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_ADD_32, op1, op2);
2359b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(result));
2360b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2361b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "ahy";
2362b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2363b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2364b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
2365b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_AHI(UChar r1, UShort i2)
2366b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2367b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
2368b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   Int op2;
2369b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
2370b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2371b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1));
2372b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op2 = (Int)(Short)i2;
2373b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Add32, mkexpr(op1), mkU32((UInt)op2)));
2374b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_ADD_32, op1, mktemp(Ity_I32,
2375b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                       mkU32((UInt)op2)));
2376b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(result));
2377b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2378b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "ahi";
2379b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2380b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2381b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
2382b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_AGHI(UChar r1, UShort i2)
2383b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2384b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
2385b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   Long op2;
2386b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
2387b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2388b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_dw0(r1));
2389b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op2 = (Long)(Short)i2;
2390b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Add64, mkexpr(op1), mkU64((ULong)op2)));
2391b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_ADD_64, op1, mktemp(Ity_I64,
2392b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                       mkU64((ULong)op2)));
2393b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(result));
2394b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2395b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "aghi";
2396b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2397b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2398b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
2399b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_AHHHR(UChar r3, UChar r1, UChar r2)
2400b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2401b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
2402b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op3 = newTemp(Ity_I32);
2403b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
2404b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2405b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_w0(r2));
2406b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op3, get_gpr_w0(r3));
2407b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Add32, mkexpr(op2), mkexpr(op3)));
2408b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_ADD_32, op2, op3);
2409b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w0(r1, mkexpr(result));
2410b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2411b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "ahhhr";
2412b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2413b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2414b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
2415b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_AHHLR(UChar r3, UChar r1, UChar r2)
2416b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2417b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
2418b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op3 = newTemp(Ity_I32);
2419b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
2420b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2421b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_w0(r2));
2422b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op3, get_gpr_w1(r3));
2423b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Add32, mkexpr(op2), mkexpr(op3)));
2424b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_ADD_32, op2, op3);
2425b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w0(r1, mkexpr(result));
2426b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2427b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "ahhlr";
2428b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2429b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2430b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
2431b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_AIH(UChar r1, UInt i2)
2432b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2433b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
2434b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   Int op2;
2435b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
2436b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2437b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w0(r1));
2438b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op2 = (Int)i2;
2439b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Add32, mkexpr(op1), mkU32((UInt)op2)));
2440b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_ADD_32, op1, mktemp(Ity_I32,
2441b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                       mkU32((UInt)op2)));
2442b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w0(r1, mkexpr(result));
2443b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2444b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "aih";
2445b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2446b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2447b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
2448b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_ALR(UChar r1, UChar r2)
2449b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2450b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
2451b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
2452b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
2453b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2454b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1));
2455b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_w1(r2));
2456b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Add32, mkexpr(op1), mkexpr(op2)));
2457b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_ADD_32, op1, op2);
2458b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(result));
2459b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2460b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "alr";
2461b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2462b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2463b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
2464b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_ALGR(UChar r1, UChar r2)
2465b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2466b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
2467b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
2468b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
2469b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2470b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_dw0(r1));
2471b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_dw0(r2));
2472b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Add64, mkexpr(op1), mkexpr(op2)));
2473b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_ADD_64, op1, op2);
2474b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(result));
2475b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2476b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "algr";
2477b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2478b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2479b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
2480b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_ALGFR(UChar r1, UChar r2)
2481b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2482b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
2483b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
2484b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
2485b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2486b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_dw0(r1));
2487b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, unop(Iop_32Uto64, get_gpr_w1(r2)));
2488b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Add64, mkexpr(op1), mkexpr(op2)));
2489b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_ADD_64, op1, op2);
2490b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(result));
2491b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2492b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "algfr";
2493b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2494b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2495b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
2496b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_ALRK(UChar r3, UChar r1, UChar r2)
2497b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2498b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
2499b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op3 = newTemp(Ity_I32);
2500b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
2501b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2502b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_w1(r2));
2503b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op3, get_gpr_w1(r3));
2504b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Add32, mkexpr(op2), mkexpr(op3)));
2505b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_ADD_32, op2, op3);
2506b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(result));
2507b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2508b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "alrk";
2509b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2510b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2511b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
2512b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_ALGRK(UChar r3, UChar r1, UChar r2)
2513b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2514b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
2515b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op3 = newTemp(Ity_I64);
2516b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
2517b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2518b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_dw0(r2));
2519b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op3, get_gpr_dw0(r3));
2520b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Add64, mkexpr(op2), mkexpr(op3)));
2521b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_ADD_64, op2, op3);
2522b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(result));
2523b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2524b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "algrk";
2525b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2526b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2527b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
2528b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_AL(UChar r1, IRTemp op2addr)
2529b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2530b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
2531b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
2532b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
2533b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2534b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1));
2535b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I32, mkexpr(op2addr)));
2536b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Add32, mkexpr(op1), mkexpr(op2)));
2537b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_ADD_32, op1, op2);
2538b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(result));
2539b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2540b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "al";
2541b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2542b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2543b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
2544b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_ALY(UChar r1, IRTemp op2addr)
2545b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2546b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
2547b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
2548b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
2549b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2550b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1));
2551b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I32, mkexpr(op2addr)));
2552b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Add32, mkexpr(op1), mkexpr(op2)));
2553b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_ADD_32, op1, op2);
2554b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(result));
2555b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2556b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "aly";
2557b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2558b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2559b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
2560b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_ALG(UChar r1, IRTemp op2addr)
2561b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2562b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
2563b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
2564b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
2565b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2566b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_dw0(r1));
2567b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I64, mkexpr(op2addr)));
2568b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Add64, mkexpr(op1), mkexpr(op2)));
2569b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_ADD_64, op1, op2);
2570b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(result));
2571b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2572b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "alg";
2573b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2574b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2575b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
2576b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_ALGF(UChar r1, IRTemp op2addr)
2577b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2578b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
2579b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
2580b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
2581b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2582b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_dw0(r1));
2583b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, unop(Iop_32Uto64, load(Ity_I32, mkexpr(op2addr))));
2584b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Add64, mkexpr(op1), mkexpr(op2)));
2585b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_ADD_64, op1, op2);
2586b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(result));
2587b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2588b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "algf";
2589b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2590b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2591b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
2592b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_ALFI(UChar r1, UInt i2)
2593b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2594b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
2595b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UInt op2;
2596b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
2597b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2598b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1));
2599b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op2 = i2;
2600b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Add32, mkexpr(op1), mkU32(op2)));
2601b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_ADD_32, op1, mktemp(Ity_I32,
2602b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                       mkU32(op2)));
2603b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(result));
2604b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2605b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "alfi";
2606b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2607b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2608b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
2609b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_ALGFI(UChar r1, UInt i2)
2610b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2611b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
2612b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   ULong op2;
2613b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
2614b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2615b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_dw0(r1));
2616b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op2 = (ULong)i2;
2617b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Add64, mkexpr(op1), mkU64(op2)));
2618b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_ADD_64, op1, mktemp(Ity_I64,
2619b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                       mkU64(op2)));
2620b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(result));
2621b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2622b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "algfi";
2623b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2624b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2625b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
2626b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_ALHHHR(UChar r3, UChar r1, UChar r2)
2627b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2628b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
2629b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op3 = newTemp(Ity_I32);
2630b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
2631b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2632b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_w0(r2));
2633b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op3, get_gpr_w0(r3));
2634b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Add32, mkexpr(op2), mkexpr(op3)));
2635b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_ADD_32, op2, op3);
2636b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w0(r1, mkexpr(result));
2637b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2638b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "alhhhr";
2639b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2640b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2641b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
2642b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_ALHHLR(UChar r3, UChar r1, UChar r2)
2643b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2644b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
2645b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op3 = newTemp(Ity_I32);
2646b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
2647b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2648b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_w0(r2));
2649b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op3, get_gpr_w1(r3));
2650b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Add32, mkexpr(op2), mkexpr(op3)));
2651b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_ADD_32, op2, op3);
2652b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w0(r1, mkexpr(result));
2653b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2654b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "alhhlr";
2655b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2656b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2657b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
2658b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_ALCR(UChar r1, UChar r2)
2659b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2660b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
2661b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
2662b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
2663b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp carry_in = newTemp(Ity_I32);
2664b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2665b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1));
2666b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_w1(r2));
2667b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(carry_in, binop(Iop_Shr32, s390_call_calculate_cc(), mkU8(1)));
2668b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Add32, binop(Iop_Add32, mkexpr(op1), mkexpr(op2)),
2669b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkexpr(carry_in)));
2670b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZZ(S390_CC_OP_UNSIGNED_ADDC_32, op1, op2, carry_in);
2671b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(result));
2672b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2673b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "alcr";
2674b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2675b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2676b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
2677b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_ALCGR(UChar r1, UChar r2)
2678b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2679b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
2680b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
2681b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
2682b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp carry_in = newTemp(Ity_I64);
2683b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2684b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_dw0(r1));
2685b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_dw0(r2));
2686b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(carry_in, unop(Iop_32Uto64, binop(Iop_Shr32, s390_call_calculate_cc(),
2687b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkU8(1))));
2688b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Add64, binop(Iop_Add64, mkexpr(op1), mkexpr(op2)),
2689b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkexpr(carry_in)));
2690b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZZ(S390_CC_OP_UNSIGNED_ADDC_64, op1, op2, carry_in);
2691b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(result));
2692b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2693b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "alcgr";
2694b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2695b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2696b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
2697b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_ALC(UChar r1, IRTemp op2addr)
2698b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2699b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
2700b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
2701b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
2702b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp carry_in = newTemp(Ity_I32);
2703b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2704b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1));
2705b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I32, mkexpr(op2addr)));
2706b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(carry_in, binop(Iop_Shr32, s390_call_calculate_cc(), mkU8(1)));
2707b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Add32, binop(Iop_Add32, mkexpr(op1), mkexpr(op2)),
2708b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkexpr(carry_in)));
2709b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZZ(S390_CC_OP_UNSIGNED_ADDC_32, op1, op2, carry_in);
2710b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(result));
2711b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2712b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "alc";
2713b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2714b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2715b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
2716b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_ALCG(UChar r1, IRTemp op2addr)
2717b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2718b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
2719b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
2720b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
2721b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp carry_in = newTemp(Ity_I64);
2722b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2723b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_dw0(r1));
2724b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I64, mkexpr(op2addr)));
2725b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(carry_in, unop(Iop_32Uto64, binop(Iop_Shr32, s390_call_calculate_cc(),
2726b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkU8(1))));
2727b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Add64, binop(Iop_Add64, mkexpr(op1), mkexpr(op2)),
2728b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkexpr(carry_in)));
2729b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZZ(S390_CC_OP_UNSIGNED_ADDC_64, op1, op2, carry_in);
2730b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(result));
2731b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2732b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "alcg";
2733b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2734b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2735b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
2736b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_ALSI(UChar i2, IRTemp op1addr)
2737b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2738b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
2739b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UInt op2;
2740b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
2741b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2742b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, load(Ity_I32, mkexpr(op1addr)));
2743b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op2 = (UInt)(Int)(Char)i2;
2744b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Add32, mkexpr(op1), mkU32(op2)));
2745b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_ADD_32, op1, mktemp(Ity_I32,
2746b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                       mkU32(op2)));
2747b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(mkexpr(op1addr), mkexpr(result));
2748b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2749b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "alsi";
2750b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2751b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2752b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
2753b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_ALGSI(UChar i2, IRTemp op1addr)
2754b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2755b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
2756b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   ULong op2;
2757b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
2758b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2759b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, load(Ity_I64, mkexpr(op1addr)));
2760b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op2 = (ULong)(Long)(Char)i2;
2761b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Add64, mkexpr(op1), mkU64(op2)));
2762b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_ADD_64, op1, mktemp(Ity_I64,
2763b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                       mkU64(op2)));
2764b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(mkexpr(op1addr), mkexpr(result));
2765b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2766b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "algsi";
2767b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2768b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2769b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
2770b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_ALHSIK(UChar r1, UChar r3, UShort i2)
2771b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2772b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UInt op2;
2773b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op3 = newTemp(Ity_I32);
2774b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
2775b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2776b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op2 = (UInt)(Int)(Short)i2;
2777b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op3, get_gpr_w1(r3));
2778b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Add32, mkU32(op2), mkexpr(op3)));
2779b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_ADD_32, mktemp(Ity_I32, mkU32(op2)),
2780b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                       op3);
2781b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(result));
2782b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2783b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "alhsik";
2784b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2785b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2786b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
2787b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_ALGHSIK(UChar r1, UChar r3, UShort i2)
2788b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2789b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   ULong op2;
2790b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op3 = newTemp(Ity_I64);
2791b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
2792b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2793b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op2 = (ULong)(Long)(Short)i2;
2794b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op3, get_gpr_dw0(r3));
2795b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Add64, mkU64(op2), mkexpr(op3)));
2796b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_ADD_64, mktemp(Ity_I64, mkU64(op2)),
2797b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                       op3);
2798b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(result));
2799b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2800b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "alghsik";
2801b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2802b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2803b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
2804b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_ALSIH(UChar r1, UInt i2)
2805b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2806b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
2807b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UInt op2;
2808b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
2809b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2810b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w0(r1));
2811b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op2 = i2;
2812b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Add32, mkexpr(op1), mkU32(op2)));
2813b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_ADD_32, op1, mktemp(Ity_I32,
2814b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                       mkU32(op2)));
2815b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w0(r1, mkexpr(result));
2816b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2817b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "alsih";
2818b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2819b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2820b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
2821b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_ALSIHN(UChar r1, UInt i2)
2822b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2823b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
2824b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UInt op2;
2825b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
2826b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2827b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w0(r1));
2828b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op2 = i2;
2829b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Add32, mkexpr(op1), mkU32(op2)));
2830b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w0(r1, mkexpr(result));
2831b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2832b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "alsihn";
2833b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2834b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2835b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
2836b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_NR(UChar r1, UChar r2)
2837b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2838b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
2839b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
2840b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
2841b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2842b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1));
2843b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_w1(r2));
2844b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_And32, mkexpr(op1), mkexpr(op2)));
2845b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result);
2846b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(result));
2847b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2848b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "nr";
2849b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2850b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2851b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
2852b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_NGR(UChar r1, UChar r2)
2853b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2854b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
2855b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
2856b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
2857b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2858b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_dw0(r1));
2859b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_dw0(r2));
2860b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_And64, mkexpr(op1), mkexpr(op2)));
2861b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result);
2862b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(result));
2863b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2864b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "ngr";
2865b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2866b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2867b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
2868b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_NRK(UChar r3, UChar r1, UChar r2)
2869b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2870b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
2871b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op3 = newTemp(Ity_I32);
2872b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
2873b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2874b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_w1(r2));
2875b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op3, get_gpr_w1(r3));
2876b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_And32, mkexpr(op2), mkexpr(op3)));
2877b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result);
2878b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(result));
2879b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2880b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "nrk";
2881b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2882b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2883b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
2884b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_NGRK(UChar r3, UChar r1, UChar r2)
2885b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2886b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
2887b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op3 = newTemp(Ity_I64);
2888b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
2889b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2890b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_dw0(r2));
2891b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op3, get_gpr_dw0(r3));
2892b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_And64, mkexpr(op2), mkexpr(op3)));
2893b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result);
2894b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(result));
2895b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2896b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "ngrk";
2897b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2898b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2899b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
2900b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_N(UChar r1, IRTemp op2addr)
2901b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2902b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
2903b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
2904b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
2905b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2906b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1));
2907b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I32, mkexpr(op2addr)));
2908b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_And32, mkexpr(op1), mkexpr(op2)));
2909b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result);
2910b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(result));
2911b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2912b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "n";
2913b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2914b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2915b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
2916b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_NY(UChar r1, IRTemp op2addr)
2917b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2918b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
2919b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
2920b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
2921b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2922b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1));
2923b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I32, mkexpr(op2addr)));
2924b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_And32, mkexpr(op1), mkexpr(op2)));
2925b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result);
2926b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(result));
2927b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2928b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "ny";
2929b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2930b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2931b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
2932b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_NG(UChar r1, IRTemp op2addr)
2933b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2934b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
2935b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
2936b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
2937b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2938b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_dw0(r1));
2939b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I64, mkexpr(op2addr)));
2940b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_And64, mkexpr(op1), mkexpr(op2)));
2941b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result);
2942b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(result));
2943b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2944b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "ng";
2945b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2946b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2947b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
2948b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_NI(UChar i2, IRTemp op1addr)
2949b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2950b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I8);
2951b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UChar op2;
2952b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I8);
2953b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2954b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, load(Ity_I8, mkexpr(op1addr)));
2955b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op2 = i2;
2956b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_And8, mkexpr(op1), mkU8(op2)));
2957b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result);
2958b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(mkexpr(op1addr), mkexpr(result));
2959b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2960b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "ni";
2961b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2962b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2963b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
2964b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_NIY(UChar i2, IRTemp op1addr)
2965b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2966b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I8);
2967b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UChar op2;
2968b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I8);
2969b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2970b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, load(Ity_I8, mkexpr(op1addr)));
2971b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op2 = i2;
2972b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_And8, mkexpr(op1), mkU8(op2)));
2973b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result);
2974b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(mkexpr(op1addr), mkexpr(result));
2975b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2976b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "niy";
2977b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2978b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2979b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
2980b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_NIHF(UChar r1, UInt i2)
2981b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2982b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
2983b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UInt op2;
2984b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
2985b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2986b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w0(r1));
2987b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op2 = i2;
2988b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_And32, mkexpr(op1), mkU32(op2)));
2989b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result);
2990b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w0(r1, mkexpr(result));
2991b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2992b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "nihf";
2993b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
2994b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2995b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
2996b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_NIHH(UChar r1, UShort i2)
2997b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
2998b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I16);
2999b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UShort op2;
3000b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I16);
3001b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3002b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_hw0(r1));
3003b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op2 = i2;
3004b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_And16, mkexpr(op1), mkU16(op2)));
3005b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result);
3006b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_hw0(r1, mkexpr(result));
3007b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3008b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "nihh";
3009b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3010b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3011b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3012b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_NIHL(UChar r1, UShort i2)
3013b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3014b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I16);
3015b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UShort op2;
3016b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I16);
3017b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3018b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_hw1(r1));
3019b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op2 = i2;
3020b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_And16, mkexpr(op1), mkU16(op2)));
3021b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result);
3022b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_hw1(r1, mkexpr(result));
3023b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3024b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "nihl";
3025b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3026b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3027b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3028b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_NILF(UChar r1, UInt i2)
3029b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3030b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
3031b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UInt op2;
3032b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
3033b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3034b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1));
3035b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op2 = i2;
3036b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_And32, mkexpr(op1), mkU32(op2)));
3037b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result);
3038b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(result));
3039b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3040b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "nilf";
3041b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3042b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3043b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3044b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_NILH(UChar r1, UShort i2)
3045b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3046b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I16);
3047b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UShort op2;
3048b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I16);
3049b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3050b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_hw2(r1));
3051b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op2 = i2;
3052b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_And16, mkexpr(op1), mkU16(op2)));
3053b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result);
3054b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_hw2(r1, mkexpr(result));
3055b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3056b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "nilh";
3057b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3058b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3059b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3060b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_NILL(UChar r1, UShort i2)
3061b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3062b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I16);
3063b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UShort op2;
3064b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I16);
3065b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3066b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_hw3(r1));
3067b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op2 = i2;
3068b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_And16, mkexpr(op1), mkU16(op2)));
3069b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result);
3070b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_hw3(r1, mkexpr(result));
3071b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3072b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "nill";
3073b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3074b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3075b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3076b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_BASR(UChar r1, UChar r2)
3077b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3078b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp target = newTemp(Ity_I64);
3079b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3080b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (r2 == 0) {
3081b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      put_gpr_dw0(r1, mkU64(guest_IA_curr_instr + 2ULL));
3082b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } else {
3083b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      if (r1 != r2) {
3084b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         put_gpr_dw0(r1, mkU64(guest_IA_curr_instr + 2ULL));
3085b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         call_function(get_gpr_dw0(r2));
3086b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      } else {
3087b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(target, get_gpr_dw0(r2));
3088b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         put_gpr_dw0(r1, mkU64(guest_IA_curr_instr + 2ULL));
3089b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         call_function(mkexpr(target));
3090b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      }
3091b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
3092b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3093b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "basr";
3094b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3095b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3096b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3097b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_BAS(UChar r1, IRTemp op2addr)
3098b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3099b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp target = newTemp(Ity_I64);
3100b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3101b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkU64(guest_IA_curr_instr + 4ULL));
3102b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(target, mkexpr(op2addr));
3103b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   call_function(mkexpr(target));
3104b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3105b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "bas";
3106b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3107b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3108b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3109b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_BCR(UChar r1, UChar r2)
3110b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3111b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp cond = newTemp(Ity_I32);
3112b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3113b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (r2 == 0 && (r1 >= 14)) {    /* serialization */
3114b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      stmt(IRStmt_MBE(Imbe_Fence));
3115b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
3116b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3117b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if ((r2 == 0) || (r1 == 0)) {
3118b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } else {
3119b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      if (r1 == 15) {
3120b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         return_from_function(get_gpr_dw0(r2));
3121b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      } else {
3122b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(cond, s390_call_calculate_cond(r1));
3123b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         if_not_condition_goto_computed(binop(Iop_CmpEQ32, mkexpr(cond),
3124b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                        mkU32(0)), get_gpr_dw0(r2));
3125b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      }
3126b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
3127b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
3128b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC2(XMNM, GPR), S390_XMNM_BCR, r1, r2);
3129b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3130b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "bcr";
3131b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3132b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3133b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3134b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_BC(UChar r1, UChar x2, UChar b2, UShort d2, IRTemp op2addr)
3135b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3136b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp cond = newTemp(Ity_I32);
3137b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3138b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (r1 == 0) {
3139b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } else {
3140b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      if (r1 == 15) {
3141b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         always_goto(mkexpr(op2addr));
3142b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      } else {
3143b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(cond, s390_call_calculate_cond(r1));
3144b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         if_not_condition_goto_computed(binop(Iop_CmpEQ32, mkexpr(cond),
3145b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                        mkU32(0)), mkexpr(op2addr));
3146b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      }
3147b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
3148b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
3149b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC2(XMNM, UDXB), S390_XMNM_BC, r1, d2, x2, b2);
3150b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3151b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "bc";
3152b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3153b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3154b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3155b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_BCTR(UChar r1, UChar r2)
3156b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3157b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, binop(Iop_Sub32, get_gpr_w1(r1), mkU32(1)));
3158b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (r2 != 0) {
3159b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      if_not_condition_goto_computed(binop(Iop_CmpEQ32, get_gpr_w1(r1), mkU32(0)
3160b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                     ), get_gpr_dw0(r2));
3161b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
3162b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3163b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "bctr";
3164b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3165b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3166b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3167b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_BCTGR(UChar r1, UChar r2)
3168b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3169b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, binop(Iop_Sub64, get_gpr_dw0(r1), mkU64(1)));
3170b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (r2 != 0) {
3171b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      if_not_condition_goto_computed(binop(Iop_CmpEQ64, get_gpr_dw0(r1),
3172b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                     mkU64(0)), get_gpr_dw0(r2));
3173b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
3174b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3175b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "bctgr";
3176b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3177b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3178b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3179b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_BCT(UChar r1, IRTemp op2addr)
3180b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3181b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, binop(Iop_Sub32, get_gpr_w1(r1), mkU32(1)));
3182b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if_not_condition_goto_computed(binop(Iop_CmpEQ32, get_gpr_w1(r1), mkU32(0)),
3183b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  mkexpr(op2addr));
3184b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3185b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "bct";
3186b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3187b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3188b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3189b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_BCTG(UChar r1, IRTemp op2addr)
3190b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3191b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, binop(Iop_Sub64, get_gpr_dw0(r1), mkU64(1)));
3192b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if_not_condition_goto_computed(binop(Iop_CmpEQ64, get_gpr_dw0(r1), mkU64(0)),
3193b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  mkexpr(op2addr));
3194b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3195b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "bctg";
3196b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3197b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3198b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3199b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_BXH(UChar r1, UChar r3, IRTemp op2addr)
3200b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3201b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp value = newTemp(Ity_I32);
3202b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3203b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(value, get_gpr_w1(r3 | 1));
3204b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, binop(Iop_Add32, get_gpr_w1(r1), get_gpr_w1(r3)));
3205b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if_not_condition_goto_computed(binop(Iop_CmpLE32S, get_gpr_w1(r1),
3206b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  mkexpr(value)), mkexpr(op2addr));
3207b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3208b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "bxh";
3209b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3210b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3211b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3212b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_BXHG(UChar r1, UChar r3, IRTemp op2addr)
3213b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3214b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp value = newTemp(Ity_I64);
3215b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3216b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(value, get_gpr_dw0(r3 | 1));
3217b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, binop(Iop_Add64, get_gpr_dw0(r1), get_gpr_dw0(r3)));
3218b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if_not_condition_goto_computed(binop(Iop_CmpLE64S, get_gpr_dw0(r1),
3219b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  mkexpr(value)), mkexpr(op2addr));
3220b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3221b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "bxhg";
3222b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3223b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3224b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3225b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_BXLE(UChar r1, UChar r3, IRTemp op2addr)
3226b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3227b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp value = newTemp(Ity_I32);
3228b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3229b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(value, get_gpr_w1(r3 | 1));
3230b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, binop(Iop_Add32, get_gpr_w1(r1), get_gpr_w1(r3)));
3231b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if_not_condition_goto_computed(binop(Iop_CmpLT32S, mkexpr(value),
3232b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  get_gpr_w1(r1)), mkexpr(op2addr));
3233b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3234b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "bxle";
3235b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3236b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3237b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3238b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_BXLEG(UChar r1, UChar r3, IRTemp op2addr)
3239b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3240b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp value = newTemp(Ity_I64);
3241b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3242b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(value, get_gpr_dw0(r3 | 1));
3243b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, binop(Iop_Add64, get_gpr_dw0(r1), get_gpr_dw0(r3)));
3244b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if_not_condition_goto_computed(binop(Iop_CmpLT64S, mkexpr(value),
3245b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  get_gpr_dw0(r1)), mkexpr(op2addr));
3246b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3247b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "bxleg";
3248b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3249b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3250b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3251b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_BRAS(UChar r1, UShort i2)
3252b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3253b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkU64(guest_IA_curr_instr + 4ULL));
3254b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   call_function_and_chase(guest_IA_curr_instr + ((ULong)(Long)(Short)i2 << 1));
3255b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3256b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "bras";
3257b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3258b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3259b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3260b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_BRASL(UChar r1, UInt i2)
3261b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3262b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkU64(guest_IA_curr_instr + 6ULL));
3263b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   call_function_and_chase(guest_IA_curr_instr + ((ULong)(Long)(Int)i2 << 1));
3264b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3265b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "brasl";
3266b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3267b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3268b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3269b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_BRC(UChar r1, UShort i2)
3270b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3271b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp cond = newTemp(Ity_I32);
3272b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3273b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (r1 == 0) {
3274b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } else {
3275b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      if (r1 == 15) {
3276b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         always_goto_and_chase(
3277b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov               guest_IA_curr_instr + ((ULong)(Long)(Short)i2 << 1));
3278b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      } else {
3279b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(cond, s390_call_calculate_cond(r1));
3280b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         if_condition_goto(binop(Iop_CmpNE32, mkexpr(cond), mkU32(0)),
3281b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                           guest_IA_curr_instr + ((ULong)(Long)(Short)i2 << 1));
3282b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3283b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      }
3284b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
3285b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
3286b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC2(XMNM, PCREL), S390_XMNM_BRC, r1, (Int)(Short)i2);
3287b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3288b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "brc";
3289b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3290b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3291b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3292b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_BRCL(UChar r1, UInt i2)
3293b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3294b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp cond = newTemp(Ity_I32);
3295b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3296b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (r1 == 0) {
3297b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } else {
3298b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      if (r1 == 15) {
3299b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         always_goto_and_chase(guest_IA_curr_instr + ((ULong)(Long)(Int)i2 << 1));
3300b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      } else {
3301b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(cond, s390_call_calculate_cond(r1));
3302b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         if_condition_goto(binop(Iop_CmpNE32, mkexpr(cond), mkU32(0)),
3303b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                           guest_IA_curr_instr + ((ULong)(Long)(Int)i2 << 1));
3304b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      }
3305b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
3306b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
3307b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC2(XMNM, PCREL), S390_XMNM_BRCL, r1, i2);
3308b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3309b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "brcl";
3310b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3311b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3312b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3313b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_BRCT(UChar r1, UShort i2)
3314b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3315b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, binop(Iop_Sub32, get_gpr_w1(r1), mkU32(1)));
3316b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if_condition_goto(binop(Iop_CmpNE32, get_gpr_w1(r1), mkU32(0)),
3317b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     guest_IA_curr_instr + ((ULong)(Long)(Short)i2 << 1));
3318b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3319b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "brct";
3320b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3321b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3322b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3323b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_BRCTG(UChar r1, UShort i2)
3324b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3325b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, binop(Iop_Sub64, get_gpr_dw0(r1), mkU64(1)));
3326b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if_condition_goto(binop(Iop_CmpNE64, get_gpr_dw0(r1), mkU64(0)),
3327b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     guest_IA_curr_instr + ((ULong)(Long)(Short)i2 << 1));
3328b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3329b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "brctg";
3330b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3331b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3332b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3333b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_BRXH(UChar r1, UChar r3, UShort i2)
3334b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3335b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp value = newTemp(Ity_I32);
3336b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3337b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(value, get_gpr_w1(r3 | 1));
3338b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, binop(Iop_Add32, get_gpr_w1(r1), get_gpr_w1(r3)));
3339b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if_condition_goto(binop(Iop_CmpLT32S, mkexpr(value), get_gpr_w1(r1)),
3340b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     guest_IA_curr_instr + ((ULong)(Long)(Short)i2 << 1));
3341b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3342b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "brxh";
3343b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3344b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3345b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3346b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_BRXHG(UChar r1, UChar r3, UShort i2)
3347b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3348b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp value = newTemp(Ity_I64);
3349b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3350b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(value, get_gpr_dw0(r3 | 1));
3351b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, binop(Iop_Add64, get_gpr_dw0(r1), get_gpr_dw0(r3)));
3352b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if_condition_goto(binop(Iop_CmpLT64S, mkexpr(value), get_gpr_dw0(r1)),
3353b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     guest_IA_curr_instr + ((ULong)(Long)(Short)i2 << 1));
3354b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3355b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "brxhg";
3356b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3357b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3358b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3359b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_BRXLE(UChar r1, UChar r3, UShort i2)
3360b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3361b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp value = newTemp(Ity_I32);
3362b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3363b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(value, get_gpr_w1(r3 | 1));
3364b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, binop(Iop_Add32, get_gpr_w1(r1), get_gpr_w1(r3)));
3365b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if_condition_goto(binop(Iop_CmpLE32S, get_gpr_w1(r1), mkexpr(value)),
3366b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     guest_IA_curr_instr + ((ULong)(Long)(Short)i2 << 1));
3367b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3368b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "brxle";
3369b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3370b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3371b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3372b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_BRXLG(UChar r1, UChar r3, UShort i2)
3373b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3374b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp value = newTemp(Ity_I64);
3375b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3376b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(value, get_gpr_dw0(r3 | 1));
3377b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, binop(Iop_Add64, get_gpr_dw0(r1), get_gpr_dw0(r3)));
3378b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if_condition_goto(binop(Iop_CmpLE64S, get_gpr_dw0(r1), mkexpr(value)),
3379b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     guest_IA_curr_instr + ((ULong)(Long)(Short)i2 << 1));
3380b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3381b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "brxlg";
3382b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3383b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3384b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3385b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CR(UChar r1, UChar r2)
3386b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3387b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
3388b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
3389b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3390b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1));
3391b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_w1(r2));
3392b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_COMPARE, op1, op2);
3393b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3394b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "cr";
3395b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3396b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3397b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3398b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CGR(UChar r1, UChar r2)
3399b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3400b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
3401b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
3402b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3403b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_dw0(r1));
3404b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_dw0(r2));
3405b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_COMPARE, op1, op2);
3406b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3407b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "cgr";
3408b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3409b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3410b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3411b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CGFR(UChar r1, UChar r2)
3412b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3413b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
3414b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
3415b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3416b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_dw0(r1));
3417b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, unop(Iop_32Sto64, get_gpr_w1(r2)));
3418b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_COMPARE, op1, op2);
3419b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3420b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "cgfr";
3421b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3422b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3423b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3424b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_C(UChar r1, IRTemp op2addr)
3425b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3426b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
3427b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
3428b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3429b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1));
3430b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I32, mkexpr(op2addr)));
3431b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_COMPARE, op1, op2);
3432b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3433b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "c";
3434b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3435b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3436b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3437b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CY(UChar r1, IRTemp op2addr)
3438b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3439b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
3440b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
3441b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3442b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1));
3443b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I32, mkexpr(op2addr)));
3444b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_COMPARE, op1, op2);
3445b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3446b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "cy";
3447b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3448b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3449b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3450b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CG(UChar r1, IRTemp op2addr)
3451b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3452b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
3453b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
3454b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3455b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_dw0(r1));
3456b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I64, mkexpr(op2addr)));
3457b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_COMPARE, op1, op2);
3458b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3459b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "cg";
3460b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3461b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3462b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3463b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CGF(UChar r1, IRTemp op2addr)
3464b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3465b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
3466b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
3467b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3468b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_dw0(r1));
3469b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, unop(Iop_32Sto64, load(Ity_I32, mkexpr(op2addr))));
3470b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_COMPARE, op1, op2);
3471b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3472b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "cgf";
3473b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3474b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3475b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3476b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CFI(UChar r1, UInt i2)
3477b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3478b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
3479b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   Int op2;
3480b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3481b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1));
3482b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op2 = (Int)i2;
3483b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_COMPARE, op1, mktemp(Ity_I32,
3484b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                       mkU32((UInt)op2)));
3485b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3486b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "cfi";
3487b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3488b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3489b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3490b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CGFI(UChar r1, UInt i2)
3491b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3492b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
3493b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   Long op2;
3494b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3495b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_dw0(r1));
3496b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op2 = (Long)(Int)i2;
3497b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_COMPARE, op1, mktemp(Ity_I64,
3498b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                       mkU64((ULong)op2)));
3499b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3500b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "cgfi";
3501b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3502b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3503b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3504b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CRL(UChar r1, UInt i2)
3505b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3506b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
3507b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
3508b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3509b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1));
3510b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I32, mkU64(guest_IA_curr_instr + ((ULong)(Long)(Int)
3511b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          i2 << 1))));
3512b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_COMPARE, op1, op2);
3513b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3514b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "crl";
3515b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3516b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3517b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3518b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CGRL(UChar r1, UInt i2)
3519b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3520b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
3521b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
3522b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3523b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_dw0(r1));
3524b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I64, mkU64(guest_IA_curr_instr + ((ULong)(Long)(Int)
3525b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          i2 << 1))));
3526b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_COMPARE, op1, op2);
3527b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3528b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "cgrl";
3529b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3530b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3531b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3532b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CGFRL(UChar r1, UInt i2)
3533b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3534b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
3535b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
3536b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3537b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_dw0(r1));
3538b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, unop(Iop_32Sto64, load(Ity_I32, mkU64(guest_IA_curr_instr +
3539b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          ((ULong)(Long)(Int)i2 << 1)))));
3540b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_COMPARE, op1, op2);
3541b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3542b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "cgfrl";
3543b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3544b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3545b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3546b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CRB(UChar r1, UChar r2, UChar m3, IRTemp op4addr)
3547b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3548b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
3549b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
3550b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp icc = newTemp(Ity_I32);
3551b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp cond = newTemp(Ity_I32);
3552b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3553b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (m3 == 0) {
3554b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } else {
3555b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      if (m3 == 14) {
3556b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         always_goto(mkexpr(op4addr));
3557b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      } else {
3558b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(op1, get_gpr_w1(r1));
3559b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(op2, get_gpr_w1(r2));
3560b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(icc, s390_call_calculate_iccSS(S390_CC_OP_SIGNED_COMPARE, op1,
3561b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                op2));
3562b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(cond, binop(Iop_And32, binop(Iop_Shl32, mkU32(m3),
3563b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                unop(Iop_32to8, mkexpr(icc))), mkU32(8)));
3564b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         if_not_condition_goto_computed(binop(Iop_CmpEQ32, mkexpr(cond),
3565b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                        mkU32(0)), mkexpr(op4addr));
3566b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      }
3567b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
3568b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3569b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "crb";
3570b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3571b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3572b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3573b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CGRB(UChar r1, UChar r2, UChar m3, IRTemp op4addr)
3574b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3575b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
3576b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
3577b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp icc = newTemp(Ity_I32);
3578b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp cond = newTemp(Ity_I32);
3579b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3580b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (m3 == 0) {
3581b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } else {
3582b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      if (m3 == 14) {
3583b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         always_goto(mkexpr(op4addr));
3584b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      } else {
3585b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(op1, get_gpr_dw0(r1));
3586b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(op2, get_gpr_dw0(r2));
3587b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(icc, s390_call_calculate_iccSS(S390_CC_OP_SIGNED_COMPARE, op1,
3588b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                op2));
3589b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(cond, binop(Iop_And32, binop(Iop_Shl32, mkU32(m3),
3590b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                unop(Iop_32to8, mkexpr(icc))), mkU32(8)));
3591b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         if_not_condition_goto_computed(binop(Iop_CmpEQ32, mkexpr(cond),
3592b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                        mkU32(0)), mkexpr(op4addr));
3593b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      }
3594b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
3595b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3596b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "cgrb";
3597b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3598b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3599b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3600b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CRJ(UChar r1, UChar r2, UShort i4, UChar m3)
3601b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3602b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
3603b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
3604b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp icc = newTemp(Ity_I32);
3605b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp cond = newTemp(Ity_I32);
3606b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3607b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (m3 == 0) {
3608b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } else {
3609b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      if (m3 == 14) {
3610b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         always_goto_and_chase(
3611b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                guest_IA_curr_instr + ((ULong)(Long)(Short)i4 << 1));
3612b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      } else {
3613b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(op1, get_gpr_w1(r1));
3614b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(op2, get_gpr_w1(r2));
3615b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(icc, s390_call_calculate_iccSS(S390_CC_OP_SIGNED_COMPARE, op1,
3616b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                op2));
3617b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(cond, binop(Iop_And32, binop(Iop_Shl32, mkU32(m3),
3618b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                unop(Iop_32to8, mkexpr(icc))), mkU32(8)));
3619b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         if_condition_goto(binop(Iop_CmpNE32, mkexpr(cond), mkU32(0)),
3620b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                           guest_IA_curr_instr + ((ULong)(Long)(Short)i4 << 1));
3621b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3622b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      }
3623b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
3624b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3625b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "crj";
3626b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3627b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3628b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3629b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CGRJ(UChar r1, UChar r2, UShort i4, UChar m3)
3630b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3631b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
3632b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
3633b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp icc = newTemp(Ity_I32);
3634b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp cond = newTemp(Ity_I32);
3635b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3636b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (m3 == 0) {
3637b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } else {
3638b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      if (m3 == 14) {
3639b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         always_goto_and_chase(
3640b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                guest_IA_curr_instr + ((ULong)(Long)(Short)i4 << 1));
3641b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      } else {
3642b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(op1, get_gpr_dw0(r1));
3643b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(op2, get_gpr_dw0(r2));
3644b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(icc, s390_call_calculate_iccSS(S390_CC_OP_SIGNED_COMPARE, op1,
3645b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                op2));
3646b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(cond, binop(Iop_And32, binop(Iop_Shl32, mkU32(m3),
3647b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                unop(Iop_32to8, mkexpr(icc))), mkU32(8)));
3648b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         if_condition_goto(binop(Iop_CmpNE32, mkexpr(cond), mkU32(0)),
3649b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                           guest_IA_curr_instr + ((ULong)(Long)(Short)i4 << 1));
3650b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3651b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      }
3652b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
3653b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3654b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "cgrj";
3655b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3656b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3657b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3658b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CIB(UChar r1, UChar m3, UChar i2, IRTemp op4addr)
3659b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3660b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
3661b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   Int op2;
3662b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp icc = newTemp(Ity_I32);
3663b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp cond = newTemp(Ity_I32);
3664b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3665b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (m3 == 0) {
3666b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } else {
3667b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      if (m3 == 14) {
3668b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         always_goto(mkexpr(op4addr));
3669b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      } else {
3670b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(op1, get_gpr_w1(r1));
3671b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         op2 = (Int)(Char)i2;
3672b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(icc, s390_call_calculate_iccSS(S390_CC_OP_SIGNED_COMPARE, op1,
3673b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                mktemp(Ity_I32, mkU32((UInt)op2))));
3674b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(cond, binop(Iop_And32, binop(Iop_Shl32, mkU32(m3),
3675b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                unop(Iop_32to8, mkexpr(icc))), mkU32(8)));
3676b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         if_not_condition_goto_computed(binop(Iop_CmpEQ32, mkexpr(cond),
3677b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                        mkU32(0)), mkexpr(op4addr));
3678b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      }
3679b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
3680b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3681b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "cib";
3682b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3683b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3684b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3685b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CGIB(UChar r1, UChar m3, UChar i2, IRTemp op4addr)
3686b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3687b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
3688b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   Long op2;
3689b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp icc = newTemp(Ity_I32);
3690b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp cond = newTemp(Ity_I32);
3691b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3692b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (m3 == 0) {
3693b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } else {
3694b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      if (m3 == 14) {
3695b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         always_goto(mkexpr(op4addr));
3696b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      } else {
3697b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(op1, get_gpr_dw0(r1));
3698b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         op2 = (Long)(Char)i2;
3699b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(icc, s390_call_calculate_iccSS(S390_CC_OP_SIGNED_COMPARE, op1,
3700b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                mktemp(Ity_I64, mkU64((ULong)op2))));
3701b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(cond, binop(Iop_And32, binop(Iop_Shl32, mkU32(m3),
3702b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                unop(Iop_32to8, mkexpr(icc))), mkU32(8)));
3703b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         if_not_condition_goto_computed(binop(Iop_CmpEQ32, mkexpr(cond),
3704b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                        mkU32(0)), mkexpr(op4addr));
3705b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      }
3706b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
3707b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3708b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "cgib";
3709b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3710b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3711b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3712b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CIJ(UChar r1, UChar m3, UShort i4, UChar i2)
3713b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3714b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
3715b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   Int op2;
3716b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp icc = newTemp(Ity_I32);
3717b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp cond = newTemp(Ity_I32);
3718b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3719b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (m3 == 0) {
3720b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } else {
3721b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      if (m3 == 14) {
3722b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         always_goto_and_chase(guest_IA_curr_instr + ((ULong)(Long)(Short)i4 << 1));
3723b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      } else {
3724b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(op1, get_gpr_w1(r1));
3725b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         op2 = (Int)(Char)i2;
3726b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(icc, s390_call_calculate_iccSS(S390_CC_OP_SIGNED_COMPARE, op1,
3727b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                mktemp(Ity_I32, mkU32((UInt)op2))));
3728b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(cond, binop(Iop_And32, binop(Iop_Shl32, mkU32(m3),
3729b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                unop(Iop_32to8, mkexpr(icc))), mkU32(8)));
3730b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         if_condition_goto(binop(Iop_CmpNE32, mkexpr(cond), mkU32(0)),
3731b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                           guest_IA_curr_instr + ((ULong)(Long)(Short)i4 << 1));
3732b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3733b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      }
3734b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
3735b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3736b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "cij";
3737b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3738b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3739b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3740b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CGIJ(UChar r1, UChar m3, UShort i4, UChar i2)
3741b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3742b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
3743b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   Long op2;
3744b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp icc = newTemp(Ity_I32);
3745b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp cond = newTemp(Ity_I32);
3746b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3747b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (m3 == 0) {
3748b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } else {
3749b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      if (m3 == 14) {
3750b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         always_goto_and_chase(guest_IA_curr_instr + ((ULong)(Long)(Short)i4 << 1));
3751b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      } else {
3752b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(op1, get_gpr_dw0(r1));
3753b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         op2 = (Long)(Char)i2;
3754b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(icc, s390_call_calculate_iccSS(S390_CC_OP_SIGNED_COMPARE, op1,
3755b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                mktemp(Ity_I64, mkU64((ULong)op2))));
3756b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(cond, binop(Iop_And32, binop(Iop_Shl32, mkU32(m3),
3757b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                unop(Iop_32to8, mkexpr(icc))), mkU32(8)));
3758b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         if_condition_goto(binop(Iop_CmpNE32, mkexpr(cond), mkU32(0)),
3759b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                           guest_IA_curr_instr + ((ULong)(Long)(Short)i4 << 1));
3760b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3761b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      }
3762b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
3763b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3764b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "cgij";
3765b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3766b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3767b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3768b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CH(UChar r1, IRTemp op2addr)
3769b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3770b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
3771b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
3772b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3773b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1));
3774b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, unop(Iop_16Sto32, load(Ity_I16, mkexpr(op2addr))));
3775b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_COMPARE, op1, op2);
3776b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3777b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "ch";
3778b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3779b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3780b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3781b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CHY(UChar r1, IRTemp op2addr)
3782b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3783b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
3784b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
3785b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3786b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1));
3787b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, unop(Iop_16Sto32, load(Ity_I16, mkexpr(op2addr))));
3788b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_COMPARE, op1, op2);
3789b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3790b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "chy";
3791b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3792b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3793b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3794b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CGH(UChar r1, IRTemp op2addr)
3795b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3796b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
3797b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
3798b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3799b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_dw0(r1));
3800b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, unop(Iop_16Sto64, load(Ity_I16, mkexpr(op2addr))));
3801b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_COMPARE, op1, op2);
3802b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3803b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "cgh";
3804b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3805b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3806b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3807b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CHI(UChar r1, UShort i2)
3808b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3809b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
3810b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   Int op2;
3811b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3812b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1));
3813b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op2 = (Int)(Short)i2;
3814b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_COMPARE, op1, mktemp(Ity_I32,
3815b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                       mkU32((UInt)op2)));
3816b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3817b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "chi";
3818b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3819b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3820b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3821b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CGHI(UChar r1, UShort i2)
3822b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3823b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
3824b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   Long op2;
3825b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3826b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_dw0(r1));
3827b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op2 = (Long)(Short)i2;
3828b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_COMPARE, op1, mktemp(Ity_I64,
3829b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                       mkU64((ULong)op2)));
3830b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3831b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "cghi";
3832b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3833b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3834b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3835b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CHHSI(UShort i2, IRTemp op1addr)
3836b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3837b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I16);
3838b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   Short op2;
3839b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3840b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, load(Ity_I16, mkexpr(op1addr)));
3841b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op2 = (Short)i2;
3842b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_COMPARE, op1, mktemp(Ity_I16,
3843b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                       mkU16((UShort)op2)));
3844b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3845b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "chhsi";
3846b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3847b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3848b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3849b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CHSI(UShort i2, IRTemp op1addr)
3850b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3851b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
3852b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   Int op2;
3853b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3854b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, load(Ity_I32, mkexpr(op1addr)));
3855b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op2 = (Int)(Short)i2;
3856b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_COMPARE, op1, mktemp(Ity_I32,
3857b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                       mkU32((UInt)op2)));
3858b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3859b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "chsi";
3860b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3861b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3862b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3863b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CGHSI(UShort i2, IRTemp op1addr)
3864b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3865b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
3866b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   Long op2;
3867b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3868b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, load(Ity_I64, mkexpr(op1addr)));
3869b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op2 = (Long)(Short)i2;
3870b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_COMPARE, op1, mktemp(Ity_I64,
3871b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                       mkU64((ULong)op2)));
3872b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3873b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "cghsi";
3874b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3875b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3876b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3877b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CHRL(UChar r1, UInt i2)
3878b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3879b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
3880b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
3881b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3882b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1));
3883b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, unop(Iop_16Sto32, load(Ity_I16, mkU64(guest_IA_curr_instr +
3884b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          ((ULong)(Long)(Int)i2 << 1)))));
3885b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_COMPARE, op1, op2);
3886b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3887b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "chrl";
3888b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3889b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3890b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3891b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CGHRL(UChar r1, UInt i2)
3892b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3893b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
3894b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
3895b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3896b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_dw0(r1));
3897b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, unop(Iop_16Sto64, load(Ity_I16, mkU64(guest_IA_curr_instr +
3898b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          ((ULong)(Long)(Int)i2 << 1)))));
3899b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_COMPARE, op1, op2);
3900b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3901b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "cghrl";
3902b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3903b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3904b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3905b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CHHR(UChar r1, UChar r2)
3906b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3907b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
3908b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
3909b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3910b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w0(r1));
3911b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_w0(r2));
3912b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_COMPARE, op1, op2);
3913b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3914b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "chhr";
3915b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3916b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3917b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3918b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CHLR(UChar r1, UChar r2)
3919b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3920b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
3921b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
3922b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3923b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w0(r1));
3924b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_w1(r2));
3925b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_COMPARE, op1, op2);
3926b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3927b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "chlr";
3928b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3929b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3930b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3931b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CHF(UChar r1, IRTemp op2addr)
3932b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3933b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
3934b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
3935b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3936b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w0(r1));
3937b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I32, mkexpr(op2addr)));
3938b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_COMPARE, op1, op2);
3939b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3940b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "chf";
3941b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3942b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3943b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3944b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CIH(UChar r1, UInt i2)
3945b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3946b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
3947b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   Int op2;
3948b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3949b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w0(r1));
3950b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op2 = (Int)i2;
3951b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_COMPARE, op1, mktemp(Ity_I32,
3952b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                       mkU32((UInt)op2)));
3953b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3954b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "cih";
3955b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3956b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3957b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3958b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CLR(UChar r1, UChar r2)
3959b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3960b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
3961b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
3962b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3963b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1));
3964b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_w1(r2));
3965b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_COMPARE, op1, op2);
3966b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3967b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "clr";
3968b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3969b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3970b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3971b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CLGR(UChar r1, UChar r2)
3972b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3973b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
3974b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
3975b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3976b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_dw0(r1));
3977b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_dw0(r2));
3978b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_COMPARE, op1, op2);
3979b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3980b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "clgr";
3981b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3982b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3983b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3984b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CLGFR(UChar r1, UChar r2)
3985b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3986b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
3987b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
3988b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3989b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_dw0(r1));
3990b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, unop(Iop_32Uto64, get_gpr_w1(r2)));
3991b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_COMPARE, op1, op2);
3992b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3993b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "clgfr";
3994b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
3995b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
3996b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
3997b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CL(UChar r1, IRTemp op2addr)
3998b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
3999b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
4000b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
4001b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4002b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1));
4003b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I32, mkexpr(op2addr)));
4004b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_COMPARE, op1, op2);
4005b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4006b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "cl";
4007b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4008b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4009b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
4010b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CLY(UChar r1, IRTemp op2addr)
4011b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4012b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
4013b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
4014b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4015b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1));
4016b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I32, mkexpr(op2addr)));
4017b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_COMPARE, op1, op2);
4018b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4019b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "cly";
4020b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4021b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4022b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
4023b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CLG(UChar r1, IRTemp op2addr)
4024b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4025b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
4026b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
4027b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4028b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_dw0(r1));
4029b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I64, mkexpr(op2addr)));
4030b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_COMPARE, op1, op2);
4031b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4032b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "clg";
4033b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4034b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4035b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
4036b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CLGF(UChar r1, IRTemp op2addr)
4037b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4038b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
4039b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
4040b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4041b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_dw0(r1));
4042b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, unop(Iop_32Uto64, load(Ity_I32, mkexpr(op2addr))));
4043b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_COMPARE, op1, op2);
4044b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4045b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "clgf";
4046b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4047b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4048b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
4049b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CLFI(UChar r1, UInt i2)
4050b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4051b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
4052b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UInt op2;
4053b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4054b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1));
4055b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op2 = i2;
4056b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_COMPARE, op1, mktemp(Ity_I32,
4057b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                       mkU32(op2)));
4058b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4059b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "clfi";
4060b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4061b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4062b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
4063b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CLGFI(UChar r1, UInt i2)
4064b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4065b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
4066b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   ULong op2;
4067b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4068b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_dw0(r1));
4069b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op2 = (ULong)i2;
4070b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_COMPARE, op1, mktemp(Ity_I64,
4071b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                       mkU64(op2)));
4072b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4073b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "clgfi";
4074b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4075b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4076b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
4077b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CLI(UChar i2, IRTemp op1addr)
4078b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4079b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I8);
4080b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UChar op2;
4081b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4082b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, load(Ity_I8, mkexpr(op1addr)));
4083b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op2 = i2;
4084b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_COMPARE, op1, mktemp(Ity_I8,
4085b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                       mkU8(op2)));
4086b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4087b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "cli";
4088b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4089b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4090b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
4091b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CLIY(UChar i2, IRTemp op1addr)
4092b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4093b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I8);
4094b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UChar op2;
4095b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4096b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, load(Ity_I8, mkexpr(op1addr)));
4097b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op2 = i2;
4098b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_COMPARE, op1, mktemp(Ity_I8,
4099b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                       mkU8(op2)));
4100b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4101b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "cliy";
4102b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4103b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4104b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
4105b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CLFHSI(UShort i2, IRTemp op1addr)
4106b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4107b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
4108b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UInt op2;
4109b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4110b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, load(Ity_I32, mkexpr(op1addr)));
4111b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op2 = (UInt)i2;
4112b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_COMPARE, op1, mktemp(Ity_I32,
4113b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                       mkU32(op2)));
4114b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4115b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "clfhsi";
4116b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4117b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4118b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
4119b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CLGHSI(UShort i2, IRTemp op1addr)
4120b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4121b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
4122b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   ULong op2;
4123b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4124b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, load(Ity_I64, mkexpr(op1addr)));
4125b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op2 = (ULong)i2;
4126b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_COMPARE, op1, mktemp(Ity_I64,
4127b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                       mkU64(op2)));
4128b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4129b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "clghsi";
4130b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4131b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4132b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
4133b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CLHHSI(UShort i2, IRTemp op1addr)
4134b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4135b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I16);
4136b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UShort op2;
4137b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4138b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, load(Ity_I16, mkexpr(op1addr)));
4139b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op2 = i2;
4140b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_COMPARE, op1, mktemp(Ity_I16,
4141b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                       mkU16(op2)));
4142b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4143b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "clhhsi";
4144b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4145b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4146b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
4147b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CLRL(UChar r1, UInt i2)
4148b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4149b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
4150b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
4151b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4152b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1));
4153b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I32, mkU64(guest_IA_curr_instr + ((ULong)(Long)(Int)
4154b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          i2 << 1))));
4155b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_COMPARE, op1, op2);
4156b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4157b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "clrl";
4158b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4159b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4160b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
4161b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CLGRL(UChar r1, UInt i2)
4162b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4163b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
4164b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
4165b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4166b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_dw0(r1));
4167b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I64, mkU64(guest_IA_curr_instr + ((ULong)(Long)(Int)
4168b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          i2 << 1))));
4169b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_COMPARE, op1, op2);
4170b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4171b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "clgrl";
4172b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4173b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4174b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
4175b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CLGFRL(UChar r1, UInt i2)
4176b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4177b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
4178b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
4179b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4180b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_dw0(r1));
4181b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, unop(Iop_32Uto64, load(Ity_I32, mkU64(guest_IA_curr_instr +
4182b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          ((ULong)(Long)(Int)i2 << 1)))));
4183b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_COMPARE, op1, op2);
4184b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4185b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "clgfrl";
4186b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4187b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4188b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
4189b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CLHRL(UChar r1, UInt i2)
4190b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4191b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
4192b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
4193b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4194b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1));
4195b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, unop(Iop_16Uto32, load(Ity_I16, mkU64(guest_IA_curr_instr +
4196b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          ((ULong)(Long)(Int)i2 << 1)))));
4197b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_COMPARE, op1, op2);
4198b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4199b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "clhrl";
4200b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4201b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4202b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
4203b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CLGHRL(UChar r1, UInt i2)
4204b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4205b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
4206b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
4207b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4208b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_dw0(r1));
4209b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, unop(Iop_16Uto64, load(Ity_I16, mkU64(guest_IA_curr_instr +
4210b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          ((ULong)(Long)(Int)i2 << 1)))));
4211b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_COMPARE, op1, op2);
4212b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4213b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "clghrl";
4214b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4215b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4216b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
4217b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CLRB(UChar r1, UChar r2, UChar m3, IRTemp op4addr)
4218b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4219b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
4220b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
4221b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp icc = newTemp(Ity_I32);
4222b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp cond = newTemp(Ity_I32);
4223b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4224b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (m3 == 0) {
4225b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } else {
4226b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      if (m3 == 14) {
4227b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         always_goto(mkexpr(op4addr));
4228b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      } else {
4229b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(op1, get_gpr_w1(r1));
4230b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(op2, get_gpr_w1(r2));
4231b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(icc, s390_call_calculate_iccZZ(S390_CC_OP_UNSIGNED_COMPARE, op1,
4232b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                op2));
4233b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(cond, binop(Iop_And32, binop(Iop_Shl32, mkU32(m3),
4234b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                unop(Iop_32to8, mkexpr(icc))), mkU32(8)));
4235b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         if_not_condition_goto_computed(binop(Iop_CmpEQ32, mkexpr(cond),
4236b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                        mkU32(0)), mkexpr(op4addr));
4237b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      }
4238b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
4239b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4240b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "clrb";
4241b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4242b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4243b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
4244b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CLGRB(UChar r1, UChar r2, UChar m3, IRTemp op4addr)
4245b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4246b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
4247b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
4248b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp icc = newTemp(Ity_I32);
4249b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp cond = newTemp(Ity_I32);
4250b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4251b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (m3 == 0) {
4252b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } else {
4253b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      if (m3 == 14) {
4254b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         always_goto(mkexpr(op4addr));
4255b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      } else {
4256b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(op1, get_gpr_dw0(r1));
4257b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(op2, get_gpr_dw0(r2));
4258b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(icc, s390_call_calculate_iccZZ(S390_CC_OP_UNSIGNED_COMPARE, op1,
4259b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                op2));
4260b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(cond, binop(Iop_And32, binop(Iop_Shl32, mkU32(m3),
4261b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                unop(Iop_32to8, mkexpr(icc))), mkU32(8)));
4262b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         if_not_condition_goto_computed(binop(Iop_CmpEQ32, mkexpr(cond),
4263b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                        mkU32(0)), mkexpr(op4addr));
4264b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      }
4265b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
4266b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4267b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "clgrb";
4268b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4269b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4270b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
4271b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CLRJ(UChar r1, UChar r2, UShort i4, UChar m3)
4272b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4273b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
4274b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
4275b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp icc = newTemp(Ity_I32);
4276b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp cond = newTemp(Ity_I32);
4277b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4278b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (m3 == 0) {
4279b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } else {
4280b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      if (m3 == 14) {
4281b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         always_goto_and_chase(guest_IA_curr_instr + ((ULong)(Long)(Short)i4 << 1));
4282b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      } else {
4283b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(op1, get_gpr_w1(r1));
4284b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(op2, get_gpr_w1(r2));
4285b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(icc, s390_call_calculate_iccZZ(S390_CC_OP_UNSIGNED_COMPARE, op1,
4286b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                op2));
4287b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(cond, binop(Iop_And32, binop(Iop_Shl32, mkU32(m3),
4288b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                unop(Iop_32to8, mkexpr(icc))), mkU32(8)));
4289b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         if_condition_goto(binop(Iop_CmpNE32, mkexpr(cond), mkU32(0)),
4290b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                           guest_IA_curr_instr + ((ULong)(Long)(Short)i4 << 1));
4291b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4292b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      }
4293b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
4294b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4295b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "clrj";
4296b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4297b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4298b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
4299b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CLGRJ(UChar r1, UChar r2, UShort i4, UChar m3)
4300b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4301b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
4302b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
4303b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp icc = newTemp(Ity_I32);
4304b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp cond = newTemp(Ity_I32);
4305b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4306b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (m3 == 0) {
4307b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } else {
4308b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      if (m3 == 14) {
4309b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         always_goto_and_chase(guest_IA_curr_instr + ((ULong)(Long)(Short)i4 << 1));
4310b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      } else {
4311b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(op1, get_gpr_dw0(r1));
4312b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(op2, get_gpr_dw0(r2));
4313b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(icc, s390_call_calculate_iccZZ(S390_CC_OP_UNSIGNED_COMPARE, op1,
4314b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                op2));
4315b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(cond, binop(Iop_And32, binop(Iop_Shl32, mkU32(m3),
4316b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                unop(Iop_32to8, mkexpr(icc))), mkU32(8)));
4317b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         if_condition_goto(binop(Iop_CmpNE32, mkexpr(cond), mkU32(0)),
4318b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                           guest_IA_curr_instr + ((ULong)(Long)(Short)i4 << 1));
4319b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4320b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      }
4321b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
4322b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4323b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "clgrj";
4324b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4325b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4326b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
4327b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CLIB(UChar r1, UChar m3, UChar i2, IRTemp op4addr)
4328b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4329b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
4330b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UInt op2;
4331b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp icc = newTemp(Ity_I32);
4332b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp cond = newTemp(Ity_I32);
4333b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4334b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (m3 == 0) {
4335b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } else {
4336b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      if (m3 == 14) {
4337b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         always_goto(mkexpr(op4addr));
4338b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      } else {
4339b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(op1, get_gpr_w1(r1));
4340b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         op2 = (UInt)i2;
4341b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(icc, s390_call_calculate_iccZZ(S390_CC_OP_UNSIGNED_COMPARE, op1,
4342b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                mktemp(Ity_I32, mkU32(op2))));
4343b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(cond, binop(Iop_And32, binop(Iop_Shl32, mkU32(m3),
4344b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                unop(Iop_32to8, mkexpr(icc))), mkU32(8)));
4345b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         if_not_condition_goto_computed(binop(Iop_CmpEQ32, mkexpr(cond),
4346b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                        mkU32(0)), mkexpr(op4addr));
4347b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      }
4348b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
4349b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4350b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "clib";
4351b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4352b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4353b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
4354b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CLGIB(UChar r1, UChar m3, UChar i2, IRTemp op4addr)
4355b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4356b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
4357b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   ULong op2;
4358b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp icc = newTemp(Ity_I32);
4359b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp cond = newTemp(Ity_I32);
4360b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4361b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (m3 == 0) {
4362b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } else {
4363b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      if (m3 == 14) {
4364b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         always_goto(mkexpr(op4addr));
4365b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      } else {
4366b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(op1, get_gpr_dw0(r1));
4367b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         op2 = (ULong)i2;
4368b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(icc, s390_call_calculate_iccZZ(S390_CC_OP_UNSIGNED_COMPARE, op1,
4369b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                mktemp(Ity_I64, mkU64(op2))));
4370b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(cond, binop(Iop_And32, binop(Iop_Shl32, mkU32(m3),
4371b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                unop(Iop_32to8, mkexpr(icc))), mkU32(8)));
4372b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         if_not_condition_goto_computed(binop(Iop_CmpEQ32, mkexpr(cond),
4373b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                        mkU32(0)), mkexpr(op4addr));
4374b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      }
4375b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
4376b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4377b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "clgib";
4378b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4379b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4380b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
4381b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CLIJ(UChar r1, UChar m3, UShort i4, UChar i2)
4382b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4383b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
4384b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UInt op2;
4385b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp icc = newTemp(Ity_I32);
4386b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp cond = newTemp(Ity_I32);
4387b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4388b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (m3 == 0) {
4389b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } else {
4390b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      if (m3 == 14) {
4391b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         always_goto_and_chase(guest_IA_curr_instr + ((ULong)(Long)(Short)i4 << 1));
4392b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      } else {
4393b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(op1, get_gpr_w1(r1));
4394b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         op2 = (UInt)i2;
4395b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(icc, s390_call_calculate_iccZZ(S390_CC_OP_UNSIGNED_COMPARE, op1,
4396b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                mktemp(Ity_I32, mkU32(op2))));
4397b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(cond, binop(Iop_And32, binop(Iop_Shl32, mkU32(m3),
4398b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                unop(Iop_32to8, mkexpr(icc))), mkU32(8)));
4399b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         if_condition_goto(binop(Iop_CmpNE32, mkexpr(cond), mkU32(0)),
4400b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                           guest_IA_curr_instr + ((ULong)(Long)(Short)i4 << 1));
4401b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4402b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      }
4403b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
4404b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4405b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "clij";
4406b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4407b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4408b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
4409b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CLGIJ(UChar r1, UChar m3, UShort i4, UChar i2)
4410b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4411b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
4412b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   ULong op2;
4413b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp icc = newTemp(Ity_I32);
4414b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp cond = newTemp(Ity_I32);
4415b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4416b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (m3 == 0) {
4417b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } else {
4418b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      if (m3 == 14) {
4419b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         always_goto_and_chase(guest_IA_curr_instr + ((ULong)(Long)(Short)i4 << 1));
4420b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      } else {
4421b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(op1, get_gpr_dw0(r1));
4422b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         op2 = (ULong)i2;
4423b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(icc, s390_call_calculate_iccZZ(S390_CC_OP_UNSIGNED_COMPARE, op1,
4424b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                mktemp(Ity_I64, mkU64(op2))));
4425b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(cond, binop(Iop_And32, binop(Iop_Shl32, mkU32(m3),
4426b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                unop(Iop_32to8, mkexpr(icc))), mkU32(8)));
4427b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         if_condition_goto(binop(Iop_CmpNE32, mkexpr(cond), mkU32(0)),
4428b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                           guest_IA_curr_instr + ((ULong)(Long)(Short)i4 << 1));
4429b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4430b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      }
4431b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
4432b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4433b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "clgij";
4434b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4435b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4436b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
4437b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CLM(UChar r1, UChar r3, IRTemp op2addr)
4438b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4439b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
4440b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
4441b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp b0 = newTemp(Ity_I32);
4442b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp b1 = newTemp(Ity_I32);
4443b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp b2 = newTemp(Ity_I32);
4444b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp b3 = newTemp(Ity_I32);
4445b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp c0 = newTemp(Ity_I32);
4446b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp c1 = newTemp(Ity_I32);
4447b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp c2 = newTemp(Ity_I32);
4448b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp c3 = newTemp(Ity_I32);
4449b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UChar n;
4450b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4451b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   n = 0;
4452b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if ((r3 & 8) != 0) {
4453b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(b0, unop(Iop_8Uto32, get_gpr_b4(r1)));
4454b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(c0, unop(Iop_8Uto32, load(Ity_I8, mkexpr(op2addr))));
4455b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      n = n + 1;
4456b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } else {
4457b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(b0, mkU32(0));
4458b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(c0, mkU32(0));
4459b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
4460b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if ((r3 & 4) != 0) {
4461b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(b1, unop(Iop_8Uto32, get_gpr_b5(r1)));
4462b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(c1, unop(Iop_8Uto32, load(Ity_I8, binop(Iop_Add64, mkexpr(op2addr),
4463b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov             mkU64(n)))));
4464b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      n = n + 1;
4465b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } else {
4466b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(b1, mkU32(0));
4467b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(c1, mkU32(0));
4468b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
4469b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if ((r3 & 2) != 0) {
4470b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(b2, unop(Iop_8Uto32, get_gpr_b6(r1)));
4471b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(c2, unop(Iop_8Uto32, load(Ity_I8, binop(Iop_Add64, mkexpr(op2addr),
4472b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov             mkU64(n)))));
4473b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      n = n + 1;
4474b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } else {
4475b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(b2, mkU32(0));
4476b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(c2, mkU32(0));
4477b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
4478b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if ((r3 & 1) != 0) {
4479b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(b3, unop(Iop_8Uto32, get_gpr_b7(r1)));
4480b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(c3, unop(Iop_8Uto32, load(Ity_I8, binop(Iop_Add64, mkexpr(op2addr),
4481b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov             mkU64(n)))));
4482b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      n = n + 1;
4483b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } else {
4484b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(b3, mkU32(0));
4485b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(c3, mkU32(0));
4486b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
4487b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, binop(Iop_Or32, binop(Iop_Or32, binop(Iop_Or32, binop(Iop_Shl32,
4488b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkexpr(b0), mkU8(24)), binop(Iop_Shl32, mkexpr(b1), mkU8(16))),
4489b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          binop(Iop_Shl32, mkexpr(b2), mkU8(8))), mkexpr(b3)));
4490b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, binop(Iop_Or32, binop(Iop_Or32, binop(Iop_Or32, binop(Iop_Shl32,
4491b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkexpr(c0), mkU8(24)), binop(Iop_Shl32, mkexpr(c1), mkU8(16))),
4492b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          binop(Iop_Shl32, mkexpr(c2), mkU8(8))), mkexpr(c3)));
4493b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_COMPARE, op1, op2);
4494b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4495b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "clm";
4496b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4497b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4498b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
4499b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CLMY(UChar r1, UChar r3, IRTemp op2addr)
4500b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4501b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
4502b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
4503b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp b0 = newTemp(Ity_I32);
4504b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp b1 = newTemp(Ity_I32);
4505b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp b2 = newTemp(Ity_I32);
4506b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp b3 = newTemp(Ity_I32);
4507b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp c0 = newTemp(Ity_I32);
4508b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp c1 = newTemp(Ity_I32);
4509b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp c2 = newTemp(Ity_I32);
4510b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp c3 = newTemp(Ity_I32);
4511b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UChar n;
4512b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4513b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   n = 0;
4514b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if ((r3 & 8) != 0) {
4515b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(b0, unop(Iop_8Uto32, get_gpr_b4(r1)));
4516b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(c0, unop(Iop_8Uto32, load(Ity_I8, mkexpr(op2addr))));
4517b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      n = n + 1;
4518b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } else {
4519b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(b0, mkU32(0));
4520b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(c0, mkU32(0));
4521b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
4522b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if ((r3 & 4) != 0) {
4523b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(b1, unop(Iop_8Uto32, get_gpr_b5(r1)));
4524b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(c1, unop(Iop_8Uto32, load(Ity_I8, binop(Iop_Add64, mkexpr(op2addr),
4525b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov             mkU64(n)))));
4526b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      n = n + 1;
4527b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } else {
4528b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(b1, mkU32(0));
4529b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(c1, mkU32(0));
4530b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
4531b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if ((r3 & 2) != 0) {
4532b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(b2, unop(Iop_8Uto32, get_gpr_b6(r1)));
4533b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(c2, unop(Iop_8Uto32, load(Ity_I8, binop(Iop_Add64, mkexpr(op2addr),
4534b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov             mkU64(n)))));
4535b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      n = n + 1;
4536b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } else {
4537b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(b2, mkU32(0));
4538b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(c2, mkU32(0));
4539b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
4540b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if ((r3 & 1) != 0) {
4541b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(b3, unop(Iop_8Uto32, get_gpr_b7(r1)));
4542b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(c3, unop(Iop_8Uto32, load(Ity_I8, binop(Iop_Add64, mkexpr(op2addr),
4543b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov             mkU64(n)))));
4544b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      n = n + 1;
4545b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } else {
4546b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(b3, mkU32(0));
4547b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(c3, mkU32(0));
4548b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
4549b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, binop(Iop_Or32, binop(Iop_Or32, binop(Iop_Or32, binop(Iop_Shl32,
4550b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkexpr(b0), mkU8(24)), binop(Iop_Shl32, mkexpr(b1), mkU8(16))),
4551b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          binop(Iop_Shl32, mkexpr(b2), mkU8(8))), mkexpr(b3)));
4552b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, binop(Iop_Or32, binop(Iop_Or32, binop(Iop_Or32, binop(Iop_Shl32,
4553b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkexpr(c0), mkU8(24)), binop(Iop_Shl32, mkexpr(c1), mkU8(16))),
4554b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          binop(Iop_Shl32, mkexpr(c2), mkU8(8))), mkexpr(c3)));
4555b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_COMPARE, op1, op2);
4556b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4557b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "clmy";
4558b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4559b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4560b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
4561b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CLMH(UChar r1, UChar r3, IRTemp op2addr)
4562b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4563b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
4564b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
4565b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp b0 = newTemp(Ity_I32);
4566b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp b1 = newTemp(Ity_I32);
4567b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp b2 = newTemp(Ity_I32);
4568b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp b3 = newTemp(Ity_I32);
4569b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp c0 = newTemp(Ity_I32);
4570b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp c1 = newTemp(Ity_I32);
4571b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp c2 = newTemp(Ity_I32);
4572b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp c3 = newTemp(Ity_I32);
4573b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UChar n;
4574b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4575b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   n = 0;
4576b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if ((r3 & 8) != 0) {
4577b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(b0, unop(Iop_8Uto32, get_gpr_b0(r1)));
4578b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(c0, unop(Iop_8Uto32, load(Ity_I8, mkexpr(op2addr))));
4579b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      n = n + 1;
4580b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } else {
4581b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(b0, mkU32(0));
4582b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(c0, mkU32(0));
4583b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
4584b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if ((r3 & 4) != 0) {
4585b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(b1, unop(Iop_8Uto32, get_gpr_b1(r1)));
4586b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(c1, unop(Iop_8Uto32, load(Ity_I8, binop(Iop_Add64, mkexpr(op2addr),
4587b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov             mkU64(n)))));
4588b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      n = n + 1;
4589b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } else {
4590b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(b1, mkU32(0));
4591b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(c1, mkU32(0));
4592b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
4593b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if ((r3 & 2) != 0) {
4594b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(b2, unop(Iop_8Uto32, get_gpr_b2(r1)));
4595b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(c2, unop(Iop_8Uto32, load(Ity_I8, binop(Iop_Add64, mkexpr(op2addr),
4596b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov             mkU64(n)))));
4597b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      n = n + 1;
4598b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } else {
4599b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(b2, mkU32(0));
4600b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(c2, mkU32(0));
4601b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
4602b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if ((r3 & 1) != 0) {
4603b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(b3, unop(Iop_8Uto32, get_gpr_b3(r1)));
4604b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(c3, unop(Iop_8Uto32, load(Ity_I8, binop(Iop_Add64, mkexpr(op2addr),
4605b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov             mkU64(n)))));
4606b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      n = n + 1;
4607b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } else {
4608b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(b3, mkU32(0));
4609b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(c3, mkU32(0));
4610b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
4611b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, binop(Iop_Or32, binop(Iop_Or32, binop(Iop_Or32, binop(Iop_Shl32,
4612b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkexpr(b0), mkU8(24)), binop(Iop_Shl32, mkexpr(b1), mkU8(16))),
4613b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          binop(Iop_Shl32, mkexpr(b2), mkU8(8))), mkexpr(b3)));
4614b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, binop(Iop_Or32, binop(Iop_Or32, binop(Iop_Or32, binop(Iop_Shl32,
4615b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkexpr(c0), mkU8(24)), binop(Iop_Shl32, mkexpr(c1), mkU8(16))),
4616b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          binop(Iop_Shl32, mkexpr(c2), mkU8(8))), mkexpr(c3)));
4617b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_COMPARE, op1, op2);
4618b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4619b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "clmh";
4620b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4621b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4622b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
4623b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CLHHR(UChar r1, UChar r2)
4624b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4625b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
4626b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
4627b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4628b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w0(r1));
4629b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_w0(r2));
4630b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_COMPARE, op1, op2);
4631b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4632b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "clhhr";
4633b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4634b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4635b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
4636b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CLHLR(UChar r1, UChar r2)
4637b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4638b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
4639b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
4640b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4641b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w0(r1));
4642b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_w1(r2));
4643b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_COMPARE, op1, op2);
4644b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4645b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "clhlr";
4646b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4647b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4648b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
4649b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CLHF(UChar r1, IRTemp op2addr)
4650b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4651b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
4652b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
4653b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4654b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w0(r1));
4655b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I32, mkexpr(op2addr)));
4656b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_COMPARE, op1, op2);
4657b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4658b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "clhf";
4659b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4660b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4661b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
4662b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CLIH(UChar r1, UInt i2)
4663b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4664b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
4665b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UInt op2;
4666b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4667b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w0(r1));
4668b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op2 = i2;
4669b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_COMPARE, op1, mktemp(Ity_I32,
4670b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                       mkU32(op2)));
4671b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4672b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "clih";
4673b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4674b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4675b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
4676b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CPYA(UChar r1, UChar r2)
4677b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4678b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_ar_w0(r1, get_ar_w0(r2));
4679b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
4680b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC3(MNM, AR, AR), "cpya", r1, r2);
4681b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4682b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "cpya";
4683b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4684b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4685b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
4686b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_XR(UChar r1, UChar r2)
4687b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4688b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
4689b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
4690b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
4691b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4692b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (r1 == r2) {
4693b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(result, mkU32(0));
4694b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } else {
4695b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(op1, get_gpr_w1(r1));
4696b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(op2, get_gpr_w1(r2));
4697b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(result, binop(Iop_Xor32, mkexpr(op1), mkexpr(op2)));
4698b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
4699b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result);
4700b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(result));
4701b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4702b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "xr";
4703b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4704b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4705b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
4706b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_XGR(UChar r1, UChar r2)
4707b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4708b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
4709b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
4710b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
4711b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4712b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (r1 == r2) {
4713b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(result, mkU64(0));
4714b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } else {
4715b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(op1, get_gpr_dw0(r1));
4716b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(op2, get_gpr_dw0(r2));
4717b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(result, binop(Iop_Xor64, mkexpr(op1), mkexpr(op2)));
4718b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
4719b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result);
4720b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(result));
4721b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4722b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "xgr";
4723b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4724b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4725b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
4726b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_XRK(UChar r3, UChar r1, UChar r2)
4727b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4728b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
4729b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op3 = newTemp(Ity_I32);
4730b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
4731b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4732b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_w1(r2));
4733b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op3, get_gpr_w1(r3));
4734b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Xor32, mkexpr(op2), mkexpr(op3)));
4735b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result);
4736b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(result));
4737b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4738b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "xrk";
4739b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4740b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4741b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
4742b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_XGRK(UChar r3, UChar r1, UChar r2)
4743b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4744b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
4745b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op3 = newTemp(Ity_I64);
4746b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
4747b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4748b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_dw0(r2));
4749b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op3, get_gpr_dw0(r3));
4750b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Xor64, mkexpr(op2), mkexpr(op3)));
4751b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result);
4752b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(result));
4753b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4754b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "xgrk";
4755b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4756b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4757b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
4758b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_X(UChar r1, IRTemp op2addr)
4759b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4760b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
4761b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
4762b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
4763b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4764b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1));
4765b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I32, mkexpr(op2addr)));
4766b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Xor32, mkexpr(op1), mkexpr(op2)));
4767b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result);
4768b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(result));
4769b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4770b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "x";
4771b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4772b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4773b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
4774b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_XY(UChar r1, IRTemp op2addr)
4775b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4776b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
4777b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
4778b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
4779b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4780b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1));
4781b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I32, mkexpr(op2addr)));
4782b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Xor32, mkexpr(op1), mkexpr(op2)));
4783b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result);
4784b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(result));
4785b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4786b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "xy";
4787b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4788b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4789b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
4790b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_XG(UChar r1, IRTemp op2addr)
4791b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4792b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
4793b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
4794b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
4795b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4796b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_dw0(r1));
4797b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I64, mkexpr(op2addr)));
4798b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Xor64, mkexpr(op1), mkexpr(op2)));
4799b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result);
4800b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(result));
4801b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4802b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "xg";
4803b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4804b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4805b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
4806b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_XI(UChar i2, IRTemp op1addr)
4807b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4808b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I8);
4809b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UChar op2;
4810b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I8);
4811b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4812b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, load(Ity_I8, mkexpr(op1addr)));
4813b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op2 = i2;
4814b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Xor8, mkexpr(op1), mkU8(op2)));
4815b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result);
4816b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(mkexpr(op1addr), mkexpr(result));
4817b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4818b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "xi";
4819b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4820b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4821b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
4822b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_XIY(UChar i2, IRTemp op1addr)
4823b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4824b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I8);
4825b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UChar op2;
4826b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I8);
4827b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4828b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, load(Ity_I8, mkexpr(op1addr)));
4829b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op2 = i2;
4830b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Xor8, mkexpr(op1), mkU8(op2)));
4831b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result);
4832b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(mkexpr(op1addr), mkexpr(result));
4833b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4834b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "xiy";
4835b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4836b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4837b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
4838b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_XIHF(UChar r1, UInt i2)
4839b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4840b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
4841b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UInt op2;
4842b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
4843b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4844b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w0(r1));
4845b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op2 = i2;
4846b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Xor32, mkexpr(op1), mkU32(op2)));
4847b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result);
4848b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w0(r1, mkexpr(result));
4849b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4850b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "xihf";
4851b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4852b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4853b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
4854b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_XILF(UChar r1, UInt i2)
4855b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4856b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
4857b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UInt op2;
4858b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
4859b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4860b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1));
4861b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op2 = i2;
4862b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Xor32, mkexpr(op1), mkU32(op2)));
4863b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result);
4864b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(result));
4865b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4866b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "xilf";
4867b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4868b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4869b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
4870b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_EAR(UChar r1, UChar r2)
4871b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4872b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, get_ar_w0(r2));
4873b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
4874b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC3(MNM, GPR, AR), "ear", r1, r2);
4875b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4876b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "ear";
4877b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4878b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4879b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
4880b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_IC(UChar r1, IRTemp op2addr)
4881b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4882b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_b7(r1, load(Ity_I8, mkexpr(op2addr)));
4883b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4884b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "ic";
4885b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4886b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4887b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
4888b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_ICY(UChar r1, IRTemp op2addr)
4889b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4890b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_b7(r1, load(Ity_I8, mkexpr(op2addr)));
4891b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4892b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "icy";
4893b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4894b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4895b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
4896b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_ICM(UChar r1, UChar r3, IRTemp op2addr)
4897b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4898b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UChar n;
4899b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
4900b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UInt mask;
4901b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4902b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   n = 0;
4903b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   mask = (UInt)r3;
4904b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if ((mask & 8) != 0) {
4905b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      put_gpr_b4(r1, load(Ity_I8, mkexpr(op2addr)));
4906b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      n = n + 1;
4907b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
4908b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if ((mask & 4) != 0) {
4909b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      put_gpr_b5(r1, load(Ity_I8, binop(Iop_Add64, mkexpr(op2addr), mkU64(n))));
4910b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4911b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      n = n + 1;
4912b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
4913b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if ((mask & 2) != 0) {
4914b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      put_gpr_b6(r1, load(Ity_I8, binop(Iop_Add64, mkexpr(op2addr), mkU64(n))));
4915b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4916b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      n = n + 1;
4917b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
4918b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if ((mask & 1) != 0) {
4919b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      put_gpr_b7(r1, load(Ity_I8, binop(Iop_Add64, mkexpr(op2addr), mkU64(n))));
4920b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4921b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      n = n + 1;
4922b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
4923b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, get_gpr_w1(r1));
4924b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_INSERT_CHAR_MASK_32, result, mktemp(Ity_I32,
4925b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                       mkU32(mask)));
4926b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4927b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "icm";
4928b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4929b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4930b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
4931b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_ICMY(UChar r1, UChar r3, IRTemp op2addr)
4932b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4933b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UChar n;
4934b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
4935b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UInt mask;
4936b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4937b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   n = 0;
4938b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   mask = (UInt)r3;
4939b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if ((mask & 8) != 0) {
4940b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      put_gpr_b4(r1, load(Ity_I8, mkexpr(op2addr)));
4941b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      n = n + 1;
4942b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
4943b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if ((mask & 4) != 0) {
4944b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      put_gpr_b5(r1, load(Ity_I8, binop(Iop_Add64, mkexpr(op2addr), mkU64(n))));
4945b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4946b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      n = n + 1;
4947b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
4948b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if ((mask & 2) != 0) {
4949b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      put_gpr_b6(r1, load(Ity_I8, binop(Iop_Add64, mkexpr(op2addr), mkU64(n))));
4950b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4951b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      n = n + 1;
4952b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
4953b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if ((mask & 1) != 0) {
4954b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      put_gpr_b7(r1, load(Ity_I8, binop(Iop_Add64, mkexpr(op2addr), mkU64(n))));
4955b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4956b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      n = n + 1;
4957b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
4958b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, get_gpr_w1(r1));
4959b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_INSERT_CHAR_MASK_32, result, mktemp(Ity_I32,
4960b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                       mkU32(mask)));
4961b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4962b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "icmy";
4963b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4964b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4965b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
4966b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_ICMH(UChar r1, UChar r3, IRTemp op2addr)
4967b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
4968b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UChar n;
4969b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
4970b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UInt mask;
4971b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4972b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   n = 0;
4973b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   mask = (UInt)r3;
4974b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if ((mask & 8) != 0) {
4975b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      put_gpr_b0(r1, load(Ity_I8, mkexpr(op2addr)));
4976b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      n = n + 1;
4977b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
4978b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if ((mask & 4) != 0) {
4979b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      put_gpr_b1(r1, load(Ity_I8, binop(Iop_Add64, mkexpr(op2addr), mkU64(n))));
4980b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4981b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      n = n + 1;
4982b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
4983b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if ((mask & 2) != 0) {
4984b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      put_gpr_b2(r1, load(Ity_I8, binop(Iop_Add64, mkexpr(op2addr), mkU64(n))));
4985b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4986b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      n = n + 1;
4987b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
4988b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if ((mask & 1) != 0) {
4989b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      put_gpr_b3(r1, load(Ity_I8, binop(Iop_Add64, mkexpr(op2addr), mkU64(n))));
4990b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4991b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      n = n + 1;
4992b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
4993b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, get_gpr_w0(r1));
4994b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_INSERT_CHAR_MASK_32, result, mktemp(Ity_I32,
4995b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                       mkU32(mask)));
4996b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4997b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "icmh";
4998b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
4999b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5000b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5001b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_IIHF(UChar r1, UInt i2)
5002b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5003b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w0(r1, mkU32(i2));
5004b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5005b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "iihf";
5006b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5007b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5008b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5009b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_IIHH(UChar r1, UShort i2)
5010b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5011b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_hw0(r1, mkU16(i2));
5012b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5013b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "iihh";
5014b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5015b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5016b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5017b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_IIHL(UChar r1, UShort i2)
5018b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5019b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_hw1(r1, mkU16(i2));
5020b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5021b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "iihl";
5022b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5023b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5024b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5025b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_IILF(UChar r1, UInt i2)
5026b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5027b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkU32(i2));
5028b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5029b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "iilf";
5030b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5031b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5032b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5033b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_IILH(UChar r1, UShort i2)
5034b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5035b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_hw2(r1, mkU16(i2));
5036b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5037b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "iilh";
5038b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5039b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5040b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5041b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_IILL(UChar r1, UShort i2)
5042b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5043b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_hw3(r1, mkU16(i2));
5044b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5045b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "iill";
5046b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5047b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5048b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5049b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LR(UChar r1, UChar r2)
5050b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5051b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, get_gpr_w1(r2));
5052b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5053b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lr";
5054b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5055b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5056b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5057b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LGR(UChar r1, UChar r2)
5058b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5059b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, get_gpr_dw0(r2));
5060b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5061b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lgr";
5062b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5063b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5064b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5065b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LGFR(UChar r1, UChar r2)
5066b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5067b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, unop(Iop_32Sto64, get_gpr_w1(r2)));
5068b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5069b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lgfr";
5070b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5071b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5072b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5073b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_L(UChar r1, IRTemp op2addr)
5074b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5075b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, load(Ity_I32, mkexpr(op2addr)));
5076b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5077b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "l";
5078b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5079b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5080b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5081b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LY(UChar r1, IRTemp op2addr)
5082b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5083b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, load(Ity_I32, mkexpr(op2addr)));
5084b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5085b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "ly";
5086b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5087b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5088b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5089b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LG(UChar r1, IRTemp op2addr)
5090b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5091b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, load(Ity_I64, mkexpr(op2addr)));
5092b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5093b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lg";
5094b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5095b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5096b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5097b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LGF(UChar r1, IRTemp op2addr)
5098b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5099b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, unop(Iop_32Sto64, load(Ity_I32, mkexpr(op2addr))));
5100b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5101b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lgf";
5102b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5103b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5104b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5105b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LGFI(UChar r1, UInt i2)
5106b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5107b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkU64((ULong)(Long)(Int)i2));
5108b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5109b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lgfi";
5110b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5111b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5112b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5113b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LRL(UChar r1, UInt i2)
5114b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5115b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, load(Ity_I32, mkU64(guest_IA_curr_instr + ((ULong)(Long)(Int)
5116b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov              i2 << 1))));
5117b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5118b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lrl";
5119b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5120b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5121b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5122b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LGRL(UChar r1, UInt i2)
5123b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5124b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, load(Ity_I64, mkU64(guest_IA_curr_instr + ((ULong)(Long)(Int)
5125b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov               i2 << 1))));
5126b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5127b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lgrl";
5128b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5129b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5130b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5131b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LGFRL(UChar r1, UInt i2)
5132b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5133b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, unop(Iop_32Sto64, load(Ity_I32, mkU64(guest_IA_curr_instr +
5134b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov               ((ULong)(Long)(Int)i2 << 1)))));
5135b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5136b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lgfrl";
5137b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5138b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5139b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5140b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LA(UChar r1, IRTemp op2addr)
5141b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5142b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(op2addr));
5143b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5144b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "la";
5145b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5146b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5147b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5148b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LAY(UChar r1, IRTemp op2addr)
5149b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5150b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(op2addr));
5151b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5152b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lay";
5153b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5154b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5155b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5156b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LAE(UChar r1, IRTemp op2addr)
5157b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5158b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(op2addr));
5159b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5160b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lae";
5161b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5162b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5163b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5164b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LAEY(UChar r1, IRTemp op2addr)
5165b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5166b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(op2addr));
5167b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5168b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "laey";
5169b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5170b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5171b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5172b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LARL(UChar r1, UInt i2)
5173b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5174b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkU64(guest_IA_curr_instr + ((ULong)(Long)(Int)i2 << 1)));
5175b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5176b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "larl";
5177b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5178b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5179b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5180b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LAA(UChar r1, UChar r3, IRTemp op2addr)
5181b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5182b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
5183b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op3 = newTemp(Ity_I32);
5184b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
5185b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5186b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I32, mkexpr(op2addr)));
5187b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op3, get_gpr_w1(r3));
5188b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Add32, mkexpr(op2), mkexpr(op3)));
5189b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_ADD_32, op2, op3);
5190b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(mkexpr(op2addr), mkexpr(result));
5191b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(op2));
5192b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5193b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "laa";
5194b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5195b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5196b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5197b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LAAG(UChar r1, UChar r3, IRTemp op2addr)
5198b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5199b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
5200b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op3 = newTemp(Ity_I64);
5201b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
5202b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5203b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I64, mkexpr(op2addr)));
5204b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op3, get_gpr_dw0(r3));
5205b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Add64, mkexpr(op2), mkexpr(op3)));
5206b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_ADD_64, op2, op3);
5207b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(mkexpr(op2addr), mkexpr(result));
5208b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(op2));
5209b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5210b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "laag";
5211b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5212b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5213b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5214b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LAAL(UChar r1, UChar r3, IRTemp op2addr)
5215b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5216b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
5217b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op3 = newTemp(Ity_I32);
5218b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
5219b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5220b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I32, mkexpr(op2addr)));
5221b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op3, get_gpr_w1(r3));
5222b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Add32, mkexpr(op2), mkexpr(op3)));
5223b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_ADD_32, op2, op3);
5224b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(mkexpr(op2addr), mkexpr(result));
5225b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(op2));
5226b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5227b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "laal";
5228b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5229b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5230b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5231b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LAALG(UChar r1, UChar r3, IRTemp op2addr)
5232b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5233b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
5234b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op3 = newTemp(Ity_I64);
5235b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
5236b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5237b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I64, mkexpr(op2addr)));
5238b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op3, get_gpr_dw0(r3));
5239b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Add64, mkexpr(op2), mkexpr(op3)));
5240b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_ADD_64, op2, op3);
5241b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(mkexpr(op2addr), mkexpr(result));
5242b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(op2));
5243b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5244b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "laalg";
5245b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5246b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5247b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5248b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LAN(UChar r1, UChar r3, IRTemp op2addr)
5249b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5250b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
5251b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op3 = newTemp(Ity_I32);
5252b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
5253b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5254b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I32, mkexpr(op2addr)));
5255b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op3, get_gpr_w1(r3));
5256b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_And32, mkexpr(op2), mkexpr(op3)));
5257b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result);
5258b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(mkexpr(op2addr), mkexpr(result));
5259b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(op2));
5260b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5261b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lan";
5262b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5263b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5264b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5265b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LANG(UChar r1, UChar r3, IRTemp op2addr)
5266b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5267b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
5268b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op3 = newTemp(Ity_I64);
5269b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
5270b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5271b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I64, mkexpr(op2addr)));
5272b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op3, get_gpr_dw0(r3));
5273b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_And64, mkexpr(op2), mkexpr(op3)));
5274b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result);
5275b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(mkexpr(op2addr), mkexpr(result));
5276b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(op2));
5277b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5278b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lang";
5279b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5280b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5281b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5282b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LAX(UChar r1, UChar r3, IRTemp op2addr)
5283b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5284b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
5285b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op3 = newTemp(Ity_I32);
5286b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
5287b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5288b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I32, mkexpr(op2addr)));
5289b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op3, get_gpr_w1(r3));
5290b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Xor32, mkexpr(op2), mkexpr(op3)));
5291b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result);
5292b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(mkexpr(op2addr), mkexpr(result));
5293b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(op2));
5294b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5295b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lax";
5296b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5297b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5298b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5299b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LAXG(UChar r1, UChar r3, IRTemp op2addr)
5300b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5301b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
5302b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op3 = newTemp(Ity_I64);
5303b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
5304b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5305b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I64, mkexpr(op2addr)));
5306b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op3, get_gpr_dw0(r3));
5307b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Xor64, mkexpr(op2), mkexpr(op3)));
5308b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result);
5309b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(mkexpr(op2addr), mkexpr(result));
5310b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(op2));
5311b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5312b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "laxg";
5313b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5314b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5315b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5316b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LAO(UChar r1, UChar r3, IRTemp op2addr)
5317b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5318b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
5319b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op3 = newTemp(Ity_I32);
5320b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
5321b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5322b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I32, mkexpr(op2addr)));
5323b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op3, get_gpr_w1(r3));
5324b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Or32, mkexpr(op2), mkexpr(op3)));
5325b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result);
5326b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(mkexpr(op2addr), mkexpr(result));
5327b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(op2));
5328b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5329b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lao";
5330b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5331b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5332b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5333b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LAOG(UChar r1, UChar r3, IRTemp op2addr)
5334b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5335b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
5336b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op3 = newTemp(Ity_I64);
5337b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
5338b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5339b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I64, mkexpr(op2addr)));
5340b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op3, get_gpr_dw0(r3));
5341b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Or64, mkexpr(op2), mkexpr(op3)));
5342b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result);
5343b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(mkexpr(op2addr), mkexpr(result));
5344b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(op2));
5345b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5346b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "laog";
5347b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5348b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5349b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5350b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LTR(UChar r1, UChar r2)
5351b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5352b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
5353b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5354b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_w1(r2));
5355b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(op2));
5356b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putS(S390_CC_OP_LOAD_AND_TEST, op2);
5357b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5358b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "ltr";
5359b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5360b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5361b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5362b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LTGR(UChar r1, UChar r2)
5363b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5364b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
5365b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5366b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_dw0(r2));
5367b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(op2));
5368b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putS(S390_CC_OP_LOAD_AND_TEST, op2);
5369b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5370b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "ltgr";
5371b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5372b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5373b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5374b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LTGFR(UChar r1, UChar r2)
5375b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5376b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
5377b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5378b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, unop(Iop_32Sto64, get_gpr_w1(r2)));
5379b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(op2));
5380b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putS(S390_CC_OP_LOAD_AND_TEST, op2);
5381b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5382b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "ltgfr";
5383b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5384b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5385b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5386b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LT(UChar r1, IRTemp op2addr)
5387b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5388b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
5389b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5390b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I32, mkexpr(op2addr)));
5391b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(op2));
5392b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putS(S390_CC_OP_LOAD_AND_TEST, op2);
5393b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5394b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lt";
5395b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5396b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5397b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5398b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LTG(UChar r1, IRTemp op2addr)
5399b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5400b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
5401b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5402b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I64, mkexpr(op2addr)));
5403b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(op2));
5404b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putS(S390_CC_OP_LOAD_AND_TEST, op2);
5405b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5406b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "ltg";
5407b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5408b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5409b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5410b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LTGF(UChar r1, IRTemp op2addr)
5411b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5412b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
5413b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5414b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, unop(Iop_32Sto64, load(Ity_I32, mkexpr(op2addr))));
5415b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(op2));
5416b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putS(S390_CC_OP_LOAD_AND_TEST, op2);
5417b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5418b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "ltgf";
5419b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5420b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5421b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5422b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LBR(UChar r1, UChar r2)
5423b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5424b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, unop(Iop_8Sto32, get_gpr_b7(r2)));
5425b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5426b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lbr";
5427b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5428b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5429b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5430b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LGBR(UChar r1, UChar r2)
5431b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5432b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, unop(Iop_8Sto64, get_gpr_b7(r2)));
5433b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5434b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lgbr";
5435b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5436b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5437b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5438b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LB(UChar r1, IRTemp op2addr)
5439b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5440b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, unop(Iop_8Sto32, load(Ity_I8, mkexpr(op2addr))));
5441b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5442b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lb";
5443b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5444b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5445b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5446b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LGB(UChar r1, IRTemp op2addr)
5447b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5448b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, unop(Iop_8Sto64, load(Ity_I8, mkexpr(op2addr))));
5449b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5450b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lgb";
5451b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5452b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5453b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5454b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LBH(UChar r1, IRTemp op2addr)
5455b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5456b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w0(r1, unop(Iop_8Sto32, load(Ity_I8, mkexpr(op2addr))));
5457b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5458b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lbh";
5459b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5460b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5461b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5462b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LCR(UChar r1, UChar r2)
5463b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5464b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   Int op1;
5465b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
5466b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
5467b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5468b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op1 = 0;
5469b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_w1(r2));
5470b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Sub32, mkU32((UInt)op1), mkexpr(op2)));
5471b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(result));
5472b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_SUB_32, mktemp(Ity_I32, mkU32((UInt)
5473b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                       op1)), op2);
5474b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5475b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lcr";
5476b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5477b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5478b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5479b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LCGR(UChar r1, UChar r2)
5480b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5481b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   Long op1;
5482b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
5483b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
5484b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5485b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op1 = 0ULL;
5486b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_dw0(r2));
5487b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Sub64, mkU64((ULong)op1), mkexpr(op2)));
5488b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(result));
5489b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_SUB_64, mktemp(Ity_I64, mkU64((ULong)
5490b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                       op1)), op2);
5491b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5492b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lcgr";
5493b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5494b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5495b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5496b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LCGFR(UChar r1, UChar r2)
5497b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5498b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   Long op1;
5499b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
5500b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
5501b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5502b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op1 = 0ULL;
5503b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, unop(Iop_32Sto64, get_gpr_w1(r2)));
5504b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Sub64, mkU64((ULong)op1), mkexpr(op2)));
5505b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(result));
5506b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_SUB_64, mktemp(Ity_I64, mkU64((ULong)
5507b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                       op1)), op2);
5508b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5509b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lcgfr";
5510b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5511b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5512b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5513b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LHR(UChar r1, UChar r2)
5514b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5515b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, unop(Iop_16Sto32, get_gpr_hw3(r2)));
5516b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5517b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lhr";
5518b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5519b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5520b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5521b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LGHR(UChar r1, UChar r2)
5522b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5523b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, unop(Iop_16Sto64, get_gpr_hw3(r2)));
5524b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5525b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lghr";
5526b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5527b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5528b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5529b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LH(UChar r1, IRTemp op2addr)
5530b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5531b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, unop(Iop_16Sto32, load(Ity_I16, mkexpr(op2addr))));
5532b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5533b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lh";
5534b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5535b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5536b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5537b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LHY(UChar r1, IRTemp op2addr)
5538b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5539b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, unop(Iop_16Sto32, load(Ity_I16, mkexpr(op2addr))));
5540b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5541b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lhy";
5542b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5543b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5544b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5545b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LGH(UChar r1, IRTemp op2addr)
5546b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5547b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, unop(Iop_16Sto64, load(Ity_I16, mkexpr(op2addr))));
5548b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5549b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lgh";
5550b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5551b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5552b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5553b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LHI(UChar r1, UShort i2)
5554b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5555b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkU32((UInt)(Int)(Short)i2));
5556b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5557b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lhi";
5558b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5559b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5560b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5561b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LGHI(UChar r1, UShort i2)
5562b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5563b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkU64((ULong)(Long)(Short)i2));
5564b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5565b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lghi";
5566b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5567b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5568b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5569b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LHRL(UChar r1, UInt i2)
5570b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5571b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, unop(Iop_16Sto32, load(Ity_I16, mkU64(guest_IA_curr_instr +
5572b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov              ((ULong)(Long)(Int)i2 << 1)))));
5573b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5574b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lhrl";
5575b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5576b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5577b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5578b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LGHRL(UChar r1, UInt i2)
5579b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5580b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, unop(Iop_16Sto64, load(Ity_I16, mkU64(guest_IA_curr_instr +
5581b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov               ((ULong)(Long)(Int)i2 << 1)))));
5582b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5583b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lghrl";
5584b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5585b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5586b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5587b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LHH(UChar r1, IRTemp op2addr)
5588b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5589b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w0(r1, unop(Iop_16Sto32, load(Ity_I16, mkexpr(op2addr))));
5590b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5591b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lhh";
5592b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5593b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5594b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5595b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LFH(UChar r1, IRTemp op2addr)
5596b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5597b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w0(r1, load(Ity_I32, mkexpr(op2addr)));
5598b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5599b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lfh";
5600b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5601b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5602b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5603b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LLGFR(UChar r1, UChar r2)
5604b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5605b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, unop(Iop_32Uto64, get_gpr_w1(r2)));
5606b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5607b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "llgfr";
5608b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5609b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5610b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5611b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LLGF(UChar r1, IRTemp op2addr)
5612b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5613b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, unop(Iop_32Uto64, load(Ity_I32, mkexpr(op2addr))));
5614b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5615b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "llgf";
5616b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5617b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5618b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5619b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LLGFRL(UChar r1, UInt i2)
5620b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5621b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, unop(Iop_32Uto64, load(Ity_I32, mkU64(guest_IA_curr_instr +
5622b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov               ((ULong)(Long)(Int)i2 << 1)))));
5623b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5624b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "llgfrl";
5625b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5626b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5627b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5628b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LLCR(UChar r1, UChar r2)
5629b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5630b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, unop(Iop_8Uto32, get_gpr_b7(r2)));
5631b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5632b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "llcr";
5633b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5634b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5635b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5636b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LLGCR(UChar r1, UChar r2)
5637b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5638b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, unop(Iop_8Uto64, get_gpr_b7(r2)));
5639b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5640b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "llgcr";
5641b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5642b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5643b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5644b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LLC(UChar r1, IRTemp op2addr)
5645b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5646b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, unop(Iop_8Uto32, load(Ity_I8, mkexpr(op2addr))));
5647b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5648b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "llc";
5649b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5650b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5651b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5652b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LLGC(UChar r1, IRTemp op2addr)
5653b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5654b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, unop(Iop_8Uto64, load(Ity_I8, mkexpr(op2addr))));
5655b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5656b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "llgc";
5657b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5658b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5659b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5660b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LLCH(UChar r1, IRTemp op2addr)
5661b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5662b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w0(r1, unop(Iop_8Uto32, load(Ity_I8, mkexpr(op2addr))));
5663b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5664b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "llch";
5665b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5666b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5667b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5668b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LLHR(UChar r1, UChar r2)
5669b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5670b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, unop(Iop_16Uto32, get_gpr_hw3(r2)));
5671b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5672b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "llhr";
5673b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5674b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5675b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5676b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LLGHR(UChar r1, UChar r2)
5677b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5678b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, unop(Iop_16Uto64, get_gpr_hw3(r2)));
5679b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5680b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "llghr";
5681b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5682b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5683b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5684b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LLH(UChar r1, IRTemp op2addr)
5685b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5686b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, unop(Iop_16Uto32, load(Ity_I16, mkexpr(op2addr))));
5687b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5688b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "llh";
5689b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5690b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5691b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5692b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LLGH(UChar r1, IRTemp op2addr)
5693b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5694b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, unop(Iop_16Uto64, load(Ity_I16, mkexpr(op2addr))));
5695b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5696b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "llgh";
5697b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5698b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5699b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5700b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LLHRL(UChar r1, UInt i2)
5701b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5702b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, unop(Iop_16Uto32, load(Ity_I16, mkU64(guest_IA_curr_instr +
5703b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov              ((ULong)(Long)(Int)i2 << 1)))));
5704b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5705b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "llhrl";
5706b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5707b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5708b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5709b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LLGHRL(UChar r1, UInt i2)
5710b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5711b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, unop(Iop_16Uto64, load(Ity_I16, mkU64(guest_IA_curr_instr +
5712b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov               ((ULong)(Long)(Int)i2 << 1)))));
5713b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5714b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "llghrl";
5715b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5716b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5717b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5718b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LLHH(UChar r1, IRTemp op2addr)
5719b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5720b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w0(r1, unop(Iop_16Uto32, load(Ity_I16, mkexpr(op2addr))));
5721b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5722b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "llhh";
5723b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5724b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5725b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5726b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LLIHF(UChar r1, UInt i2)
5727b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5728b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkU64(((ULong)i2) << 32));
5729b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5730b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "llihf";
5731b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5732b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5733b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5734b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LLIHH(UChar r1, UShort i2)
5735b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5736b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkU64(((ULong)i2) << 48));
5737b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5738b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "llihh";
5739b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5740b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5741b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5742b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LLIHL(UChar r1, UShort i2)
5743b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5744b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkU64(((ULong)i2) << 32));
5745b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5746b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "llihl";
5747b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5748b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5749b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5750b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LLILF(UChar r1, UInt i2)
5751b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5752b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkU64(i2));
5753b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5754b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "llilf";
5755b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5756b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5757b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5758b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LLILH(UChar r1, UShort i2)
5759b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5760b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkU64(((ULong)i2) << 16));
5761b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5762b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "llilh";
5763b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5764b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5765b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5766b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LLILL(UChar r1, UShort i2)
5767b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5768b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkU64(i2));
5769b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5770b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "llill";
5771b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5772b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5773b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5774b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LLGTR(UChar r1, UChar r2)
5775b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5776b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, unop(Iop_32Uto64, binop(Iop_And32, get_gpr_w1(r2),
5777b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov               mkU32(2147483647))));
5778b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5779b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "llgtr";
5780b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5781b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5782b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5783b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LLGT(UChar r1, IRTemp op2addr)
5784b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5785b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, unop(Iop_32Uto64, binop(Iop_And32, load(Ity_I32,
5786b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov               mkexpr(op2addr)), mkU32(2147483647))));
5787b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5788b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "llgt";
5789b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5790b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5791b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5792b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LNR(UChar r1, UChar r2)
5793b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5794b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
5795b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
5796b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5797b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_w1(r2));
5798b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, mkite(binop(Iop_CmpLE32S, mkexpr(op2), mkU32(0)), mkexpr(op2),
5799b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          binop(Iop_Sub32, mkU32(0), mkexpr(op2))));
5800b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(result));
5801b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putS(S390_CC_OP_BITWISE, result);
5802b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5803b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lnr";
5804b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5805b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5806b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5807b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LNGR(UChar r1, UChar r2)
5808b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5809b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
5810b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
5811b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5812b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_dw0(r2));
5813b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, mkite(binop(Iop_CmpLE64S, mkexpr(op2), mkU64(0)), mkexpr(op2),
5814b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          binop(Iop_Sub64, mkU64(0), mkexpr(op2))));
5815b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(result));
5816b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putS(S390_CC_OP_BITWISE, result);
5817b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5818b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lngr";
5819b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5820b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5821b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5822b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LNGFR(UChar r1, UChar r2 __attribute__((unused)))
5823b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5824b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
5825b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
5826b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5827b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, unop(Iop_32Sto64, get_gpr_w1(r1)));
5828b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, mkite(binop(Iop_CmpLE64S, mkexpr(op2), mkU64(0)), mkexpr(op2),
5829b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          binop(Iop_Sub64, mkU64(0), mkexpr(op2))));
5830b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(result));
5831b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putS(S390_CC_OP_BITWISE, result);
5832b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5833b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lngfr";
5834b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5835b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5836b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5837b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LOCR(UChar m3, UChar r1, UChar r2)
5838b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5839b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if_condition_goto(binop(Iop_CmpEQ32, s390_call_calculate_cond(m3), mkU32(0)),
5840b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     guest_IA_next_instr);
5841b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, get_gpr_w1(r2));
5842b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5843b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "locr";
5844b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5845b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5846b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5847b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LOCGR(UChar m3, UChar r1, UChar r2)
5848b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5849b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if_condition_goto(binop(Iop_CmpEQ32, s390_call_calculate_cond(m3), mkU32(0)),
5850b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     guest_IA_next_instr);
5851b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, get_gpr_dw0(r2));
5852b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5853b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "locgr";
5854b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5855b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5856b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5857b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LOC(UChar r1, IRTemp op2addr)
5858b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5859b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* condition is checked in format handler */
5860b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, load(Ity_I32, mkexpr(op2addr)));
5861b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5862b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "loc";
5863b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5864b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5865b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5866b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LOCG(UChar r1, IRTemp op2addr)
5867b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5868b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* condition is checked in format handler */
5869b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, load(Ity_I64, mkexpr(op2addr)));
5870b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5871b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "locg";
5872b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5873b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5874b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5875b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LPQ(UChar r1, IRTemp op2addr)
5876b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5877b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, load(Ity_I64, mkexpr(op2addr)));
5878b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1 + 1, load(Ity_I64, binop(Iop_Add64, mkexpr(op2addr), mkU64(8))
5879b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov               ));
5880b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5881b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lpq";
5882b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5883b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5884b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5885b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LPR(UChar r1, UChar r2)
5886b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5887b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
5888b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
5889b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5890b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_w1(r2));
5891b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, mkite(binop(Iop_CmpLT32S, mkexpr(op2), mkU32(0)),
5892b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          binop(Iop_Sub32, mkU32(0), mkexpr(op2)), mkexpr(op2)));
5893b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(result));
5894b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putS(S390_CC_OP_LOAD_POSITIVE_32, op2);
5895b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5896b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lpr";
5897b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5898b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5899b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5900b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LPGR(UChar r1, UChar r2)
5901b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5902b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
5903b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
5904b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5905b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_dw0(r2));
5906b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, mkite(binop(Iop_CmpLT64S, mkexpr(op2), mkU64(0)),
5907b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          binop(Iop_Sub64, mkU64(0), mkexpr(op2)), mkexpr(op2)));
5908b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(result));
5909b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putS(S390_CC_OP_LOAD_POSITIVE_64, op2);
5910b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5911b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lpgr";
5912b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5913b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5914b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5915b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LPGFR(UChar r1, UChar r2)
5916b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5917b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
5918b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
5919b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5920b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, unop(Iop_32Sto64, get_gpr_w1(r2)));
5921b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, mkite(binop(Iop_CmpLT64S, mkexpr(op2), mkU64(0)),
5922b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          binop(Iop_Sub64, mkU64(0), mkexpr(op2)), mkexpr(op2)));
5923b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(result));
5924b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putS(S390_CC_OP_LOAD_POSITIVE_64, op2);
5925b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5926b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lpgfr";
5927b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5928b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5929b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5930b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LRVR(UChar r1, UChar r2)
5931b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5932b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp b0 = newTemp(Ity_I8);
5933b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp b1 = newTemp(Ity_I8);
5934b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp b2 = newTemp(Ity_I8);
5935b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp b3 = newTemp(Ity_I8);
5936b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5937b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(b3, get_gpr_b7(r2));
5938b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(b2, get_gpr_b6(r2));
5939b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(b1, get_gpr_b5(r2));
5940b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(b0, get_gpr_b4(r2));
5941b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_b4(r1, mkexpr(b3));
5942b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_b5(r1, mkexpr(b2));
5943b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_b6(r1, mkexpr(b1));
5944b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_b7(r1, mkexpr(b0));
5945b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5946b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lrvr";
5947b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5948b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5949b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5950b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LRVGR(UChar r1, UChar r2)
5951b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5952b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp b0 = newTemp(Ity_I8);
5953b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp b1 = newTemp(Ity_I8);
5954b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp b2 = newTemp(Ity_I8);
5955b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp b3 = newTemp(Ity_I8);
5956b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp b4 = newTemp(Ity_I8);
5957b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp b5 = newTemp(Ity_I8);
5958b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp b6 = newTemp(Ity_I8);
5959b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp b7 = newTemp(Ity_I8);
5960b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5961b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(b7, get_gpr_b7(r2));
5962b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(b6, get_gpr_b6(r2));
5963b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(b5, get_gpr_b5(r2));
5964b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(b4, get_gpr_b4(r2));
5965b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(b3, get_gpr_b3(r2));
5966b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(b2, get_gpr_b2(r2));
5967b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(b1, get_gpr_b1(r2));
5968b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(b0, get_gpr_b0(r2));
5969b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_b0(r1, mkexpr(b7));
5970b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_b1(r1, mkexpr(b6));
5971b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_b2(r1, mkexpr(b5));
5972b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_b3(r1, mkexpr(b4));
5973b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_b4(r1, mkexpr(b3));
5974b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_b5(r1, mkexpr(b2));
5975b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_b6(r1, mkexpr(b1));
5976b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_b7(r1, mkexpr(b0));
5977b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5978b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lrvgr";
5979b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5980b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5981b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5982b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LRVH(UChar r1, IRTemp op2addr)
5983b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5984b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I16);
5985b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5986b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I16, mkexpr(op2addr)));
5987b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_b6(r1, unop(Iop_16to8, mkexpr(op2)));
5988b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_b7(r1, unop(Iop_16HIto8, mkexpr(op2)));
5989b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5990b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lrvh";
5991b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
5992b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5993b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
5994b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LRV(UChar r1, IRTemp op2addr)
5995b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
5996b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
5997b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
5998b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I32, mkexpr(op2addr)));
5999b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_b4(r1, unop(Iop_32to8, binop(Iop_And32, mkexpr(op2), mkU32(255))));
6000b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_b5(r1, unop(Iop_32to8, binop(Iop_And32, binop(Iop_Shr32, mkexpr(op2),
6001b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov              mkU8(8)), mkU32(255))));
6002b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_b6(r1, unop(Iop_32to8, binop(Iop_And32, binop(Iop_Shr32, mkexpr(op2),
6003b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov              mkU8(16)), mkU32(255))));
6004b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_b7(r1, unop(Iop_32to8, binop(Iop_And32, binop(Iop_Shr32, mkexpr(op2),
6005b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov              mkU8(24)), mkU32(255))));
6006b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6007b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lrv";
6008b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
6009b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6010b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
6011b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LRVG(UChar r1, IRTemp op2addr)
6012b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6013b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
6014b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6015b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I64, mkexpr(op2addr)));
6016b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_b0(r1, unop(Iop_64to8, binop(Iop_And64, mkexpr(op2), mkU64(255))));
6017b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_b1(r1, unop(Iop_64to8, binop(Iop_And64, binop(Iop_Shr64, mkexpr(op2),
6018b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov              mkU8(8)), mkU64(255))));
6019b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_b2(r1, unop(Iop_64to8, binop(Iop_And64, binop(Iop_Shr64, mkexpr(op2),
6020b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov              mkU8(16)), mkU64(255))));
6021b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_b3(r1, unop(Iop_64to8, binop(Iop_And64, binop(Iop_Shr64, mkexpr(op2),
6022b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov              mkU8(24)), mkU64(255))));
6023b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_b4(r1, unop(Iop_64to8, binop(Iop_And64, binop(Iop_Shr64, mkexpr(op2),
6024b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov              mkU8(32)), mkU64(255))));
6025b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_b5(r1, unop(Iop_64to8, binop(Iop_And64, binop(Iop_Shr64, mkexpr(op2),
6026b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov              mkU8(40)), mkU64(255))));
6027b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_b6(r1, unop(Iop_64to8, binop(Iop_And64, binop(Iop_Shr64, mkexpr(op2),
6028b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov              mkU8(48)), mkU64(255))));
6029b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_b7(r1, unop(Iop_64to8, binop(Iop_And64, binop(Iop_Shr64, mkexpr(op2),
6030b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov              mkU8(56)), mkU64(255))));
6031b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6032b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lrvg";
6033b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
6034b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6035b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
6036b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_MVHHI(UShort i2, IRTemp op1addr)
6037b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6038b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(mkexpr(op1addr), mkU16(i2));
6039b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6040b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "mvhhi";
6041b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
6042b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6043b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
6044b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_MVHI(UShort i2, IRTemp op1addr)
6045b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6046b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(mkexpr(op1addr), mkU32((UInt)(Int)(Short)i2));
6047b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6048b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "mvhi";
6049b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
6050b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6051b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
6052b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_MVGHI(UShort i2, IRTemp op1addr)
6053b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6054b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(mkexpr(op1addr), mkU64((ULong)(Long)(Short)i2));
6055b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6056b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "mvghi";
6057b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
6058b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6059b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
6060b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_MVI(UChar i2, IRTemp op1addr)
6061b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6062b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(mkexpr(op1addr), mkU8(i2));
6063b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6064b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "mvi";
6065b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
6066b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6067b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
6068b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_MVIY(UChar i2, IRTemp op1addr)
6069b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6070b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(mkexpr(op1addr), mkU8(i2));
6071b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6072b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "mviy";
6073b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
6074b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6075b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
6076b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_MR(UChar r1, UChar r2)
6077b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6078b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
6079b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
6080b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
6081b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6082b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1 + 1));
6083b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_w1(r2));
6084b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_MullS32, mkexpr(op1), mkexpr(op2)));
6085b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, unop(Iop_64HIto32, mkexpr(result)));
6086b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1 + 1, unop(Iop_64to32, mkexpr(result)));
6087b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6088b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "mr";
6089b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
6090b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6091b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
6092b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_M(UChar r1, IRTemp op2addr)
6093b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6094b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
6095b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
6096b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
6097b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6098b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1 + 1));
6099b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I32, mkexpr(op2addr)));
6100b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_MullS32, mkexpr(op1), mkexpr(op2)));
6101b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, unop(Iop_64HIto32, mkexpr(result)));
6102b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1 + 1, unop(Iop_64to32, mkexpr(result)));
6103b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6104b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "m";
6105b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
6106b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6107b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
6108b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_MFY(UChar r1, IRTemp op2addr)
6109b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6110b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
6111b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
6112b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
6113b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6114b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1 + 1));
6115b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I32, mkexpr(op2addr)));
6116b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_MullS32, mkexpr(op1), mkexpr(op2)));
6117b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, unop(Iop_64HIto32, mkexpr(result)));
6118b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1 + 1, unop(Iop_64to32, mkexpr(result)));
6119b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6120b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "mfy";
6121b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
6122b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6123b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
6124b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_MH(UChar r1, IRTemp op2addr)
6125b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6126b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
6127b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I16);
6128b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
6129b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6130b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1));
6131b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I16, mkexpr(op2addr)));
6132b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_MullS32, mkexpr(op1), unop(Iop_16Sto32, mkexpr(op2))
6133b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          ));
6134b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, unop(Iop_64to32, mkexpr(result)));
6135b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6136b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "mh";
6137b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
6138b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6139b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
6140b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_MHY(UChar r1, IRTemp op2addr)
6141b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6142b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
6143b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I16);
6144b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
6145b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6146b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1));
6147b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I16, mkexpr(op2addr)));
6148b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_MullS32, mkexpr(op1), unop(Iop_16Sto32, mkexpr(op2))
6149b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          ));
6150b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, unop(Iop_64to32, mkexpr(result)));
6151b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6152b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "mhy";
6153b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
6154b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6155b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
6156b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_MHI(UChar r1, UShort i2)
6157b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6158b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
6159b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   Short op2;
6160b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
6161b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6162b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1));
6163b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op2 = (Short)i2;
6164b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_MullS32, mkexpr(op1), unop(Iop_16Sto32,
6165b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkU16((UShort)op2))));
6166b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, unop(Iop_64to32, mkexpr(result)));
6167b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6168b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "mhi";
6169b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
6170b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6171b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
6172b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_MGHI(UChar r1, UShort i2)
6173b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6174b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
6175b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   Short op2;
6176b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I128);
6177b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6178b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_dw0(r1));
6179b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op2 = (Short)i2;
6180b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_MullS64, mkexpr(op1), unop(Iop_16Sto64,
6181b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkU16((UShort)op2))));
6182b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, unop(Iop_128to64, mkexpr(result)));
6183b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6184b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "mghi";
6185b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
6186b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6187b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
6188b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_MLR(UChar r1, UChar r2)
6189b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6190b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
6191b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
6192b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
6193b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6194b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1 + 1));
6195b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_w1(r2));
6196b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_MullU32, mkexpr(op1), mkexpr(op2)));
6197b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, unop(Iop_64HIto32, mkexpr(result)));
6198b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1 + 1, unop(Iop_64to32, mkexpr(result)));
6199b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6200b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "mlr";
6201b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
6202b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6203b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
6204b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_MLGR(UChar r1, UChar r2)
6205b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6206b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
6207b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
6208b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I128);
6209b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6210b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_dw0(r1 + 1));
6211b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_dw0(r2));
6212b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_MullU64, mkexpr(op1), mkexpr(op2)));
6213b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, unop(Iop_128HIto64, mkexpr(result)));
6214b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1 + 1, unop(Iop_128to64, mkexpr(result)));
6215b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6216b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "mlgr";
6217b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
6218b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6219b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
6220b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_ML(UChar r1, IRTemp op2addr)
6221b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6222b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
6223b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
6224b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
6225b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6226b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1 + 1));
6227b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I32, mkexpr(op2addr)));
6228b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_MullU32, mkexpr(op1), mkexpr(op2)));
6229b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, unop(Iop_64HIto32, mkexpr(result)));
6230b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1 + 1, unop(Iop_64to32, mkexpr(result)));
6231b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6232b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "ml";
6233b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
6234b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6235b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
6236b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_MLG(UChar r1, IRTemp op2addr)
6237b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6238b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
6239b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
6240b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I128);
6241b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6242b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_dw0(r1 + 1));
6243b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I64, mkexpr(op2addr)));
6244b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_MullU64, mkexpr(op1), mkexpr(op2)));
6245b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, unop(Iop_128HIto64, mkexpr(result)));
6246b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1 + 1, unop(Iop_128to64, mkexpr(result)));
6247b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6248b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "mlg";
6249b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
6250b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6251b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
6252b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_MSR(UChar r1, UChar r2)
6253b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6254b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
6255b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
6256b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
6257b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6258b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1));
6259b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_w1(r2));
6260b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_MullS32, mkexpr(op1), mkexpr(op2)));
6261b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, unop(Iop_64to32, mkexpr(result)));
6262b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6263b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "msr";
6264b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
6265b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6266b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
6267b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_MSGR(UChar r1, UChar r2)
6268b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6269b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
6270b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
6271b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I128);
6272b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6273b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_dw0(r1));
6274b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_dw0(r2));
6275b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_MullS64, mkexpr(op1), mkexpr(op2)));
6276b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, unop(Iop_128to64, mkexpr(result)));
6277b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6278b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "msgr";
6279b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
6280b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6281b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
6282b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_MSGFR(UChar r1, UChar r2)
6283b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6284b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
6285b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
6286b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I128);
6287b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6288b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_dw0(r1));
6289b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_w1(r2));
6290b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_MullS64, mkexpr(op1), unop(Iop_32Sto64, mkexpr(op2))
6291b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          ));
6292b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, unop(Iop_128to64, mkexpr(result)));
6293b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6294b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "msgfr";
6295b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
6296b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6297b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
6298b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_MS(UChar r1, IRTemp op2addr)
6299b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6300b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
6301b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
6302b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
6303b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6304b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1));
6305b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I32, mkexpr(op2addr)));
6306b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_MullS32, mkexpr(op1), mkexpr(op2)));
6307b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, unop(Iop_64to32, mkexpr(result)));
6308b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6309b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "ms";
6310b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
6311b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6312b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
6313b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_MSY(UChar r1, IRTemp op2addr)
6314b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6315b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
6316b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
6317b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
6318b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6319b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1));
6320b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I32, mkexpr(op2addr)));
6321b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_MullS32, mkexpr(op1), mkexpr(op2)));
6322b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, unop(Iop_64to32, mkexpr(result)));
6323b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6324b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "msy";
6325b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
6326b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6327b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
6328b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_MSG(UChar r1, IRTemp op2addr)
6329b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6330b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
6331b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
6332b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I128);
6333b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6334b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_dw0(r1));
6335b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I64, mkexpr(op2addr)));
6336b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_MullS64, mkexpr(op1), mkexpr(op2)));
6337b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, unop(Iop_128to64, mkexpr(result)));
6338b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6339b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "msg";
6340b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
6341b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6342b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
6343b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_MSGF(UChar r1, IRTemp op2addr)
6344b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6345b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
6346b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
6347b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I128);
6348b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6349b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_dw0(r1));
6350b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I32, mkexpr(op2addr)));
6351b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_MullS64, mkexpr(op1), unop(Iop_32Sto64, mkexpr(op2))
6352b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          ));
6353b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, unop(Iop_128to64, mkexpr(result)));
6354b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6355b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "msgf";
6356b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
6357b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6358b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
6359b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_MSFI(UChar r1, UInt i2)
6360b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6361b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
6362b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   Int op2;
6363b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
6364b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6365b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1));
6366b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op2 = (Int)i2;
6367b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_MullS32, mkexpr(op1), mkU32((UInt)op2)));
6368b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, unop(Iop_64to32, mkexpr(result)));
6369b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6370b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "msfi";
6371b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
6372b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6373b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
6374b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_MSGFI(UChar r1, UInt i2)
6375b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6376b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
6377b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   Int op2;
6378b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I128);
6379b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6380b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_dw0(r1));
6381b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op2 = (Int)i2;
6382b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_MullS64, mkexpr(op1), unop(Iop_32Sto64, mkU32((UInt)
6383b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          op2))));
6384b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, unop(Iop_128to64, mkexpr(result)));
6385b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6386b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "msgfi";
6387b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
6388b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6389b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
6390b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_OR(UChar r1, UChar r2)
6391b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6392b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
6393b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
6394b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
6395b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6396b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1));
6397b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_w1(r2));
6398b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Or32, mkexpr(op1), mkexpr(op2)));
6399b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result);
6400b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(result));
6401b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6402b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "or";
6403b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
6404b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6405b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
6406b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_OGR(UChar r1, UChar r2)
6407b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6408b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
6409b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
6410b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
6411b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6412b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_dw0(r1));
6413b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_dw0(r2));
6414b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Or64, mkexpr(op1), mkexpr(op2)));
6415b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result);
6416b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(result));
6417b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6418b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "ogr";
6419b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
6420b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6421b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
6422b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_ORK(UChar r3, UChar r1, UChar r2)
6423b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6424b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
6425b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op3 = newTemp(Ity_I32);
6426b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
6427b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6428b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_w1(r2));
6429b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op3, get_gpr_w1(r3));
6430b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Or32, mkexpr(op2), mkexpr(op3)));
6431b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result);
6432b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(result));
6433b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6434b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "ork";
6435b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
6436b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6437b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
6438b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_OGRK(UChar r3, UChar r1, UChar r2)
6439b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6440b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
6441b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op3 = newTemp(Ity_I64);
6442b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
6443b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6444b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_dw0(r2));
6445b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op3, get_gpr_dw0(r3));
6446b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Or64, mkexpr(op2), mkexpr(op3)));
6447b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result);
6448b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(result));
6449b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6450b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "ogrk";
6451b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
6452b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6453b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
6454b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_O(UChar r1, IRTemp op2addr)
6455b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6456b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
6457b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
6458b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
6459b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6460b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1));
6461b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I32, mkexpr(op2addr)));
6462b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Or32, mkexpr(op1), mkexpr(op2)));
6463b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result);
6464b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(result));
6465b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6466b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "o";
6467b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
6468b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6469b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
6470b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_OY(UChar r1, IRTemp op2addr)
6471b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6472b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
6473b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
6474b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
6475b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6476b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1));
6477b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I32, mkexpr(op2addr)));
6478b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Or32, mkexpr(op1), mkexpr(op2)));
6479b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result);
6480b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(result));
6481b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6482b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "oy";
6483b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
6484b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6485b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
6486b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_OG(UChar r1, IRTemp op2addr)
6487b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6488b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
6489b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
6490b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
6491b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6492b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_dw0(r1));
6493b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I64, mkexpr(op2addr)));
6494b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Or64, mkexpr(op1), mkexpr(op2)));
6495b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result);
6496b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(result));
6497b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6498b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "og";
6499b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
6500b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6501b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
6502b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_OI(UChar i2, IRTemp op1addr)
6503b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6504b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I8);
6505b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UChar op2;
6506b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I8);
6507b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6508b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, load(Ity_I8, mkexpr(op1addr)));
6509b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op2 = i2;
6510b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Or8, mkexpr(op1), mkU8(op2)));
6511b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result);
6512b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(mkexpr(op1addr), mkexpr(result));
6513b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6514b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "oi";
6515b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
6516b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6517b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
6518b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_OIY(UChar i2, IRTemp op1addr)
6519b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6520b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I8);
6521b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UChar op2;
6522b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I8);
6523b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6524b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, load(Ity_I8, mkexpr(op1addr)));
6525b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op2 = i2;
6526b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Or8, mkexpr(op1), mkU8(op2)));
6527b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result);
6528b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(mkexpr(op1addr), mkexpr(result));
6529b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6530b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "oiy";
6531b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
6532b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6533b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
6534b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_OIHF(UChar r1, UInt i2)
6535b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6536b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
6537b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UInt op2;
6538b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
6539b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6540b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w0(r1));
6541b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op2 = i2;
6542b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Or32, mkexpr(op1), mkU32(op2)));
6543b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result);
6544b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w0(r1, mkexpr(result));
6545b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6546b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "oihf";
6547b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
6548b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6549b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
6550b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_OIHH(UChar r1, UShort i2)
6551b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6552b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I16);
6553b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UShort op2;
6554b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I16);
6555b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6556b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_hw0(r1));
6557b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op2 = i2;
6558b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Or16, mkexpr(op1), mkU16(op2)));
6559b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result);
6560b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_hw0(r1, mkexpr(result));
6561b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6562b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "oihh";
6563b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
6564b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6565b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
6566b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_OIHL(UChar r1, UShort i2)
6567b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6568b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I16);
6569b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UShort op2;
6570b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I16);
6571b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6572b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_hw1(r1));
6573b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op2 = i2;
6574b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Or16, mkexpr(op1), mkU16(op2)));
6575b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result);
6576b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_hw1(r1, mkexpr(result));
6577b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6578b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "oihl";
6579b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
6580b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6581b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
6582b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_OILF(UChar r1, UInt i2)
6583b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6584b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
6585b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UInt op2;
6586b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
6587b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6588b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1));
6589b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op2 = i2;
6590b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Or32, mkexpr(op1), mkU32(op2)));
6591b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result);
6592b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(result));
6593b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6594b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "oilf";
6595b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
6596b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6597b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
6598b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_OILH(UChar r1, UShort i2)
6599b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6600b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I16);
6601b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UShort op2;
6602b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I16);
6603b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6604b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_hw2(r1));
6605b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op2 = i2;
6606b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Or16, mkexpr(op1), mkU16(op2)));
6607b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result);
6608b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_hw2(r1, mkexpr(result));
6609b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6610b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "oilh";
6611b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
6612b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6613b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
6614b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_OILL(UChar r1, UShort i2)
6615b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6616b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I16);
6617b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UShort op2;
6618b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I16);
6619b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6620b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_hw3(r1));
6621b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op2 = i2;
6622b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Or16, mkexpr(op1), mkU16(op2)));
6623b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result);
6624b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_hw3(r1, mkexpr(result));
6625b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6626b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "oill";
6627b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
6628b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6629b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
6630b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_PFD(void)
6631b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6632b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6633b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "pfd";
6634b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
6635b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6636b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
6637b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_PFDRL(void)
6638b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6639b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6640b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "pfdrl";
6641b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
6642b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6643b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
6644b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_RLL(UChar r1, UChar r3, IRTemp op2addr)
6645b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6646b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp amount = newTemp(Ity_I64);
6647b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op = newTemp(Ity_I32);
6648b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6649b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(amount, binop(Iop_And64, mkexpr(op2addr), mkU64(31)));
6650b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op, get_gpr_w1(r3));
6651b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, binop(Iop_Or32, binop(Iop_Shl32, mkexpr(op), unop(Iop_64to8,
6652b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov              mkexpr(amount))), binop(Iop_Shr32, mkexpr(op), unop(Iop_64to8,
6653b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov              binop(Iop_Sub64, mkU64(32), mkexpr(amount))))));
6654b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6655b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "rll";
6656b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
6657b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6658b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
6659b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_RLLG(UChar r1, UChar r3, IRTemp op2addr)
6660b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6661b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp amount = newTemp(Ity_I64);
6662b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op = newTemp(Ity_I64);
6663b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6664b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(amount, binop(Iop_And64, mkexpr(op2addr), mkU64(63)));
6665b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op, get_gpr_dw0(r3));
6666b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, binop(Iop_Or64, binop(Iop_Shl64, mkexpr(op), unop(Iop_64to8,
6667b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov               mkexpr(amount))), binop(Iop_Shr64, mkexpr(op), unop(Iop_64to8,
6668b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov               binop(Iop_Sub64, mkU64(64), mkexpr(amount))))));
6669b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6670b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "rllg";
6671b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
6672b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6673b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
6674b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_RNSBG(UChar r1, UChar r2, UChar i3, UChar i4, UChar i5)
6675b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6676b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UChar from;
6677b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UChar to;
6678b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UChar rot;
6679b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UChar t_bit;
6680b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   ULong mask;
6681b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   ULong maskc;
6682b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
6683b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
6684b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6685b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   from = i3 & 63;
6686b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   to = i4 & 63;
6687b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   rot = i5 & 63;
6688b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   t_bit = i3 & 128;
6689b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, rot == 0 ? get_gpr_dw0(r2) : binop(Iop_Or64, binop(Iop_Shl64,
6690b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          get_gpr_dw0(r2), mkU8(rot)), binop(Iop_Shr64, get_gpr_dw0(r2),
6691b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkU8(64 - rot))));
6692b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (from <= to) {
6693b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      mask = ~0ULL;
6694b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      mask = (mask >> from) & (mask << (63 - to));
6695b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      maskc = ~mask;
6696b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } else {
6697b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      maskc = ~0ULL;
6698b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      maskc = (maskc >> (to + 1)) & (maskc << (64 - from));
6699b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      mask = ~maskc;
6700b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
6701b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_And64, binop(Iop_And64, get_gpr_dw0(r1), mkexpr(op2)
6702b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          ), mkU64(mask)));
6703b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (t_bit == 0) {
6704b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      put_gpr_dw0(r1, binop(Iop_Or64, binop(Iop_And64, get_gpr_dw0(r1),
6705b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                  mkU64(maskc)), mkexpr(result)));
6706b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
6707b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result);
6708b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6709b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "rnsbg";
6710b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
6711b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6712b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
6713b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_RXSBG(UChar r1, UChar r2, UChar i3, UChar i4, UChar i5)
6714b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6715b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UChar from;
6716b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UChar to;
6717b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UChar rot;
6718b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UChar t_bit;
6719b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   ULong mask;
6720b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   ULong maskc;
6721b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
6722b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
6723b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6724b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   from = i3 & 63;
6725b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   to = i4 & 63;
6726b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   rot = i5 & 63;
6727b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   t_bit = i3 & 128;
6728b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, rot == 0 ? get_gpr_dw0(r2) : binop(Iop_Or64, binop(Iop_Shl64,
6729b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          get_gpr_dw0(r2), mkU8(rot)), binop(Iop_Shr64, get_gpr_dw0(r2),
6730b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkU8(64 - rot))));
6731b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (from <= to) {
6732b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      mask = ~0ULL;
6733b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      mask = (mask >> from) & (mask << (63 - to));
6734b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      maskc = ~mask;
6735b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } else {
6736b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      maskc = ~0ULL;
6737b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      maskc = (maskc >> (to + 1)) & (maskc << (64 - from));
6738b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      mask = ~maskc;
6739b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
6740b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_And64, binop(Iop_Xor64, get_gpr_dw0(r1), mkexpr(op2)
6741b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          ), mkU64(mask)));
6742b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (t_bit == 0) {
6743b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      put_gpr_dw0(r1, binop(Iop_Or64, binop(Iop_And64, get_gpr_dw0(r1),
6744b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                  mkU64(maskc)), mkexpr(result)));
6745b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
6746b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result);
6747b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6748b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "rxsbg";
6749b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
6750b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6751b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
6752b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_ROSBG(UChar r1, UChar r2, UChar i3, UChar i4, UChar i5)
6753b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6754b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UChar from;
6755b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UChar to;
6756b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UChar rot;
6757b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UChar t_bit;
6758b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   ULong mask;
6759b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   ULong maskc;
6760b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
6761b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
6762b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6763b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   from = i3 & 63;
6764b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   to = i4 & 63;
6765b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   rot = i5 & 63;
6766b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   t_bit = i3 & 128;
6767b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, rot == 0 ? get_gpr_dw0(r2) : binop(Iop_Or64, binop(Iop_Shl64,
6768b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          get_gpr_dw0(r2), mkU8(rot)), binop(Iop_Shr64, get_gpr_dw0(r2),
6769b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkU8(64 - rot))));
6770b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (from <= to) {
6771b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      mask = ~0ULL;
6772b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      mask = (mask >> from) & (mask << (63 - to));
6773b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      maskc = ~mask;
6774b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } else {
6775b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      maskc = ~0ULL;
6776b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      maskc = (maskc >> (to + 1)) & (maskc << (64 - from));
6777b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      mask = ~maskc;
6778b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
6779b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_And64, binop(Iop_Or64, get_gpr_dw0(r1), mkexpr(op2)
6780b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          ), mkU64(mask)));
6781b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (t_bit == 0) {
6782b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      put_gpr_dw0(r1, binop(Iop_Or64, binop(Iop_And64, get_gpr_dw0(r1),
6783b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                  mkU64(maskc)), mkexpr(result)));
6784b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
6785b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result);
6786b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6787b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "rosbg";
6788b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
6789b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6790b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
6791b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_RISBG(UChar r1, UChar r2, UChar i3, UChar i4, UChar i5)
6792b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6793b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UChar from;
6794b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UChar to;
6795b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UChar rot;
6796b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UChar z_bit;
6797b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   ULong mask;
6798b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   ULong maskc;
6799b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
6800b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
6801b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6802b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   from = i3 & 63;
6803b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   to = i4 & 63;
6804b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   rot = i5 & 63;
6805b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   z_bit = i4 & 128;
6806b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, rot == 0 ? get_gpr_dw0(r2) : binop(Iop_Or64, binop(Iop_Shl64,
6807b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          get_gpr_dw0(r2), mkU8(rot)), binop(Iop_Shr64, get_gpr_dw0(r2),
6808b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkU8(64 - rot))));
6809b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (from <= to) {
6810b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      mask = ~0ULL;
6811b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      mask = (mask >> from) & (mask << (63 - to));
6812b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      maskc = ~mask;
6813b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } else {
6814b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      maskc = ~0ULL;
6815b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      maskc = (maskc >> (to + 1)) & (maskc << (64 - from));
6816b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      mask = ~maskc;
6817b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
6818b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (z_bit == 0) {
6819b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      put_gpr_dw0(r1, binop(Iop_Or64, binop(Iop_And64, get_gpr_dw0(r1),
6820b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                  mkU64(maskc)), binop(Iop_And64, mkexpr(op2), mkU64(mask))));
6821b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } else {
6822b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      put_gpr_dw0(r1, binop(Iop_And64, mkexpr(op2), mkU64(mask)));
6823b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
6824b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, get_gpr_dw0(r1));
6825b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putS(S390_CC_OP_LOAD_AND_TEST, op2);
6826b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6827b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "risbg";
6828b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
6829b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6830b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
6831b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_SAR(UChar r1, UChar r2)
6832b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6833b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_ar_w0(r1, get_gpr_w1(r2));
6834b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
6835b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC3(MNM, AR, GPR), "sar", r1, r2);
6836b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6837b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "sar";
6838b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
6839b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6840b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
6841b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_SLDA(UChar r1, IRTemp op2addr)
6842b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6843b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp p1 = newTemp(Ity_I64);
6844b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp p2 = newTemp(Ity_I64);
6845b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op = newTemp(Ity_I64);
6846b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
6847b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   Long sign_mask;
6848b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp shift_amount = newTemp(Ity_I64);
6849b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6850b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(p1, unop(Iop_32Uto64, get_gpr_w1(r1)));
6851b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(p2, unop(Iop_32Uto64, get_gpr_w1(r1 + 1)));
6852b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op, binop(Iop_Or64, binop(Iop_Shl64, mkexpr(p1), mkU8(32)), mkexpr(p2)
6853b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          ));
6854b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   sign_mask = 1ULL << 63;
6855b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(shift_amount, binop(Iop_And64, mkexpr(op2addr), mkU64(63)));
6856b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Or64, binop(Iop_And64, binop(Iop_Shl64, mkexpr(op),
6857b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          unop(Iop_64to8, mkexpr(shift_amount))), mkU64((ULong)(~sign_mask))),
6858b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          binop(Iop_And64, mkexpr(op), mkU64((ULong)sign_mask))));
6859b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, unop(Iop_64HIto32, mkexpr(result)));
6860b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1 + 1, unop(Iop_64to32, mkexpr(result)));
6861b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_SHIFT_LEFT_64, op, shift_amount);
6862b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6863b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "slda";
6864b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
6865b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6866b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
6867b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_SLDL(UChar r1, IRTemp op2addr)
6868b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6869b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp p1 = newTemp(Ity_I64);
6870b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp p2 = newTemp(Ity_I64);
6871b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
6872b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6873b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(p1, unop(Iop_32Uto64, get_gpr_w1(r1)));
6874b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(p2, unop(Iop_32Uto64, get_gpr_w1(r1 + 1)));
6875b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Shl64, binop(Iop_Or64, binop(Iop_Shl64, mkexpr(p1),
6876b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkU8(32)), mkexpr(p2)), unop(Iop_64to8, binop(Iop_And64,
6877b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkexpr(op2addr), mkU64(63)))));
6878b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, unop(Iop_64HIto32, mkexpr(result)));
6879b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1 + 1, unop(Iop_64to32, mkexpr(result)));
6880b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6881b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "sldl";
6882b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
6883b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6884b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
6885b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_SLA(UChar r1, IRTemp op2addr)
6886b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6887b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp uop = newTemp(Ity_I32);
6888b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
6889b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UInt sign_mask;
6890b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp shift_amount = newTemp(Ity_I64);
6891b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op = newTemp(Ity_I32);
6892b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6893b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op, get_gpr_w1(r1));
6894b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(uop, get_gpr_w1(r1));
6895b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   sign_mask = 2147483648U;
6896b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(shift_amount, binop(Iop_And64, mkexpr(op2addr), mkU64(63)));
6897b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Or32, binop(Iop_And32, binop(Iop_Shl32, mkexpr(uop),
6898b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          unop(Iop_64to8, mkexpr(shift_amount))), mkU32(~sign_mask)),
6899b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          binop(Iop_And32, mkexpr(uop), mkU32(sign_mask))));
6900b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(result));
6901b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_SHIFT_LEFT_32, op, shift_amount);
6902b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6903b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "sla";
6904b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
6905b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6906b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
6907b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_SLAK(UChar r1, UChar r3, IRTemp op2addr)
6908b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6909b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp uop = newTemp(Ity_I32);
6910b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
6911b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UInt sign_mask;
6912b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp shift_amount = newTemp(Ity_I64);
6913b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op = newTemp(Ity_I32);
6914b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6915b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op, get_gpr_w1(r3));
6916b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(uop, get_gpr_w1(r3));
6917b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   sign_mask = 2147483648U;
6918b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(shift_amount, binop(Iop_And64, mkexpr(op2addr), mkU64(63)));
6919b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Or32, binop(Iop_And32, binop(Iop_Shl32, mkexpr(uop),
6920b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          unop(Iop_64to8, mkexpr(shift_amount))), mkU32(~sign_mask)),
6921b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          binop(Iop_And32, mkexpr(uop), mkU32(sign_mask))));
6922b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(result));
6923b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_SHIFT_LEFT_32, op, shift_amount);
6924b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6925b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "slak";
6926b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
6927b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6928b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
6929b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_SLAG(UChar r1, UChar r3, IRTemp op2addr)
6930b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6931b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp uop = newTemp(Ity_I64);
6932b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
6933b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   ULong sign_mask;
6934b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp shift_amount = newTemp(Ity_I64);
6935b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op = newTemp(Ity_I64);
6936b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6937b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op, get_gpr_dw0(r3));
6938b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(uop, get_gpr_dw0(r3));
6939b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   sign_mask = 9223372036854775808ULL;
6940b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(shift_amount, binop(Iop_And64, mkexpr(op2addr), mkU64(63)));
6941b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Or64, binop(Iop_And64, binop(Iop_Shl64, mkexpr(uop),
6942b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          unop(Iop_64to8, mkexpr(shift_amount))), mkU64(~sign_mask)),
6943b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          binop(Iop_And64, mkexpr(uop), mkU64(sign_mask))));
6944b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(result));
6945b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_SHIFT_LEFT_64, op, shift_amount);
6946b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6947b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "slag";
6948b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
6949b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6950b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
6951b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_SLL(UChar r1, IRTemp op2addr)
6952b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6953b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, binop(Iop_Shl32, get_gpr_w1(r1), unop(Iop_64to8,
6954b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov              binop(Iop_And64, mkexpr(op2addr), mkU64(63)))));
6955b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6956b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "sll";
6957b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
6958b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6959b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
6960b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_SLLK(UChar r1, UChar r3, IRTemp op2addr)
6961b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6962b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, binop(Iop_Shl32, get_gpr_w1(r3), unop(Iop_64to8,
6963b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov              binop(Iop_And64, mkexpr(op2addr), mkU64(63)))));
6964b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6965b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "sllk";
6966b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
6967b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6968b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
6969b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_SLLG(UChar r1, UChar r3, IRTemp op2addr)
6970b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6971b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, binop(Iop_Shl64, get_gpr_dw0(r3), unop(Iop_64to8,
6972b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov               binop(Iop_And64, mkexpr(op2addr), mkU64(63)))));
6973b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6974b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "sllg";
6975b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
6976b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6977b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
6978b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_SRDA(UChar r1, IRTemp op2addr)
6979b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6980b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp p1 = newTemp(Ity_I64);
6981b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp p2 = newTemp(Ity_I64);
6982b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
6983b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6984b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(p1, unop(Iop_32Uto64, get_gpr_w1(r1)));
6985b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(p2, unop(Iop_32Uto64, get_gpr_w1(r1 + 1)));
6986b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Sar64, binop(Iop_Or64, binop(Iop_Shl64, mkexpr(p1),
6987b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkU8(32)), mkexpr(p2)), unop(Iop_64to8, binop(Iop_And64,
6988b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkexpr(op2addr), mkU64(63)))));
6989b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, unop(Iop_64HIto32, mkexpr(result)));
6990b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1 + 1, unop(Iop_64to32, mkexpr(result)));
6991b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putS(S390_CC_OP_LOAD_AND_TEST, result);
6992b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6993b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "srda";
6994b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
6995b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6996b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
6997b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_SRDL(UChar r1, IRTemp op2addr)
6998b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6999b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp p1 = newTemp(Ity_I64);
7000b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp p2 = newTemp(Ity_I64);
7001b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
7002b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7003b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(p1, unop(Iop_32Uto64, get_gpr_w1(r1)));
7004b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(p2, unop(Iop_32Uto64, get_gpr_w1(r1 + 1)));
7005b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Shr64, binop(Iop_Or64, binop(Iop_Shl64, mkexpr(p1),
7006b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkU8(32)), mkexpr(p2)), unop(Iop_64to8, binop(Iop_And64,
7007b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkexpr(op2addr), mkU64(63)))));
7008b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, unop(Iop_64HIto32, mkexpr(result)));
7009b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1 + 1, unop(Iop_64to32, mkexpr(result)));
7010b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7011b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "srdl";
7012b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7013b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7014b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7015b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_SRA(UChar r1, IRTemp op2addr)
7016b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7017b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
7018b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op = newTemp(Ity_I32);
7019b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7020b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op, get_gpr_w1(r1));
7021b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Sar32, mkexpr(op), unop(Iop_64to8, binop(Iop_And64,
7022b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkexpr(op2addr), mkU64(63)))));
7023b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(result));
7024b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putS(S390_CC_OP_LOAD_AND_TEST, result);
7025b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7026b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "sra";
7027b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7028b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7029b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7030b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_SRAK(UChar r1, UChar r3, IRTemp op2addr)
7031b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7032b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
7033b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op = newTemp(Ity_I32);
7034b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7035b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op, get_gpr_w1(r3));
7036b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Sar32, mkexpr(op), unop(Iop_64to8, binop(Iop_And64,
7037b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkexpr(op2addr), mkU64(63)))));
7038b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(result));
7039b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putS(S390_CC_OP_LOAD_AND_TEST, result);
7040b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7041b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "srak";
7042b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7043b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7044b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7045b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_SRAG(UChar r1, UChar r3, IRTemp op2addr)
7046b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7047b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
7048b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op = newTemp(Ity_I64);
7049b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7050b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op, get_gpr_dw0(r3));
7051b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Sar64, mkexpr(op), unop(Iop_64to8, binop(Iop_And64,
7052b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkexpr(op2addr), mkU64(63)))));
7053b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(result));
7054b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putS(S390_CC_OP_LOAD_AND_TEST, result);
7055b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7056b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "srag";
7057b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7058b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7059b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7060b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_SRL(UChar r1, IRTemp op2addr)
7061b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7062b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op = newTemp(Ity_I32);
7063b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7064b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op, get_gpr_w1(r1));
7065b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, binop(Iop_Shr32, mkexpr(op), unop(Iop_64to8, binop(Iop_And64,
7066b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov              mkexpr(op2addr), mkU64(63)))));
7067b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7068b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "srl";
7069b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7070b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7071b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7072b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_SRLK(UChar r1, UChar r3, IRTemp op2addr)
7073b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7074b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op = newTemp(Ity_I32);
7075b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7076b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op, get_gpr_w1(r3));
7077b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, binop(Iop_Shr32, mkexpr(op), unop(Iop_64to8, binop(Iop_And64,
7078b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov              mkexpr(op2addr), mkU64(63)))));
7079b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7080b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "srlk";
7081b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7082b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7083b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7084b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_SRLG(UChar r1, UChar r3, IRTemp op2addr)
7085b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7086b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op = newTemp(Ity_I64);
7087b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7088b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op, get_gpr_dw0(r3));
7089b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, binop(Iop_Shr64, mkexpr(op), unop(Iop_64to8, binop(Iop_And64,
7090b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov               mkexpr(op2addr), mkU64(63)))));
7091b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7092b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "srlg";
7093b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7094b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7095b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7096b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_ST(UChar r1, IRTemp op2addr)
7097b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7098b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(mkexpr(op2addr), get_gpr_w1(r1));
7099b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7100b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "st";
7101b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7102b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7103b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7104b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_STY(UChar r1, IRTemp op2addr)
7105b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7106b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(mkexpr(op2addr), get_gpr_w1(r1));
7107b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7108b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "sty";
7109b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7110b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7111b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7112b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_STG(UChar r1, IRTemp op2addr)
7113b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7114b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(mkexpr(op2addr), get_gpr_dw0(r1));
7115b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7116b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "stg";
7117b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7118b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7119b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7120b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_STRL(UChar r1, UInt i2)
7121b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7122b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(mkU64(guest_IA_curr_instr + ((ULong)(Long)(Int)i2 << 1)),
7123b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         get_gpr_w1(r1));
7124b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7125b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "strl";
7126b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7127b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7128b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7129b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_STGRL(UChar r1, UInt i2)
7130b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7131b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(mkU64(guest_IA_curr_instr + ((ULong)(Long)(Int)i2 << 1)),
7132b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         get_gpr_dw0(r1));
7133b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7134b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "stgrl";
7135b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7136b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7137b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7138b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_STC(UChar r1, IRTemp op2addr)
7139b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7140b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(mkexpr(op2addr), get_gpr_b7(r1));
7141b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7142b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "stc";
7143b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7144b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7145b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7146b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_STCY(UChar r1, IRTemp op2addr)
7147b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7148b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(mkexpr(op2addr), get_gpr_b7(r1));
7149b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7150b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "stcy";
7151b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7152b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7153b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7154b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_STCH(UChar r1, IRTemp op2addr)
7155b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7156b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(mkexpr(op2addr), get_gpr_b3(r1));
7157b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7158b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "stch";
7159b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7160b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7161b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7162b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_STCM(UChar r1, UChar r3, IRTemp op2addr)
7163b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7164b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UChar mask;
7165b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UChar n;
7166b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7167b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   mask = (UChar)r3;
7168b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   n = 0;
7169b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if ((mask & 8) != 0) {
7170b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      store(mkexpr(op2addr), get_gpr_b4(r1));
7171b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      n = n + 1;
7172b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
7173b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if ((mask & 4) != 0) {
7174b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      store(binop(Iop_Add64, mkexpr(op2addr), mkU64(n)), get_gpr_b5(r1));
7175b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      n = n + 1;
7176b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
7177b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if ((mask & 2) != 0) {
7178b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      store(binop(Iop_Add64, mkexpr(op2addr), mkU64(n)), get_gpr_b6(r1));
7179b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      n = n + 1;
7180b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
7181b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if ((mask & 1) != 0) {
7182b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      store(binop(Iop_Add64, mkexpr(op2addr), mkU64(n)), get_gpr_b7(r1));
7183b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
7184b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7185b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "stcm";
7186b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7187b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7188b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7189b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_STCMY(UChar r1, UChar r3, IRTemp op2addr)
7190b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7191b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UChar mask;
7192b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UChar n;
7193b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7194b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   mask = (UChar)r3;
7195b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   n = 0;
7196b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if ((mask & 8) != 0) {
7197b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      store(mkexpr(op2addr), get_gpr_b4(r1));
7198b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      n = n + 1;
7199b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
7200b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if ((mask & 4) != 0) {
7201b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      store(binop(Iop_Add64, mkexpr(op2addr), mkU64(n)), get_gpr_b5(r1));
7202b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      n = n + 1;
7203b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
7204b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if ((mask & 2) != 0) {
7205b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      store(binop(Iop_Add64, mkexpr(op2addr), mkU64(n)), get_gpr_b6(r1));
7206b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      n = n + 1;
7207b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
7208b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if ((mask & 1) != 0) {
7209b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      store(binop(Iop_Add64, mkexpr(op2addr), mkU64(n)), get_gpr_b7(r1));
7210b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
7211b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7212b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "stcmy";
7213b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7214b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7215b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7216b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_STCMH(UChar r1, UChar r3, IRTemp op2addr)
7217b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7218b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UChar mask;
7219b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UChar n;
7220b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7221b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   mask = (UChar)r3;
7222b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   n = 0;
7223b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if ((mask & 8) != 0) {
7224b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      store(mkexpr(op2addr), get_gpr_b0(r1));
7225b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      n = n + 1;
7226b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
7227b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if ((mask & 4) != 0) {
7228b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      store(binop(Iop_Add64, mkexpr(op2addr), mkU64(n)), get_gpr_b1(r1));
7229b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      n = n + 1;
7230b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
7231b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if ((mask & 2) != 0) {
7232b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      store(binop(Iop_Add64, mkexpr(op2addr), mkU64(n)), get_gpr_b2(r1));
7233b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      n = n + 1;
7234b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
7235b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if ((mask & 1) != 0) {
7236b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      store(binop(Iop_Add64, mkexpr(op2addr), mkU64(n)), get_gpr_b3(r1));
7237b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
7238b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7239b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "stcmh";
7240b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7241b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7242b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7243b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_STH(UChar r1, IRTemp op2addr)
7244b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7245b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(mkexpr(op2addr), get_gpr_hw3(r1));
7246b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7247b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "sth";
7248b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7249b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7250b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7251b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_STHY(UChar r1, IRTemp op2addr)
7252b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7253b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(mkexpr(op2addr), get_gpr_hw3(r1));
7254b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7255b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "sthy";
7256b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7257b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7258b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7259b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_STHRL(UChar r1, UInt i2)
7260b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7261b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(mkU64(guest_IA_curr_instr + ((ULong)(Long)(Int)i2 << 1)),
7262b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         get_gpr_hw3(r1));
7263b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7264b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "sthrl";
7265b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7266b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7267b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7268b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_STHH(UChar r1, IRTemp op2addr)
7269b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7270b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(mkexpr(op2addr), get_gpr_hw1(r1));
7271b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7272b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "sthh";
7273b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7274b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7275b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7276b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_STFH(UChar r1, IRTemp op2addr)
7277b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7278b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(mkexpr(op2addr), get_gpr_w0(r1));
7279b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7280b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "stfh";
7281b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7282b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7283b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7284b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_STOC(UChar r1, IRTemp op2addr)
7285b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7286b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* condition is checked in format handler */
7287b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(mkexpr(op2addr), get_gpr_w1(r1));
7288b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7289b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "stoc";
7290b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7291b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7292b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7293b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_STOCG(UChar r1, IRTemp op2addr)
7294b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7295b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* condition is checked in format handler */
7296b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(mkexpr(op2addr), get_gpr_dw0(r1));
7297b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7298b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "stocg";
7299b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7300b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7301b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7302b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_STPQ(UChar r1, IRTemp op2addr)
7303b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7304b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(mkexpr(op2addr), get_gpr_dw0(r1));
7305b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(binop(Iop_Add64, mkexpr(op2addr), mkU64(8)), get_gpr_dw0(r1 + 1));
7306b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7307b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "stpq";
7308b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7309b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7310b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7311b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_STRVH(UChar r1, IRTemp op2addr)
7312b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7313b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(mkexpr(op2addr), get_gpr_b7(r1));
7314b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(binop(Iop_Add64, mkexpr(op2addr), mkU64(1)), get_gpr_b6(r1));
7315b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7316b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "strvh";
7317b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7318b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7319b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7320b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_STRV(UChar r1, IRTemp op2addr)
7321b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7322b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(mkexpr(op2addr), get_gpr_b7(r1));
7323b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(binop(Iop_Add64, mkexpr(op2addr), mkU64(1)), get_gpr_b6(r1));
7324b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(binop(Iop_Add64, mkexpr(op2addr), mkU64(2)), get_gpr_b5(r1));
7325b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(binop(Iop_Add64, mkexpr(op2addr), mkU64(3)), get_gpr_b4(r1));
7326b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7327b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "strv";
7328b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7329b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7330b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7331b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_STRVG(UChar r1, IRTemp op2addr)
7332b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7333b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(mkexpr(op2addr), get_gpr_b7(r1));
7334b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(binop(Iop_Add64, mkexpr(op2addr), mkU64(1)), get_gpr_b6(r1));
7335b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(binop(Iop_Add64, mkexpr(op2addr), mkU64(2)), get_gpr_b5(r1));
7336b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(binop(Iop_Add64, mkexpr(op2addr), mkU64(3)), get_gpr_b4(r1));
7337b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(binop(Iop_Add64, mkexpr(op2addr), mkU64(4)), get_gpr_b3(r1));
7338b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(binop(Iop_Add64, mkexpr(op2addr), mkU64(5)), get_gpr_b2(r1));
7339b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(binop(Iop_Add64, mkexpr(op2addr), mkU64(6)), get_gpr_b1(r1));
7340b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(binop(Iop_Add64, mkexpr(op2addr), mkU64(7)), get_gpr_b0(r1));
7341b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7342b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "strvg";
7343b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7344b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7345b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7346b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_SR(UChar r1, UChar r2)
7347b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7348b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
7349b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
7350b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
7351b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7352b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1));
7353b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_w1(r2));
7354b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Sub32, mkexpr(op1), mkexpr(op2)));
7355b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_SUB_32, op1, op2);
7356b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(result));
7357b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7358b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "sr";
7359b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7360b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7361b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7362b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_SGR(UChar r1, UChar r2)
7363b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7364b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
7365b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
7366b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
7367b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7368b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_dw0(r1));
7369b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_dw0(r2));
7370b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Sub64, mkexpr(op1), mkexpr(op2)));
7371b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_SUB_64, op1, op2);
7372b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(result));
7373b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7374b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "sgr";
7375b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7376b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7377b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7378b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_SGFR(UChar r1, UChar r2)
7379b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7380b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
7381b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
7382b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
7383b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7384b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_dw0(r1));
7385b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, unop(Iop_32Sto64, get_gpr_w1(r2)));
7386b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Sub64, mkexpr(op1), mkexpr(op2)));
7387b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_SUB_64, op1, op2);
7388b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(result));
7389b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7390b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "sgfr";
7391b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7392b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7393b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7394b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_SRK(UChar r3, UChar r1, UChar r2)
7395b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7396b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
7397b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op3 = newTemp(Ity_I32);
7398b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
7399b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7400b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_w1(r2));
7401b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op3, get_gpr_w1(r3));
7402b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Sub32, mkexpr(op2), mkexpr(op3)));
7403b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_SUB_32, op2, op3);
7404b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(result));
7405b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7406b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "srk";
7407b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7408b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7409b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7410b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_SGRK(UChar r3, UChar r1, UChar r2)
7411b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7412b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
7413b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op3 = newTemp(Ity_I64);
7414b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
7415b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7416b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_dw0(r2));
7417b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op3, get_gpr_dw0(r3));
7418b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Sub64, mkexpr(op2), mkexpr(op3)));
7419b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_SUB_64, op2, op3);
7420b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(result));
7421b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7422b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "sgrk";
7423b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7424b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7425b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7426b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_S(UChar r1, IRTemp op2addr)
7427b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7428b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
7429b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
7430b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
7431b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7432b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1));
7433b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I32, mkexpr(op2addr)));
7434b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Sub32, mkexpr(op1), mkexpr(op2)));
7435b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_SUB_32, op1, op2);
7436b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(result));
7437b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7438b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "s";
7439b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7440b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7441b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7442b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_SY(UChar r1, IRTemp op2addr)
7443b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7444b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
7445b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
7446b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
7447b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7448b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1));
7449b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I32, mkexpr(op2addr)));
7450b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Sub32, mkexpr(op1), mkexpr(op2)));
7451b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_SUB_32, op1, op2);
7452b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(result));
7453b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7454b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "sy";
7455b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7456b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7457b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7458b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_SG(UChar r1, IRTemp op2addr)
7459b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7460b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
7461b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
7462b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
7463b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7464b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_dw0(r1));
7465b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I64, mkexpr(op2addr)));
7466b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Sub64, mkexpr(op1), mkexpr(op2)));
7467b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_SUB_64, op1, op2);
7468b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(result));
7469b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7470b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "sg";
7471b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7472b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7473b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7474b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_SGF(UChar r1, IRTemp op2addr)
7475b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7476b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
7477b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
7478b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
7479b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7480b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_dw0(r1));
7481b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, unop(Iop_32Sto64, load(Ity_I32, mkexpr(op2addr))));
7482b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Sub64, mkexpr(op1), mkexpr(op2)));
7483b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_SUB_64, op1, op2);
7484b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(result));
7485b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7486b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "sgf";
7487b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7488b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7489b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7490b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_SH(UChar r1, IRTemp op2addr)
7491b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7492b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
7493b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
7494b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
7495b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7496b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1));
7497b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, unop(Iop_16Sto32, load(Ity_I16, mkexpr(op2addr))));
7498b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Sub32, mkexpr(op1), mkexpr(op2)));
7499b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_SUB_32, op1, op2);
7500b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(result));
7501b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7502b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "sh";
7503b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7504b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7505b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7506b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_SHY(UChar r1, IRTemp op2addr)
7507b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7508b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
7509b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
7510b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
7511b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7512b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1));
7513b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, unop(Iop_16Sto32, load(Ity_I16, mkexpr(op2addr))));
7514b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Sub32, mkexpr(op1), mkexpr(op2)));
7515b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_SUB_32, op1, op2);
7516b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(result));
7517b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7518b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "shy";
7519b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7520b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7521b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7522b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_SHHHR(UChar r3 __attribute__((unused)), UChar r1, UChar r2)
7523b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7524b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
7525b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op3 = newTemp(Ity_I32);
7526b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
7527b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7528b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_w0(r1));
7529b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op3, get_gpr_w0(r2));
7530b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Sub32, mkexpr(op2), mkexpr(op3)));
7531b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_SUB_32, op2, op3);
7532b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w0(r1, mkexpr(result));
7533b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7534b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "shhhr";
7535b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7536b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7537b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7538b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_SHHLR(UChar r3 __attribute__((unused)), UChar r1, UChar r2)
7539b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7540b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
7541b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op3 = newTemp(Ity_I32);
7542b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
7543b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7544b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_w0(r1));
7545b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op3, get_gpr_w1(r2));
7546b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Sub32, mkexpr(op2), mkexpr(op3)));
7547b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putSS(S390_CC_OP_SIGNED_SUB_32, op2, op3);
7548b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w0(r1, mkexpr(result));
7549b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7550b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "shhlr";
7551b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7552b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7553b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7554b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_SLR(UChar r1, UChar r2)
7555b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7556b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
7557b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
7558b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
7559b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7560b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1));
7561b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_w1(r2));
7562b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Sub32, mkexpr(op1), mkexpr(op2)));
7563b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_SUB_32, op1, op2);
7564b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(result));
7565b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7566b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "slr";
7567b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7568b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7569b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7570b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_SLGR(UChar r1, UChar r2)
7571b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7572b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
7573b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
7574b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
7575b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7576b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_dw0(r1));
7577b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_dw0(r2));
7578b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Sub64, mkexpr(op1), mkexpr(op2)));
7579b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_SUB_64, op1, op2);
7580b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(result));
7581b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7582b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "slgr";
7583b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7584b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7585b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7586b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_SLGFR(UChar r1, UChar r2)
7587b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7588b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
7589b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
7590b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
7591b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7592b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_dw0(r1));
7593b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, unop(Iop_32Uto64, get_gpr_w1(r2)));
7594b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Sub64, mkexpr(op1), mkexpr(op2)));
7595b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_SUB_64, op1, op2);
7596b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(result));
7597b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7598b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "slgfr";
7599b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7600b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7601b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7602b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_SLRK(UChar r3, UChar r1, UChar r2)
7603b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7604b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
7605b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op3 = newTemp(Ity_I32);
7606b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
7607b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7608b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_w1(r2));
7609b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op3, get_gpr_w1(r3));
7610b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Sub32, mkexpr(op2), mkexpr(op3)));
7611b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_SUB_32, op2, op3);
7612b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(result));
7613b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7614b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "slrk";
7615b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7616b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7617b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7618b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_SLGRK(UChar r3, UChar r1, UChar r2)
7619b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7620b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
7621b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op3 = newTemp(Ity_I64);
7622b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
7623b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7624b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_dw0(r2));
7625b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op3, get_gpr_dw0(r3));
7626b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Sub64, mkexpr(op2), mkexpr(op3)));
7627b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_SUB_64, op2, op3);
7628b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(result));
7629b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7630b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "slgrk";
7631b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7632b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7633b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7634b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_SL(UChar r1, IRTemp op2addr)
7635b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7636b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
7637b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
7638b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
7639b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7640b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1));
7641b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I32, mkexpr(op2addr)));
7642b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Sub32, mkexpr(op1), mkexpr(op2)));
7643b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_SUB_32, op1, op2);
7644b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(result));
7645b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7646b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "sl";
7647b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7648b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7649b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7650b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_SLY(UChar r1, IRTemp op2addr)
7651b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7652b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
7653b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
7654b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
7655b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7656b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1));
7657b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I32, mkexpr(op2addr)));
7658b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Sub32, mkexpr(op1), mkexpr(op2)));
7659b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_SUB_32, op1, op2);
7660b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(result));
7661b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7662b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "sly";
7663b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7664b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7665b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7666b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_SLG(UChar r1, IRTemp op2addr)
7667b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7668b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
7669b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
7670b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
7671b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7672b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_dw0(r1));
7673b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I64, mkexpr(op2addr)));
7674b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Sub64, mkexpr(op1), mkexpr(op2)));
7675b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_SUB_64, op1, op2);
7676b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(result));
7677b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7678b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "slg";
7679b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7680b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7681b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7682b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_SLGF(UChar r1, IRTemp op2addr)
7683b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7684b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
7685b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
7686b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
7687b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7688b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_dw0(r1));
7689b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, unop(Iop_32Uto64, load(Ity_I32, mkexpr(op2addr))));
7690b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Sub64, mkexpr(op1), mkexpr(op2)));
7691b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_SUB_64, op1, op2);
7692b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(result));
7693b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7694b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "slgf";
7695b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7696b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7697b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7698b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_SLFI(UChar r1, UInt i2)
7699b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7700b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
7701b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UInt op2;
7702b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
7703b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7704b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1));
7705b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op2 = i2;
7706b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Sub32, mkexpr(op1), mkU32(op2)));
7707b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_SUB_32, op1, mktemp(Ity_I32,
7708b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                       mkU32(op2)));
7709b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(result));
7710b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7711b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "slfi";
7712b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7713b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7714b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7715b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_SLGFI(UChar r1, UInt i2)
7716b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7717b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
7718b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   ULong op2;
7719b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
7720b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7721b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_dw0(r1));
7722b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   op2 = (ULong)i2;
7723b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Sub64, mkexpr(op1), mkU64(op2)));
7724b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_SUB_64, op1, mktemp(Ity_I64,
7725b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                       mkU64(op2)));
7726b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(result));
7727b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7728b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "slgfi";
7729b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7730b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7731b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7732b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_SLHHHR(UChar r3 __attribute__((unused)), UChar r1, UChar r2)
7733b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7734b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
7735b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op3 = newTemp(Ity_I32);
7736b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
7737b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7738b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_w0(r1));
7739b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op3, get_gpr_w0(r2));
7740b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Sub32, mkexpr(op2), mkexpr(op3)));
7741b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_SUB_32, op2, op3);
7742b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w0(r1, mkexpr(result));
7743b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7744b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "slhhhr";
7745b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7746b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7747b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7748b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_SLHHLR(UChar r3 __attribute__((unused)), UChar r1, UChar r2)
7749b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7750b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
7751b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op3 = newTemp(Ity_I32);
7752b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
7753b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7754b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_w0(r1));
7755b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op3, get_gpr_w1(r2));
7756b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Sub32, mkexpr(op2), mkexpr(op3)));
7757b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_SUB_32, op2, op3);
7758b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w0(r1, mkexpr(result));
7759b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7760b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "slhhlr";
7761b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7762b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7763b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7764b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_SLBR(UChar r1, UChar r2)
7765b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7766b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
7767b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
7768b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
7769b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp borrow_in = newTemp(Ity_I32);
7770b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7771b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1));
7772b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_w1(r2));
7773b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(borrow_in, binop(Iop_Sub32, mkU32(1), binop(Iop_Shr32,
7774b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          s390_call_calculate_cc(), mkU8(1))));
7775b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Sub32, binop(Iop_Sub32, mkexpr(op1), mkexpr(op2)),
7776b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkexpr(borrow_in)));
7777b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZZ(S390_CC_OP_UNSIGNED_SUBB_32, op1, op2, borrow_in);
7778b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(result));
7779b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7780b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "slbr";
7781b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7782b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7783b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7784b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_SLBGR(UChar r1, UChar r2)
7785b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7786b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
7787b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
7788b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
7789b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp borrow_in = newTemp(Ity_I64);
7790b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7791b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_dw0(r1));
7792b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_dw0(r2));
7793b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(borrow_in, unop(Iop_32Uto64, binop(Iop_Sub32, mkU32(1),
7794b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          binop(Iop_Shr32, s390_call_calculate_cc(), mkU8(1)))));
7795b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Sub64, binop(Iop_Sub64, mkexpr(op1), mkexpr(op2)),
7796b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkexpr(borrow_in)));
7797b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZZ(S390_CC_OP_UNSIGNED_SUBB_64, op1, op2, borrow_in);
7798b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(result));
7799b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7800b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "slbgr";
7801b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7802b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7803b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7804b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_SLB(UChar r1, IRTemp op2addr)
7805b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7806b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
7807b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
7808b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
7809b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp borrow_in = newTemp(Ity_I32);
7810b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7811b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1));
7812b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I32, mkexpr(op2addr)));
7813b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(borrow_in, binop(Iop_Sub32, mkU32(1), binop(Iop_Shr32,
7814b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          s390_call_calculate_cc(), mkU8(1))));
7815b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Sub32, binop(Iop_Sub32, mkexpr(op1), mkexpr(op2)),
7816b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkexpr(borrow_in)));
7817b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZZ(S390_CC_OP_UNSIGNED_SUBB_32, op1, op2, borrow_in);
7818b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(result));
7819b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7820b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "slb";
7821b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7822b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7823b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7824b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_SLBG(UChar r1, IRTemp op2addr)
7825b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7826b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
7827b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
7828b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
7829b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp borrow_in = newTemp(Ity_I64);
7830b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7831b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_dw0(r1));
7832b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I64, mkexpr(op2addr)));
7833b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(borrow_in, unop(Iop_32Uto64, binop(Iop_Sub32, mkU32(1),
7834b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          binop(Iop_Shr32, s390_call_calculate_cc(), mkU8(1)))));
7835b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Sub64, binop(Iop_Sub64, mkexpr(op1), mkexpr(op2)),
7836b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkexpr(borrow_in)));
7837b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZZ(S390_CC_OP_UNSIGNED_SUBB_64, op1, op2, borrow_in);
7838b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(result));
7839b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7840b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "slbg";
7841b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7842b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7843b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7844b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_SVC(UChar i)
7845b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7846b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp sysno = newTemp(Ity_I64);
7847b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7848b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (i != 0) {
7849b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(sysno, mkU64(i));
7850b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } else {
7851b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(sysno, unop(Iop_32Uto64, get_gpr_w1(1)));
7852b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
7853b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   system_call(mkexpr(sysno));
7854b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7855b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "svc";
7856b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7857b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7858b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7859b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_TS(IRTemp op2addr)
7860b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7861b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp value = newTemp(Ity_I8);
7862b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7863b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(value, load(Ity_I8, mkexpr(op2addr)));
7864b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZ(S390_CC_OP_TEST_AND_SET, value);
7865b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(mkexpr(op2addr), mkU8(255));
7866b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7867b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "ts";
7868b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7869b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7870b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7871b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_TM(UChar i2, IRTemp op1addr)
7872b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7873b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UChar mask;
7874b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp value = newTemp(Ity_I8);
7875b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7876b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   mask = i2;
7877b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(value, load(Ity_I8, mkexpr(op1addr)));
7878b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_TEST_UNDER_MASK_8, value, mktemp(Ity_I8,
7879b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                       mkU8(mask)));
7880b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7881b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "tm";
7882b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7883b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7884b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7885b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_TMY(UChar i2, IRTemp op1addr)
7886b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7887b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UChar mask;
7888b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp value = newTemp(Ity_I8);
7889b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7890b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   mask = i2;
7891b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(value, load(Ity_I8, mkexpr(op1addr)));
7892b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_TEST_UNDER_MASK_8, value, mktemp(Ity_I8,
7893b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                       mkU8(mask)));
7894b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7895b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "tmy";
7896b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7897b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7898b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7899b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_TMHH(UChar r1, UShort i2)
7900b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7901b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UShort mask;
7902b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp value = newTemp(Ity_I16);
7903b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7904b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   mask = i2;
7905b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(value, get_gpr_hw0(r1));
7906b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_TEST_UNDER_MASK_16, value, mktemp(Ity_I16,
7907b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                       mkU16(mask)));
7908b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7909b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "tmhh";
7910b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7911b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7912b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7913b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_TMHL(UChar r1, UShort i2)
7914b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7915b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UShort mask;
7916b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp value = newTemp(Ity_I16);
7917b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7918b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   mask = i2;
7919b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(value, get_gpr_hw1(r1));
7920b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_TEST_UNDER_MASK_16, value, mktemp(Ity_I16,
7921b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                       mkU16(mask)));
7922b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7923b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "tmhl";
7924b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7925b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7926b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7927b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_TMLH(UChar r1, UShort i2)
7928b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7929b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UShort mask;
7930b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp value = newTemp(Ity_I16);
7931b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7932b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   mask = i2;
7933b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(value, get_gpr_hw2(r1));
7934b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_TEST_UNDER_MASK_16, value, mktemp(Ity_I16,
7935b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                       mkU16(mask)));
7936b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7937b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "tmlh";
7938b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7939b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7940b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7941b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_TMLL(UChar r1, UShort i2)
7942b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7943b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UShort mask;
7944b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp value = newTemp(Ity_I16);
7945b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7946b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   mask = i2;
7947b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(value, get_gpr_hw3(r1));
7948b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putZZ(S390_CC_OP_TEST_UNDER_MASK_16, value, mktemp(Ity_I16,
7949b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                       mkU16(mask)));
7950b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7951b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "tmll";
7952b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7953b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7954b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7955b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_EFPC(UChar r1)
7956b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7957b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, get_fpc_w0());
7958b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7959b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "efpc";
7960b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7961b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7962b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7963b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LER(UChar r1, UChar r2)
7964b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7965b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_w0(r1, get_fpr_w0(r2));
7966b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7967b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "ler";
7968b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7969b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7970b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7971b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LDR(UChar r1, UChar r2)
7972b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7973b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_dw0(r1, get_fpr_dw0(r2));
7974b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7975b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "ldr";
7976b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7977b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7978b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7979b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LXR(UChar r1, UChar r2)
7980b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7981b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_dw0(r1, get_fpr_dw0(r2));
7982b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_dw0(r1 + 2, get_fpr_dw0(r2 + 2));
7983b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7984b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lxr";
7985b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7986b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7987b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7988b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LE(UChar r1, IRTemp op2addr)
7989b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7990b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_w0(r1, load(Ity_F32, mkexpr(op2addr)));
7991b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7992b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "le";
7993b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
7994b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
7995b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
7996b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LD(UChar r1, IRTemp op2addr)
7997b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
7998b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_dw0(r1, load(Ity_F64, mkexpr(op2addr)));
7999b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8000b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "ld";
8001b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
8002b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8003b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
8004b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LEY(UChar r1, IRTemp op2addr)
8005b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
8006b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_w0(r1, load(Ity_F32, mkexpr(op2addr)));
8007b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8008b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "ley";
8009b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
8010b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8011b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
8012b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LDY(UChar r1, IRTemp op2addr)
8013b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
8014b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_dw0(r1, load(Ity_F64, mkexpr(op2addr)));
8015b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8016b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "ldy";
8017b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
8018b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8019b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
8020b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LFPC(IRTemp op2addr)
8021b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
8022b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpc_w0(load(Ity_I32, mkexpr(op2addr)));
8023b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8024b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lfpc";
8025b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
8026b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8027b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
8028b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LZER(UChar r1)
8029b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
8030b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_w0(r1, mkF32i(0x0));
8031b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8032b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lzer";
8033b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
8034b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8035b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
8036b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LZDR(UChar r1)
8037b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
8038b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_dw0(r1, mkF64i(0x0));
8039b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8040b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lzdr";
8041b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
8042b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8043b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
8044b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LZXR(UChar r1)
8045b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
8046b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_dw0(r1, mkF64i(0x0));
8047b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_dw0(r1 + 2, mkF64i(0x0));
8048b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8049b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lzxr";
8050b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
8051b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8052b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
8053b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_SRNM(IRTemp op2addr)
8054b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
8055b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UInt mask;
8056b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8057b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   mask = 3;
8058b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpc_w0(binop(Iop_Or32, binop(Iop_And32, get_fpc_w0(), mkU32(~mask)),
8059b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov              binop(Iop_And32, unop(Iop_64to32, mkexpr(op2addr)), mkU32(mask)))
8060b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov              );
8061b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8062b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "srnm";
8063b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
8064b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8065b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
8066b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_SFPC(UChar r1)
8067b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
8068b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpc_w0(get_gpr_w1(r1));
8069b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8070b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "sfpc";
8071b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
8072b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8073b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
8074b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_STE(UChar r1, IRTemp op2addr)
8075b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
8076b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(mkexpr(op2addr), get_fpr_w0(r1));
8077b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8078b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "ste";
8079b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
8080b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8081b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
8082b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_STD(UChar r1, IRTemp op2addr)
8083b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
8084b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(mkexpr(op2addr), get_fpr_dw0(r1));
8085b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8086b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "std";
8087b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
8088b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8089b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
8090b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_STEY(UChar r1, IRTemp op2addr)
8091b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
8092b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(mkexpr(op2addr), get_fpr_w0(r1));
8093b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8094b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "stey";
8095b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
8096b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8097b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
8098b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_STDY(UChar r1, IRTemp op2addr)
8099b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
8100b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(mkexpr(op2addr), get_fpr_dw0(r1));
8101b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8102b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "stdy";
8103b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
8104b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8105b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
8106b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_STFPC(IRTemp op2addr)
8107b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
8108b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(mkexpr(op2addr), get_fpc_w0());
8109b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8110b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "stfpc";
8111b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
8112b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8113b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
8114b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_AEBR(UChar r1, UChar r2)
8115b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
8116b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_F32);
8117b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_F32);
8118b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_F32);
8119b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8120b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_fpr_w0(r1));
8121b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_fpr_w0(r2));
8122b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, triop(Iop_AddF32, mkU32(Irrm_NEAREST), mkexpr(op1),
8123b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkexpr(op2)));
8124b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putF(S390_CC_OP_BFP_RESULT_32, result);
8125b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_w0(r1, mkexpr(result));
8126b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8127b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "aebr";
8128b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
8129b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8130b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
8131b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_ADBR(UChar r1, UChar r2)
8132b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
8133b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_F64);
8134b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_F64);
8135b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_F64);
8136b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8137b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_fpr_dw0(r1));
8138b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_fpr_dw0(r2));
8139b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, triop(Iop_AddF64, mkU32(Irrm_NEAREST), mkexpr(op1),
8140b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkexpr(op2)));
8141b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putF(S390_CC_OP_BFP_RESULT_64, result);
8142b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_dw0(r1, mkexpr(result));
8143b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8144b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "adbr";
8145b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
8146b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8147b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
8148b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_AEB(UChar r1, IRTemp op2addr)
8149b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
8150b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_F32);
8151b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_F32);
8152b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_F32);
8153b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8154b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_fpr_w0(r1));
8155b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_F32, mkexpr(op2addr)));
8156b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, triop(Iop_AddF32, mkU32(Irrm_NEAREST), mkexpr(op1),
8157b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkexpr(op2)));
8158b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putF(S390_CC_OP_BFP_RESULT_32, result);
8159b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_w0(r1, mkexpr(result));
8160b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8161b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "aeb";
8162b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
8163b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8164b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
8165b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_ADB(UChar r1, IRTemp op2addr)
8166b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
8167b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_F64);
8168b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_F64);
8169b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_F64);
8170b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8171b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_fpr_dw0(r1));
8172b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_F64, mkexpr(op2addr)));
8173b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, triop(Iop_AddF64, mkU32(Irrm_NEAREST), mkexpr(op1),
8174b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkexpr(op2)));
8175b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putF(S390_CC_OP_BFP_RESULT_64, result);
8176b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_dw0(r1, mkexpr(result));
8177b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8178b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "adb";
8179b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
8180b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8181b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
8182b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CEFBR(UChar r1, UChar r2)
8183b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
8184b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
8185b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8186b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_w1(r2));
8187b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_w0(r1, binop(Iop_I32StoF32, mkU32(Irrm_NEAREST), mkexpr(op2)));
8188b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8189b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "cefbr";
8190b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
8191b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8192b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
8193b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CDFBR(UChar r1, UChar r2)
8194b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
8195b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
8196b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8197b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_w1(r2));
8198b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_dw0(r1, unop(Iop_I32StoF64, mkexpr(op2)));
8199b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8200b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "cdfbr";
8201b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
8202b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8203b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
8204b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CEGBR(UChar r1, UChar r2)
8205b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
8206b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
8207b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8208b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_dw0(r2));
8209b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_w0(r1, binop(Iop_I64StoF32, mkU32(Irrm_NEAREST), mkexpr(op2)));
8210b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8211b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "cegbr";
8212b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
8213b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8214b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
8215b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CDGBR(UChar r1, UChar r2)
8216b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
8217b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
8218b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8219b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_dw0(r2));
8220b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_dw0(r1, binop(Iop_I64StoF64, mkU32(Irrm_NEAREST), mkexpr(op2)));
8221b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8222b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "cdgbr";
8223b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
8224b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8225b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
8226b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CFEBR(UChar r3, UChar r1, UChar r2)
8227b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
8228b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op = newTemp(Ity_F32);
8229b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
8230b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8231b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op, get_fpr_w0(r2));
8232b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_F32toI32S, mkU32(encode_rounding_mode(r3)),
8233b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkexpr(op)));
8234b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(result));
8235b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putF(S390_CC_OP_BFP_32_TO_INT_32, op);
8236b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8237b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "cfebr";
8238b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
8239b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8240b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
8241b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CFDBR(UChar r3, UChar r1, UChar r2)
8242b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
8243b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op = newTemp(Ity_F64);
8244b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
8245b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8246b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op, get_fpr_dw0(r2));
8247b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_F64toI32S, mkU32(encode_rounding_mode(r3)),
8248b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkexpr(op)));
8249b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(result));
8250b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putF(S390_CC_OP_BFP_64_TO_INT_32, op);
8251b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8252b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "cfdbr";
8253b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
8254b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8255b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
8256b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CGEBR(UChar r3, UChar r1, UChar r2)
8257b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
8258b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op = newTemp(Ity_F32);
8259b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
8260b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8261b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op, get_fpr_w0(r2));
8262b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_F32toI64S, mkU32(encode_rounding_mode(r3)),
8263b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkexpr(op)));
8264b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(result));
8265b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putF(S390_CC_OP_BFP_32_TO_INT_64, op);
8266b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8267b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "cgebr";
8268b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
8269b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8270b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
8271b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CGDBR(UChar r3, UChar r1, UChar r2)
8272b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
8273b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op = newTemp(Ity_F64);
8274b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
8275b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8276b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op, get_fpr_dw0(r2));
8277b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_F64toI64S, mkU32(encode_rounding_mode(r3)),
8278b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkexpr(op)));
8279b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(result));
8280b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putF(S390_CC_OP_BFP_64_TO_INT_64, op);
8281b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8282b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "cgdbr";
8283b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
8284b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8285b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
8286b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_DEBR(UChar r1, UChar r2)
8287b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
8288b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_F32);
8289b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_F32);
8290b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_F32);
8291b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8292b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_fpr_w0(r1));
8293b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_fpr_w0(r2));
8294b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, triop(Iop_DivF32, mkU32(Irrm_NEAREST), mkexpr(op1),
8295b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkexpr(op2)));
8296b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_w0(r1, mkexpr(result));
8297b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8298b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "debr";
8299b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
8300b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8301b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
8302b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_DDBR(UChar r1, UChar r2)
8303b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
8304b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_F64);
8305b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_F64);
8306b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_F64);
8307b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8308b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_fpr_dw0(r1));
8309b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_fpr_dw0(r2));
8310b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, triop(Iop_DivF64, mkU32(Irrm_NEAREST), mkexpr(op1),
8311b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkexpr(op2)));
8312b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_dw0(r1, mkexpr(result));
8313b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8314b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "ddbr";
8315b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
8316b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8317b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
8318b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_DEB(UChar r1, IRTemp op2addr)
8319b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
8320b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_F32);
8321b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_F32);
8322b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_F32);
8323b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8324b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_fpr_w0(r1));
8325b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_F32, mkexpr(op2addr)));
8326b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, triop(Iop_DivF32, mkU32(Irrm_NEAREST), mkexpr(op1),
8327b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkexpr(op2)));
8328b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_w0(r1, mkexpr(result));
8329b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8330b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "deb";
8331b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
8332b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8333b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
8334b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_DDB(UChar r1, IRTemp op2addr)
8335b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
8336b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_F64);
8337b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_F64);
8338b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_F64);
8339b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8340b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_fpr_dw0(r1));
8341b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_F64, mkexpr(op2addr)));
8342b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, triop(Iop_DivF64, mkU32(Irrm_NEAREST), mkexpr(op1),
8343b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkexpr(op2)));
8344b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_dw0(r1, mkexpr(result));
8345b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8346b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "ddb";
8347b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
8348b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8349b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
8350b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LTEBR(UChar r1, UChar r2)
8351b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
8352b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_F32);
8353b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8354b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, get_fpr_w0(r2));
8355b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_w0(r1, mkexpr(result));
8356b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putF(S390_CC_OP_BFP_RESULT_32, result);
8357b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8358b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "ltebr";
8359b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
8360b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8361b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
8362b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LTDBR(UChar r1, UChar r2)
8363b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
8364b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_F64);
8365b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8366b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, get_fpr_dw0(r2));
8367b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_dw0(r1, mkexpr(result));
8368b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putF(S390_CC_OP_BFP_RESULT_64, result);
8369b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8370b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "ltdbr";
8371b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
8372b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8373b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
8374b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LCEBR(UChar r1, UChar r2)
8375b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
8376b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_F32);
8377b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8378b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, unop(Iop_NegF32, get_fpr_w0(r2)));
8379b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_w0(r1, mkexpr(result));
8380b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putF(S390_CC_OP_BFP_RESULT_32, result);
8381b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8382b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lcebr";
8383b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
8384b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8385b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
8386b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LCDBR(UChar r1, UChar r2)
8387b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
8388b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_F64);
8389b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8390b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, unop(Iop_NegF64, get_fpr_dw0(r2)));
8391b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_dw0(r1, mkexpr(result));
8392b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putF(S390_CC_OP_BFP_RESULT_64, result);
8393b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8394b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lcdbr";
8395b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
8396b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8397b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
8398b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LDEBR(UChar r1, UChar r2)
8399b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
8400b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op = newTemp(Ity_F32);
8401b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8402b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op, get_fpr_w0(r2));
8403b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_dw0(r1, unop(Iop_F32toF64, mkexpr(op)));
8404b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8405b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "ldebr";
8406b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
8407b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8408b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
8409b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LDEB(UChar r1, IRTemp op2addr)
8410b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
8411b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op = newTemp(Ity_F32);
8412b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8413b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op, load(Ity_F32, mkexpr(op2addr)));
8414b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_dw0(r1, unop(Iop_F32toF64, mkexpr(op)));
8415b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8416b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "ldeb";
8417b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
8418b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8419b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
8420b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LEDBR(UChar r1, UChar r2)
8421b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
8422b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op = newTemp(Ity_F64);
8423b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8424b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op, get_fpr_dw0(r2));
8425b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_w0(r1, binop(Iop_F64toF32, mkU32(Irrm_NEAREST), mkexpr(op)));
8426b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8427b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "ledbr";
8428b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
8429b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8430b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
8431b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_MEEBR(UChar r1, UChar r2)
8432b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
8433b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_F32);
8434b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_F32);
8435b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_F32);
8436b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8437b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_fpr_w0(r1));
8438b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_fpr_w0(r2));
8439b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, triop(Iop_MulF32, mkU32(Irrm_NEAREST), mkexpr(op1),
8440b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkexpr(op2)));
8441b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_w0(r1, mkexpr(result));
8442b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8443b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "meebr";
8444b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
8445b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8446b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
8447b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_MDBR(UChar r1, UChar r2)
8448b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
8449b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_F64);
8450b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_F64);
8451b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_F64);
8452b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8453b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_fpr_dw0(r1));
8454b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_fpr_dw0(r2));
8455b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, triop(Iop_MulF64, mkU32(Irrm_NEAREST), mkexpr(op1),
8456b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkexpr(op2)));
8457b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_dw0(r1, mkexpr(result));
8458b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8459b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "mdbr";
8460b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
8461b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8462b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
8463b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_MEEB(UChar r1, IRTemp op2addr)
8464b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
8465b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_F32);
8466b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_F32);
8467b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_F32);
8468b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8469b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_fpr_w0(r1));
8470b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_F32, mkexpr(op2addr)));
8471b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, triop(Iop_MulF32, mkU32(Irrm_NEAREST), mkexpr(op1),
8472b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkexpr(op2)));
8473b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_w0(r1, mkexpr(result));
8474b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8475b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "meeb";
8476b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
8477b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8478b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
8479b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_MDB(UChar r1, IRTemp op2addr)
8480b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
8481b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_F64);
8482b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_F64);
8483b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_F64);
8484b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8485b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_fpr_dw0(r1));
8486b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_F64, mkexpr(op2addr)));
8487b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, triop(Iop_MulF64, mkU32(Irrm_NEAREST), mkexpr(op1),
8488b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkexpr(op2)));
8489b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_dw0(r1, mkexpr(result));
8490b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8491b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "mdb";
8492b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
8493b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8494b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
8495b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_SEBR(UChar r1, UChar r2)
8496b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
8497b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_F32);
8498b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_F32);
8499b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_F32);
8500b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8501b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_fpr_w0(r1));
8502b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_fpr_w0(r2));
8503b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, triop(Iop_SubF32, mkU32(Irrm_NEAREST), mkexpr(op1),
8504b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkexpr(op2)));
8505b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putF(S390_CC_OP_BFP_RESULT_32, result);
8506b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_w0(r1, mkexpr(result));
8507b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8508b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "sebr";
8509b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
8510b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8511b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
8512b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_SDBR(UChar r1, UChar r2)
8513b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
8514b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_F64);
8515b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_F64);
8516b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_F64);
8517b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8518b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_fpr_dw0(r1));
8519b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_fpr_dw0(r2));
8520b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, triop(Iop_SubF64, mkU32(Irrm_NEAREST), mkexpr(op1),
8521b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkexpr(op2)));
8522b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putF(S390_CC_OP_BFP_RESULT_64, result);
8523b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_dw0(r1, mkexpr(result));
8524b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8525b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "sdbr";
8526b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
8527b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8528b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
8529b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_SEB(UChar r1, IRTemp op2addr)
8530b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
8531b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_F32);
8532b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_F32);
8533b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_F32);
8534b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8535b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_fpr_w0(r1));
8536b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_F32, mkexpr(op2addr)));
8537b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, triop(Iop_SubF32, mkU32(Irrm_NEAREST), mkexpr(op1),
8538b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkexpr(op2)));
8539b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putF(S390_CC_OP_BFP_RESULT_32, result);
8540b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_w0(r1, mkexpr(result));
8541b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8542b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "seb";
8543b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
8544b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8545b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
8546b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_SDB(UChar r1, IRTemp op2addr)
8547b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
8548b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_F64);
8549b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_F64);
8550b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_F64);
8551b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8552b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_fpr_dw0(r1));
8553b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_F64, mkexpr(op2addr)));
8554b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, triop(Iop_SubF64, mkU32(Irrm_NEAREST), mkexpr(op1),
8555b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkexpr(op2)));
8556b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putF(S390_CC_OP_BFP_RESULT_64, result);
8557b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_dw0(r1, mkexpr(result));
8558b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8559b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "sdb";
8560b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
8561b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8562b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8563b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
8564b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CLC(UChar length, IRTemp start1, IRTemp start2)
8565b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
8566b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp current1 = newTemp(Ity_I8);
8567b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp current2 = newTemp(Ity_I8);
8568b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp counter = newTemp(Ity_I64);
8569b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8570b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(counter, get_counter_dw0());
8571b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_counter_dw0(mkU64(0));
8572b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8573b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(current1, load(Ity_I8, binop(Iop_Add64, mkexpr(start1),
8574b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                       mkexpr(counter))));
8575b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(current2, load(Ity_I8, binop(Iop_Add64, mkexpr(start2),
8576b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                       mkexpr(counter))));
8577b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_put2(S390_CC_OP_UNSIGNED_COMPARE, current1, current2,
8578b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                      False);
8579b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8580b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* Both fields differ ? */
8581b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if_condition_goto(binop(Iop_CmpNE8, mkexpr(current1), mkexpr(current2)),
8582b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     guest_IA_next_instr);
8583b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8584b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* Check for end of field */
8585b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_counter_dw0(binop(Iop_Add64, mkexpr(counter), mkU64(1)));
8586b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if_condition_goto(binop(Iop_CmpNE64, mkexpr(counter), mkU64(length)),
8587b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     guest_IA_curr_instr);
8588b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_counter_dw0(mkU64(0));
8589b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8590b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "clc";
8591b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
8592b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8593b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
8594b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CLCL(UChar r1, UChar r2)
8595b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
8596b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp addr1 = newTemp(Ity_I64);
8597b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp addr2 = newTemp(Ity_I64);
8598b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp addr1_load = newTemp(Ity_I64);
8599b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp addr2_load = newTemp(Ity_I64);
8600b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp len1 = newTemp(Ity_I32);
8601b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp len2 = newTemp(Ity_I32);
8602b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp r1p1 = newTemp(Ity_I32);   /* contents of r1 + 1 */
8603b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp r2p1 = newTemp(Ity_I32);   /* contents of r2 + 1 */
8604b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp single1 = newTemp(Ity_I8);
8605b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp single2 = newTemp(Ity_I8);
8606b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp pad = newTemp(Ity_I8);
8607b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8608b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(addr1, get_gpr_dw0(r1));
8609b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(r1p1, get_gpr_w1(r1 + 1));
8610b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(len1, binop(Iop_And32, mkexpr(r1p1), mkU32(0x00ffffff)));
8611b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(addr2, get_gpr_dw0(r2));
8612b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(r2p1, get_gpr_w1(r2 + 1));
8613b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(len2, binop(Iop_And32, mkexpr(r2p1), mkU32(0x00ffffff)));
8614b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(pad, get_gpr_b4(r2 + 1));
8615b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8616b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* len1 == 0 and len2 == 0? Exit */
8617b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_set(0);
8618b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if_condition_goto(binop(Iop_CmpEQ32, binop(Iop_Or32, mkexpr(len1),
8619b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                              mkexpr(len2)), mkU32(0)),
8620b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     guest_IA_next_instr);
8621b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8622b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* Because mkite evaluates both the then-clause and the else-clause
8623b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      we cannot load directly from addr1 here. If len1 is 0, then adddr1
8624b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      may be NULL and loading from there would segfault. So we provide a
8625b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      valid dummy address in that case. Loading from there does no harm and
8626b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      the value will be discarded at runtime. */
8627b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(addr1_load,
8628b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkite(binop(Iop_CmpEQ32, mkexpr(len1), mkU32(0)),
8629b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                mkU64(guest_IA_curr_instr), mkexpr(addr1)));
8630b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(single1,
8631b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkite(binop(Iop_CmpEQ32, mkexpr(len1), mkU32(0)),
8632b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                mkexpr(pad), load(Ity_I8, mkexpr(addr1_load))));
8633b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8634b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(addr2_load,
8635b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkite(binop(Iop_CmpEQ32, mkexpr(len2), mkU32(0)),
8636b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                mkU64(guest_IA_curr_instr), mkexpr(addr2)));
8637b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(single2,
8638b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkite(binop(Iop_CmpEQ32, mkexpr(len2), mkU32(0)),
8639b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                mkexpr(pad), load(Ity_I8, mkexpr(addr2_load))));
8640b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8641b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_put2(S390_CC_OP_UNSIGNED_COMPARE, single1, single2, False);
8642b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* Fields differ ? */
8643b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if_condition_goto(binop(Iop_CmpNE8, mkexpr(single1), mkexpr(single2)),
8644b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     guest_IA_next_instr);
8645b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8646b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* Update len1 and addr1, unless len1 == 0. */
8647b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1,
8648b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov               mkite(binop(Iop_CmpEQ32, mkexpr(len1), mkU32(0)),
8649b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     mkexpr(addr1),
8650b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     binop(Iop_Add64, mkexpr(addr1), mkU64(1))));
8651b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8652b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* When updating len1 we must not modify bits (r1+1)[0:39] */
8653b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1 + 1,
8654b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov              mkite(binop(Iop_CmpEQ32, mkexpr(len1), mkU32(0)),
8655b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    binop(Iop_And32, mkexpr(r1p1), mkU32(0xFF000000u)),
8656b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    binop(Iop_Sub32, mkexpr(r1p1), mkU32(1))));
8657b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8658b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* Update len2 and addr2, unless len2 == 0. */
8659b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r2,
8660b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov               mkite(binop(Iop_CmpEQ32, mkexpr(len2), mkU32(0)),
8661b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     mkexpr(addr2),
8662b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     binop(Iop_Add64, mkexpr(addr2), mkU64(1))));
8663b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8664b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* When updating len2 we must not modify bits (r2+1)[0:39] */
8665b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r2 + 1,
8666b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov              mkite(binop(Iop_CmpEQ32, mkexpr(len2), mkU32(0)),
8667b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    binop(Iop_And32, mkexpr(r2p1), mkU32(0xFF000000u)),
8668b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    binop(Iop_Sub32, mkexpr(r2p1), mkU32(1))));
8669b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8670b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   always_goto_and_chase(guest_IA_curr_instr);
8671b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8672b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "clcl";
8673b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
8674b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8675b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
8676b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CLCLE(UChar r1, UChar r3, IRTemp pad2)
8677b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
8678b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp addr1, addr3, addr1_load, addr3_load, len1, len3, single1, single3;
8679b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8680b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   addr1 = newTemp(Ity_I64);
8681b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   addr3 = newTemp(Ity_I64);
8682b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   addr1_load = newTemp(Ity_I64);
8683b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   addr3_load = newTemp(Ity_I64);
8684b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   len1 = newTemp(Ity_I64);
8685b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   len3 = newTemp(Ity_I64);
8686b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   single1 = newTemp(Ity_I8);
8687b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   single3 = newTemp(Ity_I8);
8688b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8689b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(addr1, get_gpr_dw0(r1));
8690b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(len1, get_gpr_dw0(r1 + 1));
8691b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(addr3, get_gpr_dw0(r3));
8692b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(len3, get_gpr_dw0(r3 + 1));
8693b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8694b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* len1 == 0 and len3 == 0? Exit */
8695b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_set(0);
8696b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if_condition_goto(binop(Iop_CmpEQ64,binop(Iop_Or64, mkexpr(len1),
8697b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                             mkexpr(len3)), mkU64(0)),
8698b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     guest_IA_next_instr);
8699b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8700b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* A mux requires both ways to be possible. This is a way to prevent clcle
8701b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      from reading from addr1 if it should read from the pad. Since the pad
8702b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      has no address, just read from the instruction, we discard that anyway */
8703b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(addr1_load,
8704b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkite(binop(Iop_CmpEQ64, mkexpr(len1), mkU64(0)),
8705b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                mkU64(guest_IA_curr_instr), mkexpr(addr1)));
8706b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8707b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* same for addr3 */
8708b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(addr3_load,
8709b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkite(binop(Iop_CmpEQ64, mkexpr(len3), mkU64(0)),
8710b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                mkU64(guest_IA_curr_instr), mkexpr(addr3)));
8711b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8712b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(single1,
8713b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkite(binop(Iop_CmpEQ64, mkexpr(len1), mkU64(0)),
8714b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                unop(Iop_64to8, mkexpr(pad2)),
8715b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                load(Ity_I8, mkexpr(addr1_load))));
8716b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8717b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(single3,
8718b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkite(binop(Iop_CmpEQ64, mkexpr(len3), mkU64(0)),
8719b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                unop(Iop_64to8, mkexpr(pad2)),
8720b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                load(Ity_I8, mkexpr(addr3_load))));
8721b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8722b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_put2(S390_CC_OP_UNSIGNED_COMPARE, single1, single3, False);
8723b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* Both fields differ ? */
8724b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if_condition_goto(binop(Iop_CmpNE8, mkexpr(single1), mkexpr(single3)),
8725b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     guest_IA_next_instr);
8726b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8727b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* If a length in 0 we must not change this length and the address */
8728b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1,
8729b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov               mkite(binop(Iop_CmpEQ64, mkexpr(len1), mkU64(0)),
8730b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     mkexpr(addr1),
8731b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     binop(Iop_Add64, mkexpr(addr1), mkU64(1))));
8732b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8733b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1 + 1,
8734b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov               mkite(binop(Iop_CmpEQ64, mkexpr(len1), mkU64(0)),
8735b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     mkU64(0), binop(Iop_Sub64, mkexpr(len1), mkU64(1))));
8736b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8737b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r3,
8738b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov               mkite(binop(Iop_CmpEQ64, mkexpr(len3), mkU64(0)),
8739b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     mkexpr(addr3),
8740b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     binop(Iop_Add64, mkexpr(addr3), mkU64(1))));
8741b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8742b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r3 + 1,
8743b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov               mkite(binop(Iop_CmpEQ64, mkexpr(len3), mkU64(0)),
8744b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     mkU64(0), binop(Iop_Sub64, mkexpr(len3), mkU64(1))));
8745b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8746b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* The architecture requires that we exit with CC3 after a machine specific
8747b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      amount of bytes. We do that if len1+len3 % 4096 == 0 */
8748b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_set(3);
8749b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if_condition_goto(binop(Iop_CmpEQ64,
8750b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                           binop(Iop_And64,
8751b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                 binop(Iop_Add64, mkexpr(len1), mkexpr(len3)),
8752b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                 mkU64(0xfff)),
8753b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                           mkU64(0)),
8754b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     guest_IA_next_instr);
8755b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8756b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   always_goto_and_chase(guest_IA_curr_instr);
8757b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8758b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "clcle";
8759b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
8760b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8761b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
8762b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_XC_EX(IRTemp length, IRTemp start1, IRTemp start2)
8763b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
8764b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp old1 = newTemp(Ity_I8);
8765b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp old2 = newTemp(Ity_I8);
8766b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp new1 = newTemp(Ity_I8);
8767b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp counter = newTemp(Ity_I32);
8768b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp addr1 = newTemp(Ity_I64);
8769b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8770b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(counter, get_counter_w0());
8771b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8772b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(addr1, binop(Iop_Add64, mkexpr(start1),
8773b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                       unop(Iop_32Uto64, mkexpr(counter))));
8774b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8775b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(old1, load(Ity_I8, mkexpr(addr1)));
8776b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(old2, load(Ity_I8, binop(Iop_Add64, mkexpr(start2),
8777b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   unop(Iop_32Uto64,mkexpr(counter)))));
8778b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(new1, binop(Iop_Xor8, mkexpr(old1), mkexpr(old2)));
8779b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8780b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(mkexpr(addr1),
8781b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         mkite(binop(Iop_CmpEQ64, mkexpr(start1), mkexpr(start2)),
8782b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov               mkU8(0), mkexpr(new1)));
8783b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_counter_w1(binop(Iop_Or32, unop(Iop_8Uto32, mkexpr(new1)),
8784b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                        get_counter_w1()));
8785b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8786b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* Check for end of field */
8787b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_counter_w0(binop(Iop_Add32, mkexpr(counter), mkU32(1)));
8788b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if_condition_goto(binop(Iop_CmpNE32, mkexpr(counter), mkexpr(length)),
8789b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     guest_IA_curr_instr);
8790b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_put1(S390_CC_OP_BITWISE, mktemp(Ity_I32, get_counter_w1()),
8791b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                      False);
8792b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_counter_dw0(mkU64(0));
8793b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
8794b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8795b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8796b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
8797b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CLC_EX(IRTemp length, IRTemp start1, IRTemp start2)
8798b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
8799b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp current1 = newTemp(Ity_I8);
8800b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp current2 = newTemp(Ity_I8);
8801b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp counter = newTemp(Ity_I64);
8802b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8803b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(counter, get_counter_dw0());
8804b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_counter_dw0(mkU64(0));
8805b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8806b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(current1, load(Ity_I8, binop(Iop_Add64, mkexpr(start1),
8807b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                       mkexpr(counter))));
8808b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(current2, load(Ity_I8, binop(Iop_Add64, mkexpr(start2),
8809b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                       mkexpr(counter))));
8810b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_put2(S390_CC_OP_UNSIGNED_COMPARE, current1, current2,
8811b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                      False);
8812b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8813b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* Both fields differ ? */
8814b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if_condition_goto(binop(Iop_CmpNE8, mkexpr(current1), mkexpr(current2)),
8815b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     guest_IA_next_instr);
8816b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8817b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* Check for end of field */
8818b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_counter_dw0(binop(Iop_Add64, mkexpr(counter), mkU64(1)));
8819b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if_condition_goto(binop(Iop_CmpNE64, mkexpr(counter), mkexpr(length)),
8820b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     guest_IA_curr_instr);
8821b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_counter_dw0(mkU64(0));
8822b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
8823b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8824b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
8825b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_MVC_EX(IRTemp length, IRTemp start1, IRTemp start2)
8826b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
8827b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp counter = newTemp(Ity_I64);
8828b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8829b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(counter, get_counter_dw0());
8830b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8831b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(binop(Iop_Add64, mkexpr(start1), mkexpr(counter)),
8832b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         load(Ity_I8, binop(Iop_Add64, mkexpr(start2), mkexpr(counter))));
8833b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8834b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* Check for end of field */
8835b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_counter_dw0(binop(Iop_Add64, mkexpr(counter), mkU64(1)));
8836b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if_condition_goto(binop(Iop_CmpNE64, mkexpr(counter), mkexpr(length)),
8837b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     guest_IA_curr_instr);
8838b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_counter_dw0(mkU64(0));
8839b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
8840b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8841b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8842b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8843b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
8844b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_EX_SS(UChar r, IRTemp addr2,
8845b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovvoid (*irgen)(IRTemp length, IRTemp start1, IRTemp start2), int lensize)
8846b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
8847b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   struct SS {
8848b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      unsigned int op :  8;
8849b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      unsigned int l  :  8;
8850b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      unsigned int b1 :  4;
8851b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      unsigned int d1 : 12;
8852b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      unsigned int b2 :  4;
8853b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      unsigned int d2 : 12;
8854b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   };
8855b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   union {
8856b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      struct SS dec;
8857b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      unsigned long bytes;
8858b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } ss;
8859b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp cond;
8860b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRDirty *d;
8861b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp torun;
8862b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8863b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp start1 = newTemp(Ity_I64);
8864b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp start2 = newTemp(Ity_I64);
8865b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp len = newTemp(lensize == 64 ? Ity_I64 : Ity_I32);
8866b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   cond = newTemp(Ity_I1);
8867b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   torun = newTemp(Ity_I64);
8868b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8869b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(torun, load(Ity_I64, mkexpr(addr2)));
8870b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* Start with a check that the saved code is still correct */
8871b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(cond, binop(Iop_CmpNE64, mkexpr(torun), mkU64(last_execute_target)));
8872b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* If not, save the new value */
8873b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   d = unsafeIRDirty_0_N (0, "s390x_dirtyhelper_EX", &s390x_dirtyhelper_EX,
8874b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                          mkIRExprVec_1(mkexpr(torun)));
8875b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   d->guard = mkexpr(cond);
8876b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   stmt(IRStmt_Dirty(d));
8877b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8878b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* and restart */
8879b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   stmt(IRStmt_Put(OFFB_TISTART, mkU64(guest_IA_curr_instr)));
8880b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   stmt(IRStmt_Put(OFFB_TILEN, mkU64(4)));
8881b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   stmt(IRStmt_Exit(mkexpr(cond), Ijk_TInval,
8882b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        IRConst_U64(guest_IA_curr_instr)));
8883b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8884b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   ss.bytes = last_execute_target;
8885b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(start1, binop(Iop_Add64, mkU64(ss.dec.d1),
8886b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          ss.dec.b1 != 0 ? get_gpr_dw0(ss.dec.b1) : mkU64(0)));
8887b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(start2, binop(Iop_Add64, mkU64(ss.dec.d2),
8888b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          ss.dec.b2 != 0 ? get_gpr_dw0(ss.dec.b2) : mkU64(0)));
8889b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(len, unop(lensize == 64 ? Iop_8Uto64 : Iop_8Uto32, binop(Iop_Or8,
8890b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          r != 0 ? get_gpr_b7(r): mkU8(0), mkU8(ss.dec.l))));
8891b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   irgen(len, start1, start2);
8892b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   last_execute_target = 0;
8893b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
8894b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8895b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
8896b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_EX(UChar r1, IRTemp addr2)
8897b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
8898b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   switch(last_execute_target & 0xff00000000000000ULL) {
8899b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0:
8900b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   {
8901b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      /* no code information yet */
8902b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      IRDirty *d;
8903b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8904b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      /* so safe the code... */
8905b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      d = unsafeIRDirty_0_N (0, "s390x_dirtyhelper_EX", &s390x_dirtyhelper_EX,
8906b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                             mkIRExprVec_1(load(Ity_I64, mkexpr(addr2))));
8907b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      stmt(IRStmt_Dirty(d));
8908b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      /* and restart */
8909b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      stmt(IRStmt_Put(OFFB_TISTART, mkU64(guest_IA_curr_instr)));
8910b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      stmt(IRStmt_Put(OFFB_TILEN, mkU64(4)));
8911b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      stmt(IRStmt_Exit(IRExpr_Const(IRConst_U1(True)), Ijk_TInval,
8912b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov           IRConst_U64(guest_IA_curr_instr)));
8913b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      /* we know that this will be invalidated */
8914b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      irsb->next = mkU64(guest_IA_next_instr);
8915b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      dis_res->whatNext = Dis_StopHere;
8916b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      break;
8917b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
8918b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8919b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xd200000000000000ULL:
8920b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      /* special case MVC */
8921b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_irgen_EX_SS(r1, addr2, s390_irgen_MVC_EX, 64);
8922b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      return "mvc via ex";
8923b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8924b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xd500000000000000ULL:
8925b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      /* special case CLC */
8926b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_irgen_EX_SS(r1, addr2, s390_irgen_CLC_EX, 64);
8927b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      return "clc via ex";
8928b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8929b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xd700000000000000ULL:
8930b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      /* special case XC */
8931b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_irgen_EX_SS(r1, addr2, s390_irgen_XC_EX, 32);
8932b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      return "xc via ex";
8933b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8934b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8935b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   default:
8936b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   {
8937b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      /* everything else will get a self checking prefix that also checks the
8938b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         register content */
8939b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      IRDirty *d;
8940b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      UChar *bytes;
8941b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      IRTemp cond;
8942b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      IRTemp orperand;
8943b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      IRTemp torun;
8944b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8945b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      cond = newTemp(Ity_I1);
8946b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      orperand = newTemp(Ity_I64);
8947b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      torun = newTemp(Ity_I64);
8948b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8949b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      if (r1 == 0)
8950b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(orperand, mkU64(0));
8951b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      else
8952b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         assign(orperand, unop(Iop_8Uto64,get_gpr_b7(r1)));
8953b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      /* This code is going to be translated */
8954b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(torun, binop(Iop_Or64, load(Ity_I64, mkexpr(addr2)),
8955b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov             binop(Iop_Shl64, mkexpr(orperand), mkU8(48))));
8956b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8957b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      /* Start with a check that saved code is still correct */
8958b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(cond, binop(Iop_CmpNE64, mkexpr(torun),
8959b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov             mkU64(last_execute_target)));
8960b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      /* If not, save the new value */
8961b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      d = unsafeIRDirty_0_N (0, "s390x_dirtyhelper_EX", &s390x_dirtyhelper_EX,
8962b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                             mkIRExprVec_1(mkexpr(torun)));
8963b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      d->guard = mkexpr(cond);
8964b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      stmt(IRStmt_Dirty(d));
8965b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8966b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      /* and restart */
8967b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      stmt(IRStmt_Put(OFFB_TISTART, mkU64(guest_IA_curr_instr)));
8968b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      stmt(IRStmt_Put(OFFB_TILEN, mkU64(4)));
8969b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      stmt(IRStmt_Exit(mkexpr(cond), Ijk_TInval,
8970b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov           IRConst_U64(guest_IA_curr_instr)));
8971b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8972b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      /* Now comes the actual translation */
8973b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      bytes = (UChar *) &last_execute_target;
8974b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_decode_and_irgen(bytes, ((((bytes[0] >> 6) + 1) >> 1) + 1) << 1,
8975b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                            dis_res);
8976b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
8977b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         vex_printf("    which was executed by\n");
8978b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      /* dont make useless translations in the next execute */
8979b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      last_execute_target = 0;
8980b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
8981b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
8982b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "ex";
8983b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
8984b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8985b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
8986b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_EXRL(UChar r1, UInt offset)
8987b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
8988b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp addr = newTemp(Ity_I64);
8989b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* we might save one round trip because we know the target */
8990b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (!last_execute_target)
8991b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      last_execute_target = *(ULong *)(HWord)
8992b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                             (guest_IA_curr_instr + offset * 2UL);
8993b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(addr, mkU64(guest_IA_curr_instr + offset * 2UL));
8994b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_irgen_EX(r1, addr);
8995b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "exrl";
8996b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
8997b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
8998b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
8999b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_IPM(UChar r1)
9000b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
9001b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   // As long as we dont support SPM, lets just assume 0 as program mask
9002b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_b4(r1, unop(Iop_32to8, binop(Iop_Or32, mkU32(0 /* program mask */),
9003b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                       binop(Iop_Shl32, s390_call_calculate_cc(), mkU8(4)))));
9004b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9005b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "ipm";
9006b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
9007b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9008b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9009b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
9010b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_SRST(UChar r1, UChar r2)
9011b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
9012b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp address = newTemp(Ity_I64);
9013b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp next = newTemp(Ity_I64);
9014b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp delim = newTemp(Ity_I8);
9015b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp counter = newTemp(Ity_I64);
9016b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp byte = newTemp(Ity_I8);
9017b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9018b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(address, get_gpr_dw0(r2));
9019b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(next, get_gpr_dw0(r1));
9020b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9021b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(counter, get_counter_dw0());
9022b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_counter_dw0(mkU64(0));
9023b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9024b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   // start = next?  CC=2 and out r1 and r2 unchanged
9025b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_set(2);
9026b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r2, binop(Iop_Sub64, mkexpr(address), mkexpr(counter)));
9027b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if_condition_goto(binop(Iop_CmpEQ64, mkexpr(address), mkexpr(next)),
9028b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     guest_IA_next_instr);
9029b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9030b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(byte, load(Ity_I8, mkexpr(address)));
9031b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(delim, get_gpr_b7(0));
9032b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9033b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   // byte = delim? CC=1, R1=address
9034b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_set(1);
9035b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1,  mkexpr(address));
9036b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if_condition_goto(binop(Iop_CmpEQ8, mkexpr(delim), mkexpr(byte)),
9037b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     guest_IA_next_instr);
9038b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9039b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   // else: all equal, no end yet, loop
9040b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_counter_dw0(binop(Iop_Add64, mkexpr(counter), mkU64(1)));
9041b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(next));
9042b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r2, binop(Iop_Add64, mkexpr(address), mkU64(1)));
9043b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   stmt(IRStmt_Exit(binop(Iop_CmpNE64, mkexpr(counter), mkU64(255)),
9044b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    Ijk_Boring, IRConst_U64(guest_IA_curr_instr)));
9045b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   // >= 256 bytes done CC=3
9046b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_set(3);
9047b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_counter_dw0(mkU64(0));
9048b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9049b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "srst";
9050b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
9051b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9052b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
9053b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CLST(UChar r1, UChar r2)
9054b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
9055b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp address1 = newTemp(Ity_I64);
9056b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp address2 = newTemp(Ity_I64);
9057b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp end = newTemp(Ity_I8);
9058b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp counter = newTemp(Ity_I64);
9059b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp byte1 = newTemp(Ity_I8);
9060b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp byte2 = newTemp(Ity_I8);
9061b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9062b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(address1, get_gpr_dw0(r1));
9063b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(address2, get_gpr_dw0(r2));
9064b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(end, get_gpr_b7(0));
9065b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(counter, get_counter_dw0());
9066b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_counter_dw0(mkU64(0));
9067b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(byte1, load(Ity_I8, mkexpr(address1)));
9068b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(byte2, load(Ity_I8, mkexpr(address2)));
9069b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9070b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   // end in both? all equal, reset r1 and r2 to start values
9071b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_set(0);
9072b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, binop(Iop_Sub64, mkexpr(address1), mkexpr(counter)));
9073b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r2, binop(Iop_Sub64, mkexpr(address2), mkexpr(counter)));
9074b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if_condition_goto(binop(Iop_CmpEQ8, mkU8(0),
9075b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                           binop(Iop_Or8,
9076b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                 binop(Iop_Xor8, mkexpr(byte1), mkexpr(end)),
9077b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                 binop(Iop_Xor8, mkexpr(byte2), mkexpr(end)))),
9078b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     guest_IA_next_instr);
9079b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9080b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(address1));
9081b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r2, mkexpr(address2));
9082b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9083b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   // End found in string1
9084b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_set(1);
9085b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if_condition_goto(binop(Iop_CmpEQ8, mkexpr(end), mkexpr(byte1)),
9086b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     guest_IA_next_instr);
9087b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9088b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   // End found in string2
9089b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_set(2);
9090b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if_condition_goto(binop(Iop_CmpEQ8, mkexpr(end), mkexpr(byte2)),
9091b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     guest_IA_next_instr);
9092b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9093b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   // string1 < string2
9094b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_set(1);
9095b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if_condition_goto(binop(Iop_CmpLT32U, unop(Iop_8Uto32, mkexpr(byte1)),
9096b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                           unop(Iop_8Uto32, mkexpr(byte2))),
9097b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     guest_IA_next_instr);
9098b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9099b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   // string2 < string1
9100b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_set(2);
9101b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if_condition_goto(binop(Iop_CmpLT32U, unop(Iop_8Uto32, mkexpr(byte2)),
9102b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                           unop(Iop_8Uto32, mkexpr(byte1))),
9103b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     guest_IA_next_instr);
9104b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9105b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   // else: all equal, no end yet, loop
9106b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_counter_dw0(binop(Iop_Add64, mkexpr(counter), mkU64(1)));
9107b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, binop(Iop_Add64, get_gpr_dw0(r1), mkU64(1)));
9108b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r2, binop(Iop_Add64, get_gpr_dw0(r2), mkU64(1)));
9109b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   stmt(IRStmt_Exit(binop(Iop_CmpNE64, mkexpr(counter), mkU64(255)),
9110b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    Ijk_Boring, IRConst_U64(guest_IA_curr_instr)));
9111b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   // >= 256 bytes done CC=3
9112b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_set(3);
9113b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_counter_dw0(mkU64(0));
9114b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9115b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "clst";
9116b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
9117b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9118b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
9119b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_load_multiple_32bit(UChar r1, UChar r3, IRTemp op2addr)
9120b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
9121b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UChar reg;
9122b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp addr = newTemp(Ity_I64);
9123b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9124b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(addr, mkexpr(op2addr));
9125b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   reg = r1;
9126b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   do {
9127b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      IRTemp old = addr;
9128b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9129b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      reg %= 16;
9130b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      put_gpr_w1(reg, load(Ity_I32, mkexpr(addr)));
9131b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      addr = newTemp(Ity_I64);
9132b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(addr, binop(Iop_Add64, mkexpr(old), mkU64(4)));
9133b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      reg++;
9134b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } while (reg != (r3 + 1));
9135b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
9136b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9137b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
9138b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LM(UChar r1, UChar r3, IRTemp op2addr)
9139b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
9140b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_irgen_load_multiple_32bit(r1, r3, op2addr);
9141b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9142b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lm";
9143b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
9144b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9145b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
9146b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LMY(UChar r1, UChar r3, IRTemp op2addr)
9147b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
9148b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_irgen_load_multiple_32bit(r1, r3, op2addr);
9149b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9150b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lmy";
9151b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
9152b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9153b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
9154b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LMH(UChar r1, UChar r3, IRTemp op2addr)
9155b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
9156b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UChar reg;
9157b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp addr = newTemp(Ity_I64);
9158b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9159b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(addr, mkexpr(op2addr));
9160b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   reg = r1;
9161b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   do {
9162b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      IRTemp old = addr;
9163b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9164b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      reg %= 16;
9165b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      put_gpr_w0(reg, load(Ity_I32, mkexpr(addr)));
9166b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      addr = newTemp(Ity_I64);
9167b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(addr, binop(Iop_Add64, mkexpr(old), mkU64(4)));
9168b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      reg++;
9169b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } while (reg != (r3 + 1));
9170b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9171b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lmh";
9172b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
9173b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9174b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
9175b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LMG(UChar r1, UChar r3, IRTemp op2addr)
9176b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
9177b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UChar reg;
9178b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp addr = newTemp(Ity_I64);
9179b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9180b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(addr, mkexpr(op2addr));
9181b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   reg = r1;
9182b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   do {
9183b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      IRTemp old = addr;
9184b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9185b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      reg %= 16;
9186b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      put_gpr_dw0(reg, load(Ity_I64, mkexpr(addr)));
9187b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      addr = newTemp(Ity_I64);
9188b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(addr, binop(Iop_Add64, mkexpr(old), mkU64(8)));
9189b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      reg++;
9190b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } while (reg != (r3 + 1));
9191b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9192b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lmg";
9193b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
9194b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9195b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
9196b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_store_multiple_32bit(UChar r1, UChar r3, IRTemp op2addr)
9197b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
9198b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UChar reg;
9199b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp addr = newTemp(Ity_I64);
9200b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9201b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(addr, mkexpr(op2addr));
9202b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   reg = r1;
9203b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   do {
9204b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      IRTemp old = addr;
9205b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9206b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      reg %= 16;
9207b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      store(mkexpr(addr), get_gpr_w1(reg));
9208b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      addr = newTemp(Ity_I64);
9209b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(addr, binop(Iop_Add64, mkexpr(old), mkU64(4)));
9210b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      reg++;
9211b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } while( reg != (r3 + 1));
9212b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
9213b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9214b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
9215b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_STM(UChar r1, UChar r3, IRTemp op2addr)
9216b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
9217b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_irgen_store_multiple_32bit(r1, r3, op2addr);
9218b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9219b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "stm";
9220b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
9221b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9222b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
9223b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_STMY(UChar r1, UChar r3, IRTemp op2addr)
9224b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
9225b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_irgen_store_multiple_32bit(r1, r3, op2addr);
9226b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9227b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "stmy";
9228b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
9229b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9230b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
9231b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_STMH(UChar r1, UChar r3, IRTemp op2addr)
9232b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
9233b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UChar reg;
9234b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp addr = newTemp(Ity_I64);
9235b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9236b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(addr, mkexpr(op2addr));
9237b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   reg = r1;
9238b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   do {
9239b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      IRTemp old = addr;
9240b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9241b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      reg %= 16;
9242b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      store(mkexpr(addr), get_gpr_w0(reg));
9243b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      addr = newTemp(Ity_I64);
9244b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(addr, binop(Iop_Add64, mkexpr(old), mkU64(4)));
9245b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      reg++;
9246b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } while( reg != (r3 + 1));
9247b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9248b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "stmh";
9249b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
9250b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9251b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
9252b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_STMG(UChar r1, UChar r3, IRTemp op2addr)
9253b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
9254b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UChar reg;
9255b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp addr = newTemp(Ity_I64);
9256b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9257b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(addr, mkexpr(op2addr));
9258b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   reg = r1;
9259b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   do {
9260b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      IRTemp old = addr;
9261b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9262b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      reg %= 16;
9263b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      store(mkexpr(addr), get_gpr_dw0(reg));
9264b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      addr = newTemp(Ity_I64);
9265b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(addr, binop(Iop_Add64, mkexpr(old), mkU64(8)));
9266b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      reg++;
9267b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } while( reg != (r3 + 1));
9268b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9269b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "stmg";
9270b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
9271b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9272b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
9273b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_XONC(IROp op, UChar length, IRTemp start1, IRTemp start2)
9274b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
9275b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp old1 = newTemp(Ity_I8);
9276b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp old2 = newTemp(Ity_I8);
9277b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp new1 = newTemp(Ity_I8);
9278b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp counter = newTemp(Ity_I32);
9279b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp addr1 = newTemp(Ity_I64);
9280b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9281b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(counter, get_counter_w0());
9282b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9283b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(addr1, binop(Iop_Add64, mkexpr(start1),
9284b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                       unop(Iop_32Uto64, mkexpr(counter))));
9285b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9286b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(old1, load(Ity_I8, mkexpr(addr1)));
9287b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(old2, load(Ity_I8, binop(Iop_Add64, mkexpr(start2),
9288b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   unop(Iop_32Uto64,mkexpr(counter)))));
9289b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(new1, binop(op, mkexpr(old1), mkexpr(old2)));
9290b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9291b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* Special case: xc is used to zero memory */
9292b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (op == Iop_Xor8) {
9293b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      store(mkexpr(addr1),
9294b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov            mkite(binop(Iop_CmpEQ64, mkexpr(start1), mkexpr(start2)),
9295b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                  mkU8(0), mkexpr(new1)));
9296b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } else
9297b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      store(mkexpr(addr1), mkexpr(new1));
9298b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_counter_w1(binop(Iop_Or32, unop(Iop_8Uto32, mkexpr(new1)),
9299b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                        get_counter_w1()));
9300b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9301b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* Check for end of field */
9302b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_counter_w0(binop(Iop_Add32, mkexpr(counter), mkU32(1)));
9303b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if_condition_goto(binop(Iop_CmpNE32, mkexpr(counter), mkU32(length)),
9304b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     guest_IA_curr_instr);
9305b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_put1(S390_CC_OP_BITWISE, mktemp(Ity_I32, get_counter_w1()),
9306b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                      False);
9307b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_counter_dw0(mkU64(0));
9308b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
9309b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9310b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
9311b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_XC(UChar length, IRTemp start1, IRTemp start2)
9312b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
9313b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_irgen_XONC(Iop_Xor8, length, start1, start2);
9314b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9315b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "xc";
9316b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
9317b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9318b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
9319b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_XC_sameloc(UChar length, UChar b, UShort d)
9320b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
9321b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp counter = newTemp(Ity_I32);
9322b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp start = newTemp(Ity_I64);
9323b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp addr  = newTemp(Ity_I64);
9324b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9325b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(start,
9326b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          binop(Iop_Add64, mkU64(d), b != 0 ? get_gpr_dw0(b) : mkU64(0)));
9327b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9328b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (length < 8) {
9329b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      UInt i;
9330b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9331b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      for (i = 0; i <= length; ++i) {
9332b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         store(binop(Iop_Add64, mkexpr(start), mkU64(i)), mkU8(0));
9333b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      }
9334b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } else {
9335b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov     assign(counter, get_counter_w0());
9336b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9337b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov     assign(addr, binop(Iop_Add64, mkexpr(start),
9338b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                        unop(Iop_32Uto64, mkexpr(counter))));
9339b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9340b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov     store(mkexpr(addr), mkU8(0));
9341b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9342b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov     /* Check for end of field */
9343b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov     put_counter_w0(binop(Iop_Add32, mkexpr(counter), mkU32(1)));
9344b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov     if_condition_goto(binop(Iop_CmpNE32, mkexpr(counter), mkU32(length)),
9345b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                       guest_IA_curr_instr);
9346b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9347b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov     /* Reset counter */
9348b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov     put_counter_dw0(mkU64(0));
9349b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
9350b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9351b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_put1(S390_CC_OP_BITWISE, mktemp(Ity_I32, mkU32(0)), False);
9352b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9353b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
9354b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_disasm(ENC3(MNM, UDLB, UDXB), "xc", d, length, b, d, 0, b);
9355b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
9356b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9357b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
9358b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_NC(UChar length, IRTemp start1, IRTemp start2)
9359b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
9360b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_irgen_XONC(Iop_And8, length, start1, start2);
9361b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9362b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "nc";
9363b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
9364b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9365b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
9366b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_OC(UChar length, IRTemp start1, IRTemp start2)
9367b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
9368b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_irgen_XONC(Iop_Or8, length, start1, start2);
9369b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9370b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "oc";
9371b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
9372b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9373b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9374b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
9375b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_MVC(UChar length, IRTemp start1, IRTemp start2)
9376b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
9377b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp counter = newTemp(Ity_I64);
9378b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9379b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(counter, get_counter_dw0());
9380b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9381b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(binop(Iop_Add64, mkexpr(start1), mkexpr(counter)),
9382b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         load(Ity_I8, binop(Iop_Add64, mkexpr(start2), mkexpr(counter))));
9383b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9384b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* Check for end of field */
9385b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_counter_dw0(binop(Iop_Add64, mkexpr(counter), mkU64(1)));
9386b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if_condition_goto(binop(Iop_CmpNE64, mkexpr(counter), mkU64(length)),
9387b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     guest_IA_curr_instr);
9388b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_counter_dw0(mkU64(0));
9389b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9390b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "mvc";
9391b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
9392b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9393b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
9394b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_MVCL(UChar r1, UChar r2)
9395b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
9396b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp addr1 = newTemp(Ity_I64);
9397b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp addr2 = newTemp(Ity_I64);
9398b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp addr2_load = newTemp(Ity_I64);
9399b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp r1p1 = newTemp(Ity_I32);   /* contents of r1 + 1 */
9400b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp r2p1 = newTemp(Ity_I32);   /* contents of r2 + 1 */
9401b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp len1 = newTemp(Ity_I32);
9402b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp len2 = newTemp(Ity_I32);
9403b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp pad = newTemp(Ity_I8);
9404b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp single = newTemp(Ity_I8);
9405b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9406b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(addr1, get_gpr_dw0(r1));
9407b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(r1p1, get_gpr_w1(r1 + 1));
9408b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(len1, binop(Iop_And32, mkexpr(r1p1), mkU32(0x00ffffff)));
9409b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(addr2, get_gpr_dw0(r2));
9410b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(r2p1, get_gpr_w1(r2 + 1));
9411b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(len2, binop(Iop_And32, mkexpr(r2p1), mkU32(0x00ffffff)));
9412b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(pad, get_gpr_b4(r2 + 1));
9413b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9414b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* len1 == 0 ? */
9415b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_put2(S390_CC_OP_UNSIGNED_COMPARE, len1, len2, False);
9416b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if_condition_goto(binop(Iop_CmpEQ32, mkexpr(len1), mkU32(0)),
9417b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     guest_IA_next_instr);
9418b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9419b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* Check for destructive overlap:
9420b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      addr1 > addr2 && addr2 + len1 > addr1 && (addr2 + len2) > addr1 */
9421b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_set(3);
9422b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp cond1 = newTemp(Ity_I32);
9423b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(cond1, unop(Iop_1Uto32,
9424b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                      binop(Iop_CmpLT64U, mkexpr(addr2), mkexpr(addr1))));
9425b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp cond2 = newTemp(Ity_I32);
9426b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(cond2, unop(Iop_1Uto32,
9427b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                      binop(Iop_CmpLT64U, mkexpr(addr1),
9428b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                            binop(Iop_Add64, mkexpr(addr2),
9429b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  unop(Iop_32Uto64, mkexpr(len1))))));
9430b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp cond3 = newTemp(Ity_I32);
9431b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(cond3, unop(Iop_1Uto32,
9432b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                      binop(Iop_CmpLT64U,
9433b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                            mkexpr(addr1),
9434b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                            binop(Iop_Add64, mkexpr(addr2),
9435b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  unop(Iop_32Uto64, mkexpr(len2))))));
9436b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9437b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if_condition_goto(binop(Iop_CmpEQ32,
9438b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                           binop(Iop_And32,
9439b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                 binop(Iop_And32, mkexpr(cond1), mkexpr(cond2)),
9440b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                 mkexpr(cond3)),
9441b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                           mkU32(1)),
9442b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     guest_IA_next_instr);
9443b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9444b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* See s390_irgen_CLCL for explanation why we cannot load directly
9445b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      and need two steps. */
9446b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(addr2_load,
9447b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkite(binop(Iop_CmpEQ32, mkexpr(len2), mkU32(0)),
9448b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                mkU64(guest_IA_curr_instr), mkexpr(addr2)));
9449b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(single,
9450b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkite(binop(Iop_CmpEQ32, mkexpr(len2), mkU32(0)),
9451b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                mkexpr(pad), load(Ity_I8, mkexpr(addr2_load))));
9452b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9453b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(mkexpr(addr1), mkexpr(single));
9454b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9455b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* Update addr1 and len1 */
9456b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, binop(Iop_Add64, mkexpr(addr1), mkU64(1)));
9457b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1 + 1, binop(Iop_Sub32, mkexpr(r1p1), mkU32(1)));
9458b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9459b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* Update addr2 and len2 */
9460b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r2,
9461b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov               mkite(binop(Iop_CmpEQ32, mkexpr(len2), mkU32(0)),
9462b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     mkexpr(addr2),
9463b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     binop(Iop_Add64, mkexpr(addr2), mkU64(1))));
9464b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9465b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* When updating len2 we must not modify bits (r2+1)[0:39] */
9466b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r2 + 1,
9467b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov              mkite(binop(Iop_CmpEQ32, mkexpr(len2), mkU32(0)),
9468b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    binop(Iop_And32, mkexpr(r2p1), mkU32(0xFF000000u)),
9469b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    binop(Iop_Sub32, mkexpr(r2p1), mkU32(1))));
9470b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9471b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_put2(S390_CC_OP_UNSIGNED_COMPARE, len1, len2, False);
9472b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if_condition_goto(binop(Iop_CmpNE32, mkexpr(len1), mkU32(1)),
9473b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     guest_IA_curr_instr);
9474b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9475b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "mvcl";
9476b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
9477b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9478b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9479b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
9480b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_MVCLE(UChar r1, UChar r3, IRTemp pad2)
9481b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
9482b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp addr1, addr3, addr3_load, len1, len3, single;
9483b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9484b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   addr1 = newTemp(Ity_I64);
9485b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   addr3 = newTemp(Ity_I64);
9486b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   addr3_load = newTemp(Ity_I64);
9487b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   len1 = newTemp(Ity_I64);
9488b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   len3 = newTemp(Ity_I64);
9489b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   single = newTemp(Ity_I8);
9490b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9491b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(addr1, get_gpr_dw0(r1));
9492b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(len1, get_gpr_dw0(r1 + 1));
9493b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(addr3, get_gpr_dw0(r3));
9494b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(len3, get_gpr_dw0(r3 + 1));
9495b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9496b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   // len1 == 0 ?
9497b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_put2(S390_CC_OP_UNSIGNED_COMPARE, len1, len3, False);
9498b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if_condition_goto(binop(Iop_CmpEQ64,mkexpr(len1), mkU64(0)),
9499b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     guest_IA_next_instr);
9500b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9501b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* This is a hack to prevent mvcle from reading from addr3 if it
9502b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      should read from the pad. Since the pad has no address, just
9503b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      read from the instruction, we discard that anyway */
9504b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(addr3_load,
9505b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkite(binop(Iop_CmpEQ64, mkexpr(len3), mkU64(0)),
9506b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                mkU64(guest_IA_curr_instr), mkexpr(addr3)));
9507b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9508b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(single,
9509b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          mkite(binop(Iop_CmpEQ64, mkexpr(len3), mkU64(0)),
9510b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                unop(Iop_64to8, mkexpr(pad2)),
9511b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                load(Ity_I8, mkexpr(addr3_load))));
9512b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(mkexpr(addr1), mkexpr(single));
9513b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9514b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, binop(Iop_Add64, mkexpr(addr1), mkU64(1)));
9515b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9516b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1 + 1, binop(Iop_Sub64, mkexpr(len1), mkU64(1)));
9517b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9518b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r3,
9519b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov               mkite(binop(Iop_CmpEQ64, mkexpr(len3), mkU64(0)),
9520b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     mkexpr(addr3),
9521b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     binop(Iop_Add64, mkexpr(addr3), mkU64(1))));
9522b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9523b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r3 + 1,
9524b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov               mkite(binop(Iop_CmpEQ64, mkexpr(len3), mkU64(0)),
9525b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     mkU64(0), binop(Iop_Sub64, mkexpr(len3), mkU64(1))));
9526b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9527b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* We should set CC=3 (faked by overflow add) and leave after
9528b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      a maximum of ~4096 bytes have been processed. This is simpler:
9529b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      we leave whenever (len1 % 4096) == 0 */
9530b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_put2(S390_CC_OP_UNSIGNED_ADD_64, mktemp(Ity_I64, mkU64(-1ULL)),
9531b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                      mktemp(Ity_I64, mkU64(-1ULL)), False);
9532b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if_condition_goto(binop(Iop_CmpEQ64,
9533b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                           binop(Iop_And64, mkexpr(len1), mkU64(0xfff)),
9534b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                           mkU64(0)),
9535b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     guest_IA_next_instr);
9536b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9537b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_put2(S390_CC_OP_UNSIGNED_COMPARE, len1, len3, False);
9538b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if_condition_goto(binop(Iop_CmpNE64, mkexpr(len1), mkU64(1)),
9539b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     guest_IA_curr_instr);
9540b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9541b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "mvcle";
9542b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
9543b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9544b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
9545b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_MVST(UChar r1, UChar r2)
9546b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
9547b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp addr1 = newTemp(Ity_I64);
9548b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp addr2 = newTemp(Ity_I64);
9549b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp end = newTemp(Ity_I8);
9550b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp byte = newTemp(Ity_I8);
9551b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp counter = newTemp(Ity_I64);
9552b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9553b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(addr1, get_gpr_dw0(r1));
9554b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(addr2, get_gpr_dw0(r2));
9555b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(counter, get_counter_dw0());
9556b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(end, get_gpr_b7(0));
9557b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(byte, load(Ity_I8, binop(Iop_Add64, mkexpr(addr2),mkexpr(counter))));
9558b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(binop(Iop_Add64,mkexpr(addr1),mkexpr(counter)), mkexpr(byte));
9559b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9560b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   // We use unlimited as cpu-determined number
9561b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_counter_dw0(binop(Iop_Add64, mkexpr(counter), mkU64(1)));
9562b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if_condition_goto(binop(Iop_CmpNE8, mkexpr(end), mkexpr(byte)),
9563b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     guest_IA_curr_instr);
9564b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9565b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   // and always set cc=1 at the end + update r1
9566b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_set(1);
9567b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, binop(Iop_Add64, mkexpr(addr1), mkexpr(counter)));
9568b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_counter_dw0(mkU64(0));
9569b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9570b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "mvst";
9571b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
9572b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9573b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
9574b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_divide_64to32(IROp op, UChar r1, IRTemp op2)
9575b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
9576b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
9577b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
9578b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9579b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, binop(Iop_32HLto64,
9580b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     get_gpr_w1(r1),         // high 32 bits
9581b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     get_gpr_w1(r1 + 1)));   // low  32 bits
9582b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(op, mkexpr(op1), mkexpr(op2)));
9583b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, unop(Iop_64HIto32, mkexpr(result)));   // remainder
9584b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1 + 1, unop(Iop_64to32, mkexpr(result))); // quotient
9585b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
9586b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9587b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
9588b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_divide_128to64(IROp op, UChar r1, IRTemp op2)
9589b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
9590b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I128);
9591b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I128);
9592b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9593b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, binop(Iop_64HLto128,
9594b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     get_gpr_dw0(r1),         // high 64 bits
9595b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     get_gpr_dw0(r1 + 1)));   // low  64 bits
9596b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(op, mkexpr(op1), mkexpr(op2)));
9597b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, unop(Iop_128HIto64, mkexpr(result)));   // remainder
9598b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1 + 1, unop(Iop_128to64, mkexpr(result))); // quotient
9599b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
9600b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9601b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
9602b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_divide_64to64(IROp op, UChar r1, IRTemp op2)
9603b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
9604b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
9605b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I128);
9606b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9607b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_dw0(r1 + 1));
9608b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(op, mkexpr(op1), mkexpr(op2)));
9609b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, unop(Iop_128HIto64, mkexpr(result)));   // remainder
9610b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1 + 1, unop(Iop_128to64, mkexpr(result))); // quotient
9611b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
9612b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9613b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
9614b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_DR(UChar r1, UChar r2)
9615b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
9616b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
9617b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9618b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_w1(r2));
9619b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9620b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_irgen_divide_64to32(Iop_DivModS64to32, r1, op2);
9621b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9622b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "dr";
9623b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
9624b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9625b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
9626b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_D(UChar r1, IRTemp op2addr)
9627b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
9628b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
9629b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9630b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I32, mkexpr(op2addr)));
9631b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9632b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_irgen_divide_64to32(Iop_DivModS64to32, r1, op2);
9633b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9634b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "d";
9635b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
9636b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9637b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
9638b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_DLR(UChar r1, UChar r2)
9639b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
9640b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
9641b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9642b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_w1(r2));
9643b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9644b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_irgen_divide_64to32(Iop_DivModU64to32, r1, op2);
9645b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9646b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "dr";
9647b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
9648b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9649b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
9650b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_DL(UChar r1, IRTemp op2addr)
9651b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
9652b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
9653b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9654b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I32, mkexpr(op2addr)));
9655b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9656b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_irgen_divide_64to32(Iop_DivModU64to32, r1, op2);
9657b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9658b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "dl";
9659b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
9660b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9661b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
9662b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_DLG(UChar r1, IRTemp op2addr)
9663b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
9664b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
9665b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9666b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I64, mkexpr(op2addr)));
9667b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9668b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_irgen_divide_128to64(Iop_DivModU128to64, r1, op2);
9669b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9670b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "dlg";
9671b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
9672b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9673b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
9674b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_DLGR(UChar r1, UChar r2)
9675b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
9676b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
9677b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9678b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_dw0(r2));
9679b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9680b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_irgen_divide_128to64(Iop_DivModU128to64, r1, op2);
9681b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9682b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "dlgr";
9683b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
9684b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9685b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
9686b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_DSGR(UChar r1, UChar r2)
9687b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
9688b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
9689b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9690b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_dw0(r2));
9691b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9692b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_irgen_divide_64to64(Iop_DivModS64to64, r1, op2);
9693b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9694b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "dsgr";
9695b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
9696b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9697b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
9698b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_DSG(UChar r1, IRTemp op2addr)
9699b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
9700b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
9701b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9702b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_I64, mkexpr(op2addr)));
9703b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9704b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_irgen_divide_64to64(Iop_DivModS64to64, r1, op2);
9705b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9706b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "dsg";
9707b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
9708b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9709b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
9710b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_DSGFR(UChar r1, UChar r2)
9711b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
9712b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
9713b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9714b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, unop(Iop_32Sto64, get_gpr_w1(r2)));
9715b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9716b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_irgen_divide_64to64(Iop_DivModS64to64, r1, op2);
9717b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9718b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "dsgfr";
9719b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
9720b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9721b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
9722b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_DSGF(UChar r1, IRTemp op2addr)
9723b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
9724b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
9725b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9726b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, unop(Iop_32Sto64, load(Ity_I32, mkexpr(op2addr))));
9727b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9728b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_irgen_divide_64to64(Iop_DivModS64to64, r1, op2);
9729b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9730b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "dsgf";
9731b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
9732b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9733b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
9734b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_load_ar_multiple(UChar r1, UChar r3, IRTemp op2addr)
9735b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
9736b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UChar reg;
9737b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp addr = newTemp(Ity_I64);
9738b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9739b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(addr, mkexpr(op2addr));
9740b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   reg = r1;
9741b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   do {
9742b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      IRTemp old = addr;
9743b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9744b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      reg %= 16;
9745b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      put_ar_w0(reg, load(Ity_I32, mkexpr(addr)));
9746b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      addr = newTemp(Ity_I64);
9747b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(addr, binop(Iop_Add64, mkexpr(old), mkU64(4)));
9748b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      reg++;
9749b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } while (reg != (r3 + 1));
9750b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
9751b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9752b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
9753b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LAM(UChar r1, UChar r3, IRTemp op2addr)
9754b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
9755b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_irgen_load_ar_multiple(r1, r3, op2addr);
9756b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9757b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lam";
9758b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
9759b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9760b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
9761b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LAMY(UChar r1, UChar r3, IRTemp op2addr)
9762b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
9763b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_irgen_load_ar_multiple(r1, r3, op2addr);
9764b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9765b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lamy";
9766b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
9767b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9768b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
9769b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_store_ar_multiple(UChar r1, UChar r3, IRTemp op2addr)
9770b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
9771b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UChar reg;
9772b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp addr = newTemp(Ity_I64);
9773b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9774b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(addr, mkexpr(op2addr));
9775b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   reg = r1;
9776b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   do {
9777b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      IRTemp old = addr;
9778b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9779b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      reg %= 16;
9780b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      store(mkexpr(addr), get_ar_w0(reg));
9781b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      addr = newTemp(Ity_I64);
9782b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      assign(addr, binop(Iop_Add64, mkexpr(old), mkU64(4)));
9783b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      reg++;
9784b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } while (reg != (r3 + 1));
9785b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
9786b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9787b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
9788b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_STAM(UChar r1, UChar r3, IRTemp op2addr)
9789b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
9790b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_irgen_store_ar_multiple(r1, r3, op2addr);
9791b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9792b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "stam";
9793b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
9794b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9795b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
9796b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_STAMY(UChar r1, UChar r3, IRTemp op2addr)
9797b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
9798b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_irgen_store_ar_multiple(r1, r3, op2addr);
9799b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9800b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "stamy";
9801b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
9802b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9803b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9804b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Implementation for 32-bit compare-and-swap */
9805b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
9806b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_cas_32(UChar r1, UChar r3, IRTemp op2addr)
9807b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
9808b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRCAS *cas;
9809b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I32);
9810b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp old_mem = newTemp(Ity_I32);
9811b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op3 = newTemp(Ity_I32);
9812b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
9813b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp nequal = newTemp(Ity_I1);
9814b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9815b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_w1(r1));
9816b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op3, get_gpr_w1(r3));
9817b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9818b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* The first and second operands are compared. If they are equal,
9819b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      the third operand is stored at the second- operand location. */
9820b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   cas = mkIRCAS(IRTemp_INVALID, old_mem,
9821b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                 Iend_BE, mkexpr(op2addr),
9822b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                 NULL, mkexpr(op1), /* expected value */
9823b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                 NULL, mkexpr(op3)  /* new value */);
9824b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   stmt(IRStmt_CAS(cas));
9825b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9826b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* Set CC. Operands compared equal -> 0, else 1. */
9827b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Sub32, mkexpr(op1), mkexpr(old_mem)));
9828b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_put1(S390_CC_OP_BITWISE, result, False);
9829b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9830b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* If operands were equal (cc == 0) just store the old value op1 in r1.
9831b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      Otherwise, store the old_value from memory in r1 and yield. */
9832b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(nequal, binop(Iop_CmpNE32, s390_call_calculate_cc(), mkU32(0)));
9833b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkite(mkexpr(nequal), mkexpr(old_mem), mkexpr(op1)));
9834b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   stmt(IRStmt_Exit(mkexpr(nequal), Ijk_Yield,
9835b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        IRConst_U64(guest_IA_next_instr)));
9836b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
9837b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9838b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
9839b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CS(UChar r1, UChar r3, IRTemp op2addr)
9840b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
9841b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_irgen_cas_32(r1, r3, op2addr);
9842b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9843b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "cs";
9844b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
9845b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9846b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
9847b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CSY(UChar r1, UChar r3, IRTemp op2addr)
9848b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
9849b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_irgen_cas_32(r1, r3, op2addr);
9850b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9851b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "csy";
9852b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
9853b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9854b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
9855b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CSG(UChar r1, UChar r3, IRTemp op2addr)
9856b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
9857b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRCAS *cas;
9858b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_I64);
9859b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp old_mem = newTemp(Ity_I64);
9860b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op3 = newTemp(Ity_I64);
9861b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
9862b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp nequal = newTemp(Ity_I1);
9863b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9864b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_gpr_dw0(r1));
9865b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op3, get_gpr_dw0(r3));
9866b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9867b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* The first and second operands are compared. If they are equal,
9868b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      the third operand is stored at the second- operand location. */
9869b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   cas = mkIRCAS(IRTemp_INVALID, old_mem,
9870b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                 Iend_BE, mkexpr(op2addr),
9871b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                 NULL, mkexpr(op1), /* expected value */
9872b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                 NULL, mkexpr(op3)  /* new value */);
9873b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   stmt(IRStmt_CAS(cas));
9874b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9875b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* Set CC. Operands compared equal -> 0, else 1. */
9876b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Sub64, mkexpr(op1), mkexpr(old_mem)));
9877b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_put1(S390_CC_OP_BITWISE, result, False);
9878b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9879b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* If operands were equal (cc == 0) just store the old value op1 in r1.
9880b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      Otherwise, store the old_value from memory in r1 and yield. */
9881b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(nequal, binop(Iop_CmpNE32, s390_call_calculate_cc(), mkU32(0)));
9882b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkite(mkexpr(nequal), mkexpr(old_mem), mkexpr(op1)));
9883b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   stmt(IRStmt_Exit(mkexpr(nequal), Ijk_Yield,
9884b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        IRConst_U64(guest_IA_next_instr)));
9885b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9886b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "csg";
9887b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
9888b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9889b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9890b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Binary floating point */
9891b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9892b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
9893b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_AXBR(UChar r1, UChar r2)
9894b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
9895b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_F128);
9896b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_F128);
9897b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_F128);
9898b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9899b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_fpr_pair(r1));
9900b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_fpr_pair(r2));
9901b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, triop(Iop_AddF128, mkU32(Irrm_NEAREST), mkexpr(op1),
9902b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                        mkexpr(op2)));
9903b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_pair(r1, mkexpr(result));
9904b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9905b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_put1f128(S390_CC_OP_BFP_RESULT_128, result);
9906b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9907b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "axbr";
9908b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
9909b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9910b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* The result of a Iop_CmdFxx operation is a condition code. It is
9911b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   encoded using the values defined in type IRCmpFxxResult.
9912b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   Before we can store the condition code into the guest state (or do
9913b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   anything else with it for that matter) we need to convert it to
9914b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   the encoding that s390 uses. This is what this function does.
9915b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9916b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390     VEX                b6 b2 b0   cc.1  cc.0
9917b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   0      0x40 EQ             1  0  0     0     0
9918b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   1      0x01 LT             0  0  1     0     1
9919b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   2      0x00 GT             0  0  0     1     0
9920b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   3      0x45 Unordered      1  1  1     1     1
9921b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9922b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   The following bits from the VEX encoding are interesting:
9923b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   b0, b2, b6  with b0 being the LSB. We observe:
9924b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9925b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   cc.0 = b0;
9926b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   cc.1 = b2 | (~b0 & ~b6)
9927b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9928b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   with cc being the s390 condition code.
9929b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov*/
9930b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic IRExpr *
9931b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovconvert_vex_fpcc_to_s390(IRTemp vex_cc)
9932b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
9933b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp cc0  = newTemp(Ity_I32);
9934b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp cc1  = newTemp(Ity_I32);
9935b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp b0   = newTemp(Ity_I32);
9936b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp b2   = newTemp(Ity_I32);
9937b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp b6   = newTemp(Ity_I32);
9938b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9939b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(b0, binop(Iop_And32, mkexpr(vex_cc), mkU32(1)));
9940b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(b2, binop(Iop_And32, binop(Iop_Shr32, mkexpr(vex_cc), mkU8(2)),
9941b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    mkU32(1)));
9942b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(b6, binop(Iop_And32, binop(Iop_Shr32, mkexpr(vex_cc), mkU8(6)),
9943b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                    mkU32(1)));
9944b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9945b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(cc0, mkexpr(b0));
9946b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(cc1, binop(Iop_Or32, mkexpr(b2),
9947b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     binop(Iop_And32,
9948b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                           binop(Iop_Sub32, mkU32(1), mkexpr(b0)), /* ~b0 */
9949b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                           binop(Iop_Sub32, mkU32(1), mkexpr(b6))  /* ~b6 */
9950b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                           )));
9951b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9952b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return binop(Iop_Or32, mkexpr(cc0), binop(Iop_Shl32, mkexpr(cc1), mkU8(1)));
9953b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
9954b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9955b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
9956b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CEBR(UChar r1, UChar r2)
9957b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
9958b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_F32);
9959b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_F32);
9960b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp cc_vex  = newTemp(Ity_I32);
9961b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp cc_s390 = newTemp(Ity_I32);
9962b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9963b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_fpr_w0(r1));
9964b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_fpr_w0(r2));
9965b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(cc_vex, binop(Iop_CmpF32, mkexpr(op1), mkexpr(op2)));
9966b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9967b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(cc_s390, convert_vex_fpcc_to_s390(cc_vex));
9968b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_put1(S390_CC_OP_SET, cc_s390, False);
9969b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9970b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "cebr";
9971b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
9972b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9973b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
9974b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CDBR(UChar r1, UChar r2)
9975b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
9976b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_F64);
9977b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_F64);
9978b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp cc_vex  = newTemp(Ity_I32);
9979b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp cc_s390 = newTemp(Ity_I32);
9980b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9981b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_fpr_dw0(r1));
9982b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_fpr_dw0(r2));
9983b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(cc_vex, binop(Iop_CmpF64, mkexpr(op1), mkexpr(op2)));
9984b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9985b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(cc_s390, convert_vex_fpcc_to_s390(cc_vex));
9986b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_put1(S390_CC_OP_SET, cc_s390, False);
9987b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9988b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "cdbr";
9989b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
9990b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9991b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
9992b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CXBR(UChar r1, UChar r2)
9993b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
9994b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_F128);
9995b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_F128);
9996b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp cc_vex  = newTemp(Ity_I32);
9997b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp cc_s390 = newTemp(Ity_I32);
9998b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9999b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_fpr_pair(r1));
10000b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_fpr_pair(r2));
10001b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(cc_vex, binop(Iop_CmpF128, mkexpr(op1), mkexpr(op2)));
10002b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10003b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(cc_s390, convert_vex_fpcc_to_s390(cc_vex));
10004b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_put1(S390_CC_OP_SET, cc_s390, False);
10005b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10006b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "cxbr";
10007b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10008b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10009b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
10010b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CEB(UChar r1, IRTemp op2addr)
10011b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10012b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_F32);
10013b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_F32);
10014b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp cc_vex  = newTemp(Ity_I32);
10015b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp cc_s390 = newTemp(Ity_I32);
10016b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10017b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_fpr_w0(r1));
10018b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_F32, mkexpr(op2addr)));
10019b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(cc_vex,  binop(Iop_CmpF32, mkexpr(op1), mkexpr(op2)));
10020b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10021b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(cc_s390, convert_vex_fpcc_to_s390(cc_vex));
10022b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_put1(S390_CC_OP_SET, cc_s390, False);
10023b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10024b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "ceb";
10025b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10026b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10027b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
10028b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CDB(UChar r1, IRTemp op2addr)
10029b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10030b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_F64);
10031b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_F64);
10032b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp cc_vex  = newTemp(Ity_I32);
10033b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp cc_s390 = newTemp(Ity_I32);
10034b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10035b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_fpr_dw0(r1));
10036b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, load(Ity_F64, mkexpr(op2addr)));
10037b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(cc_vex, binop(Iop_CmpF64, mkexpr(op1), mkexpr(op2)));
10038b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10039b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(cc_s390, convert_vex_fpcc_to_s390(cc_vex));
10040b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_put1(S390_CC_OP_SET, cc_s390, False);
10041b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10042b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "cdb";
10043b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10044b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10045b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
10046b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CXFBR(UChar r1, UChar r2)
10047b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10048b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I32);
10049b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10050b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_w1(r2));
10051b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_pair(r1, unop(Iop_I32StoF128, mkexpr(op2)));
10052b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10053b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "cxfbr";
10054b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10055b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10056b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
10057b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CXGBR(UChar r1, UChar r2)
10058b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10059b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_I64);
10060b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10061b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_gpr_dw0(r2));
10062b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_pair(r1, unop(Iop_I64StoF128, mkexpr(op2)));
10063b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10064b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "cxgbr";
10065b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10066b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10067b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
10068b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CFXBR(UChar r3, UChar r1, UChar r2)
10069b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10070b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op = newTemp(Ity_F128);
10071b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
10072b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10073b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op, get_fpr_pair(r2));
10074b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_F128toI32S, mkU32(encode_rounding_mode(r3)),
10075b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                        mkexpr(op)));
10076b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(result));
10077b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_put1f128(S390_CC_OP_BFP_128_TO_INT_32, op);
10078b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10079b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "cfxbr";
10080b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10081b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10082b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
10083b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CGXBR(UChar r3, UChar r1, UChar r2)
10084b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10085b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op = newTemp(Ity_F128);
10086b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I64);
10087b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10088b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op, get_fpr_pair(r2));
10089b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_F128toI64S, mkU32(encode_rounding_mode(r3)),
10090b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                        mkexpr(op)));
10091b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(result));
10092b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_put1f128(S390_CC_OP_BFP_128_TO_INT_64, op);
10093b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10094b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "cgxbr";
10095b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10096b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10097b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
10098b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_DXBR(UChar r1, UChar r2)
10099b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10100b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_F128);
10101b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_F128);
10102b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_F128);
10103b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10104b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_fpr_pair(r1));
10105b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_fpr_pair(r2));
10106b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, triop(Iop_DivF128, mkU32(Irrm_NEAREST), mkexpr(op1),
10107b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                        mkexpr(op2)));
10108b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_pair(r1, mkexpr(result));
10109b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10110b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "dxbr";
10111b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10112b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10113b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
10114b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LTXBR(UChar r1, UChar r2)
10115b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10116b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_F128);
10117b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10118b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, get_fpr_pair(r2));
10119b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_pair(r1, mkexpr(result));
10120b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_put1f128(S390_CC_OP_BFP_RESULT_128, result);
10121b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10122b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "ltxbr";
10123b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10124b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10125b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
10126b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LCXBR(UChar r1, UChar r2)
10127b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10128b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_F128);
10129b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10130b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, unop(Iop_NegF128, get_fpr_pair(r2)));
10131b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_pair(r1, mkexpr(result));
10132b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_put1f128(S390_CC_OP_BFP_RESULT_128, result);
10133b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10134b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lcxbr";
10135b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10136b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10137b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
10138b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LXDBR(UChar r1, UChar r2)
10139b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10140b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op = newTemp(Ity_F64);
10141b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10142b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op, get_fpr_dw0(r2));
10143b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_pair(r1, unop(Iop_F64toF128, mkexpr(op)));
10144b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10145b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lxdbr";
10146b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10147b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10148b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
10149b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LXEBR(UChar r1, UChar r2)
10150b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10151b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op = newTemp(Ity_F32);
10152b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10153b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op, get_fpr_w0(r2));
10154b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_pair(r1, unop(Iop_F32toF128, mkexpr(op)));
10155b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10156b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lxebr";
10157b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10158b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10159b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
10160b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LXDB(UChar r1, IRTemp op2addr)
10161b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10162b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op = newTemp(Ity_F64);
10163b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10164b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op, load(Ity_F64, mkexpr(op2addr)));
10165b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_pair(r1, unop(Iop_F64toF128, mkexpr(op)));
10166b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10167b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lxdb";
10168b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10169b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10170b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
10171b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LXEB(UChar r1, IRTemp op2addr)
10172b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10173b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op = newTemp(Ity_F32);
10174b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10175b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op, load(Ity_F32, mkexpr(op2addr)));
10176b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_pair(r1, unop(Iop_F32toF128, mkexpr(op)));
10177b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10178b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lxeb";
10179b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10180b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10181b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
10182b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LNEBR(UChar r1, UChar r2)
10183b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10184b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_F32);
10185b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10186b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, unop(Iop_NegF32, unop(Iop_AbsF32, get_fpr_w0(r2))));
10187b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_w0(r1, mkexpr(result));
10188b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_put1f(S390_CC_OP_BFP_RESULT_32, result);
10189b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10190b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lnebr";
10191b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10192b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10193b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
10194b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LNDBR(UChar r1, UChar r2)
10195b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10196b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_F64);
10197b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10198b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, unop(Iop_NegF64, unop(Iop_AbsF64, get_fpr_dw0(r2))));
10199b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_dw0(r1, mkexpr(result));
10200b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_put1f(S390_CC_OP_BFP_RESULT_64, result);
10201b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10202b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lndbr";
10203b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10204b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10205b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
10206b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LNXBR(UChar r1, UChar r2)
10207b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10208b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_F128);
10209b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10210b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, unop(Iop_NegF128, unop(Iop_AbsF128, get_fpr_pair(r2))));
10211b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_pair(r1, mkexpr(result));
10212b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_put1f128(S390_CC_OP_BFP_RESULT_128, result);
10213b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10214b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lnxbr";
10215b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10216b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10217b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
10218b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LPEBR(UChar r1, UChar r2)
10219b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10220b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_F32);
10221b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10222b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, unop(Iop_AbsF32, get_fpr_w0(r2)));
10223b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_w0(r1, mkexpr(result));
10224b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_put1f(S390_CC_OP_BFP_RESULT_32, result);
10225b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10226b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lpebr";
10227b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10228b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10229b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
10230b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LPDBR(UChar r1, UChar r2)
10231b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10232b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_F64);
10233b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10234b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, unop(Iop_AbsF64, get_fpr_dw0(r2)));
10235b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_dw0(r1, mkexpr(result));
10236b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_put1f(S390_CC_OP_BFP_RESULT_64, result);
10237b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10238b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lpdbr";
10239b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10240b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10241b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
10242b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LPXBR(UChar r1, UChar r2)
10243b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10244b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_F128);
10245b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10246b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, unop(Iop_AbsF128, get_fpr_pair(r2)));
10247b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_pair(r1, mkexpr(result));
10248b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_put1f128(S390_CC_OP_BFP_RESULT_128, result);
10249b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10250b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lpxbr";
10251b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10252b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10253b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
10254b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LDXBR(UChar r1, UChar r2)
10255b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10256b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_F64);
10257b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10258b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_F128toF64, mkU32(Irrm_NEAREST), get_fpr_pair(r2)));
10259b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_dw0(r1, mkexpr(result));
10260b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10261b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "ldxbr";
10262b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10263b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10264b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
10265b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LEXBR(UChar r1, UChar r2)
10266b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10267b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_F32);
10268b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10269b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_F128toF32, mkU32(Irrm_NEAREST), get_fpr_pair(r2)));
10270b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_w0(r1, mkexpr(result));
10271b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10272b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lexbr";
10273b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10274b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10275b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
10276b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_MXBR(UChar r1, UChar r2)
10277b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10278b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_F128);
10279b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_F128);
10280b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_F128);
10281b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10282b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_fpr_pair(r1));
10283b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_fpr_pair(r2));
10284b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, triop(Iop_MulF128, mkU32(Irrm_NEAREST), mkexpr(op1),
10285b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                        mkexpr(op2)));
10286b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_pair(r1, mkexpr(result));
10287b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10288b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "mxbr";
10289b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10290b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10291b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
10292b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_MAEBR(UChar r1, UChar r3, UChar r2)
10293b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10294b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_w0(r1, qop(Iop_MAddF32, mkU32(Irrm_NEAREST),
10295b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                      get_fpr_w0(r1), get_fpr_w0(r2), get_fpr_w0(r3)));
10296b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10297b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "maebr";
10298b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10299b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10300b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
10301b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_MADBR(UChar r1, UChar r3, UChar r2)
10302b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10303b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_dw0(r1, qop(Iop_MAddF64, mkU32(Irrm_NEAREST),
10304b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                       get_fpr_dw0(r1), get_fpr_dw0(r2), get_fpr_dw0(r3)));
10305b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10306b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "madbr";
10307b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10308b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10309b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
10310b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_MAEB(UChar r3, IRTemp op2addr, UChar r1)
10311b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10312b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRExpr *op2 = load(Ity_F32, mkexpr(op2addr));
10313b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10314b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_w0(r1, qop(Iop_MAddF32, mkU32(Irrm_NEAREST),
10315b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                      get_fpr_w0(r1), op2, get_fpr_w0(r3)));
10316b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10317b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "maeb";
10318b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10319b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10320b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
10321b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_MADB(UChar r3, IRTemp op2addr, UChar r1)
10322b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10323b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRExpr *op2 = load(Ity_F64, mkexpr(op2addr));
10324b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10325b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_dw0(r1, qop(Iop_MAddF64, mkU32(Irrm_NEAREST),
10326b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                       get_fpr_dw0(r1), op2, get_fpr_dw0(r3)));
10327b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10328b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "madb";
10329b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10330b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10331b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
10332b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_MSEBR(UChar r1, UChar r3, UChar r2)
10333b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10334b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_w0(r1, qop(Iop_MSubF32, mkU32(Irrm_NEAREST),
10335b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                      get_fpr_w0(r1), get_fpr_w0(r2), get_fpr_w0(r3)));
10336b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10337b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "msebr";
10338b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10339b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10340b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
10341b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_MSDBR(UChar r1, UChar r3, UChar r2)
10342b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10343b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_dw0(r1, qop(Iop_MSubF64, mkU32(Irrm_NEAREST),
10344b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                       get_fpr_dw0(r1), get_fpr_dw0(r2), get_fpr_dw0(r3)));
10345b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10346b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "msdbr";
10347b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10348b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10349b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
10350b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_MSEB(UChar r3, IRTemp op2addr, UChar r1)
10351b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10352b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRExpr *op2 = load(Ity_F32, mkexpr(op2addr));
10353b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10354b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_w0(r1, qop(Iop_MSubF32, mkU32(Irrm_NEAREST),
10355b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                      get_fpr_w0(r1), op2, get_fpr_w0(r3)));
10356b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10357b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "mseb";
10358b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10359b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10360b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
10361b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_MSDB(UChar r3, IRTemp op2addr, UChar r1)
10362b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10363b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRExpr *op2 = load(Ity_F64, mkexpr(op2addr));
10364b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10365b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_dw0(r1, qop(Iop_MSubF64, mkU32(Irrm_NEAREST),
10366b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                       get_fpr_dw0(r1), op2, get_fpr_dw0(r3)));
10367b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10368b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "msdb";
10369b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10370b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10371b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
10372b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_SQEBR(UChar r1, UChar r2)
10373b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10374b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_F32);
10375b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10376b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_SqrtF32, mkU32(Irrm_NEAREST), get_fpr_w0(r2)));
10377b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_w0(r1, mkexpr(result));
10378b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10379b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "sqebr";
10380b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10381b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10382b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
10383b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_SQDBR(UChar r1, UChar r2)
10384b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10385b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_F64);
10386b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10387b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_SqrtF64, mkU32(Irrm_NEAREST), get_fpr_dw0(r2)));
10388b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_dw0(r1, mkexpr(result));
10389b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10390b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "sqdbr";
10391b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10392b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10393b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
10394b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_SQXBR(UChar r1, UChar r2)
10395b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10396b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_F128);
10397b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10398b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_SqrtF128, mkU32(Irrm_NEAREST), get_fpr_pair(r2)));
10399b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_pair(r1, mkexpr(result));
10400b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10401b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "sqxbr";
10402b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10403b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10404b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
10405b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_SQEB(UChar r1, IRTemp op2addr)
10406b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10407b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op = newTemp(Ity_F32);
10408b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10409b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op, load(Ity_F32, mkexpr(op2addr)));
10410b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_w0(r1, binop(Iop_SqrtF32, mkU32(Irrm_NEAREST), mkexpr(op)));
10411b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10412b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "sqeb";
10413b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10414b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10415b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
10416b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_SQDB(UChar r1, IRTemp op2addr)
10417b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10418b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op = newTemp(Ity_F64);
10419b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10420b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op, load(Ity_F64, mkexpr(op2addr)));
10421b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_dw0(r1, binop(Iop_SqrtF64, mkU32(Irrm_NEAREST), mkexpr(op)));
10422b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10423b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "sqdb";
10424b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10425b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10426b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
10427b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_SXBR(UChar r1, UChar r2)
10428b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10429b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op1 = newTemp(Ity_F128);
10430b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op2 = newTemp(Ity_F128);
10431b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_F128);
10432b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10433b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op1, get_fpr_pair(r1));
10434b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op2, get_fpr_pair(r2));
10435b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, triop(Iop_SubF128, mkU32(Irrm_NEAREST), mkexpr(op1),
10436b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                        mkexpr(op2)));
10437b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_pair(r1, mkexpr(result));
10438b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_put1f128(S390_CC_OP_BFP_RESULT_128, result);
10439b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10440b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "sxbr";
10441b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10442b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10443b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
10444b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_TCEB(UChar r1, IRTemp op2addr)
10445b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10446b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp value = newTemp(Ity_F32);
10447b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10448b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(value, get_fpr_w0(r1));
10449b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10450b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putFZ(S390_CC_OP_BFP_TDC_32, value, op2addr);
10451b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10452b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "tceb";
10453b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10454b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10455b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
10456b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_TCDB(UChar r1, IRTemp op2addr)
10457b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10458b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp value = newTemp(Ity_F64);
10459b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10460b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(value, get_fpr_dw0(r1));
10461b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10462b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_putFZ(S390_CC_OP_BFP_TDC_64, value, op2addr);
10463b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10464b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "tcdb";
10465b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10466b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10467b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
10468b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_TCXB(UChar r1, IRTemp op2addr)
10469b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10470b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp value = newTemp(Ity_F128);
10471b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10472b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(value, get_fpr_pair(r1));
10473b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10474b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_put1f128Z(S390_CC_OP_BFP_TDC_128, value, op2addr);
10475b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10476b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "tcxb";
10477b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10478b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10479b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
10480b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LCDFR(UChar r1, UChar r2)
10481b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10482b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_F64);
10483b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10484b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, unop(Iop_NegF64, get_fpr_dw0(r2)));
10485b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_dw0(r1, mkexpr(result));
10486b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10487b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lcdfr";
10488b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10489b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10490b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
10491b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LNDFR(UChar r1, UChar r2)
10492b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10493b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_F64);
10494b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10495b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, unop(Iop_NegF64, unop(Iop_AbsF64, get_fpr_dw0(r2))));
10496b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_dw0(r1, mkexpr(result));
10497b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10498b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lndfr";
10499b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10500b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10501b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
10502b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LPDFR(UChar r1, UChar r2)
10503b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10504b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_F64);
10505b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10506b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, unop(Iop_AbsF64, get_fpr_dw0(r2)));
10507b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_dw0(r1, mkexpr(result));
10508b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10509b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lpdfr";
10510b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10511b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10512b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
10513b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LDGR(UChar r1, UChar r2)
10514b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10515b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_dw0(r1, unop(Iop_ReinterpI64asF64, get_gpr_dw0(r2)));
10516b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10517b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "ldgr";
10518b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10519b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10520b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
10521b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_LGDR(UChar r1, UChar r2)
10522b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10523b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, unop(Iop_ReinterpF64asI64, get_fpr_dw0(r2)));
10524b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10525b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "lgdr";
10526b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10527b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10528b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10529b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
10530b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CPSDR(UChar r3, UChar r1, UChar r2)
10531b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10532b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp sign  = newTemp(Ity_I64);
10533b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp value = newTemp(Ity_I64);
10534b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10535b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(sign, binop(Iop_And64, unop(Iop_ReinterpF64asI64, get_fpr_dw0(r3)),
10536b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                      mkU64(1ULL << 63)));
10537b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(value, binop(Iop_And64, unop(Iop_ReinterpF64asI64, get_fpr_dw0(r2)),
10538b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                       mkU64((1ULL << 63) - 1)));
10539b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_fpr_dw0(r1, unop(Iop_ReinterpI64asF64, binop(Iop_Or64, mkexpr(value),
10540b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                    mkexpr(sign))));
10541b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10542b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "cpsdr";
10543b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10544b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10545b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10546b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic UInt
10547b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_do_cvb(ULong decimal)
10548b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10549b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if defined(VGA_s390x)
10550b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UInt binary;
10551b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10552b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   __asm__ volatile (
10553b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "cvb %[result],%[input]\n\t"
10554b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          : [result] "=d"(binary)
10555b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          : [input] "m"(decimal)
10556b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   );
10557b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10558b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return binary;
10559b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#else
10560b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return 0;
10561b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif
10562b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10563b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10564b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic IRExpr *
10565b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_call_cvb(IRExpr *in)
10566b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10567b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRExpr **args, *call;
10568b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10569b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   args = mkIRExprVec_1(in);
10570b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   call = mkIRExprCCall(Ity_I32, 0 /*regparm*/,
10571b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                        "s390_do_cvb", &s390_do_cvb, args);
10572b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10573b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* Nothing is excluded from definedness checking. */
10574b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   call->Iex.CCall.cee->mcx_mask = 0;
10575b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10576b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return call;
10577b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10578b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10579b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
10580b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CVB(UChar r1, IRTemp op2addr)
10581b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10582b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, s390_call_cvb(load(Ity_I64, mkexpr(op2addr))));
10583b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10584b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "cvb";
10585b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10586b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10587b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
10588b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CVBY(UChar r1, IRTemp op2addr)
10589b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10590b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, s390_call_cvb(load(Ity_I64, mkexpr(op2addr))));
10591b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10592b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "cvby";
10593b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10594b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10595b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10596b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic ULong
10597b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_do_cvd(ULong binary_in)
10598b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10599b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if defined(VGA_s390x)
10600b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UInt binary = binary_in & 0xffffffffULL;
10601b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   ULong decimal;
10602b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10603b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   __asm__ volatile (
10604b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        "cvd %[input],%[result]\n\t"
10605b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          : [result] "=m"(decimal)
10606b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          : [input] "d"(binary)
10607b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   );
10608b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10609b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return decimal;
10610b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#else
10611b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return 0;
10612b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif
10613b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10614b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10615b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic IRExpr *
10616b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_call_cvd(IRExpr *in)
10617b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10618b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRExpr **args, *call;
10619b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10620b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   args = mkIRExprVec_1(in);
10621b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   call = mkIRExprCCall(Ity_I64, 0 /*regparm*/,
10622b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                        "s390_do_cvd", &s390_do_cvd, args);
10623b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10624b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* Nothing is excluded from definedness checking. */
10625b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   call->Iex.CCall.cee->mcx_mask = 0;
10626b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10627b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return call;
10628b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10629b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10630b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
10631b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CVD(UChar r1, IRTemp op2addr)
10632b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10633b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(mkexpr(op2addr), s390_call_cvd(get_gpr_w1(r1)));
10634b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10635b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "cvd";
10636b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10637b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10638b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
10639b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CVDY(UChar r1, IRTemp op2addr)
10640b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10641b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   store(mkexpr(op2addr), s390_call_cvd(get_gpr_w1(r1)));
10642b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10643b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "cvdy";
10644b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10645b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10646b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
10647b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_FLOGR(UChar r1, UChar r2)
10648b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10649b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp input    = newTemp(Ity_I64);
10650b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp not_zero = newTemp(Ity_I64);
10651b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp tmpnum   = newTemp(Ity_I64);
10652b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp num      = newTemp(Ity_I64);
10653b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp shift_amount = newTemp(Ity_I8);
10654b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10655b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* We use the "count leading zeroes" operator because the number of
10656b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      leading zeroes is identical with the bit position of the first '1' bit.
10657b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      However, that operator does not work when the input value is zero.
10658b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      Therefore, we set the LSB of the input value to 1 and use Clz64 on
10659b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      the modified value. If input == 0, then the result is 64. Otherwise,
10660b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      the result of Clz64 is what we want. */
10661b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10662b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(input, get_gpr_dw0(r2));
10663b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(not_zero, binop(Iop_Or64, mkexpr(input), mkU64(1)));
10664b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(tmpnum, unop(Iop_Clz64, mkexpr(not_zero)));
10665b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10666b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* num = (input == 0) ? 64 : tmpnum */
10667b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(num, mkite(binop(Iop_CmpEQ64, mkexpr(input), mkU64(0)),
10668b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     /* == 0 */ mkU64(64),
10669b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     /* != 0 */ mkexpr(tmpnum)));
10670b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10671b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1, mkexpr(num));
10672b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10673b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* Set the leftmost '1' bit of the input value to zero. The general scheme
10674b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      is to first shift the input value by NUM + 1 bits to the left which
10675b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      causes the leftmost '1' bit to disappear. Then we shift logically to
10676b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      the right by NUM + 1 bits. Because the semantics of Iop_Shl64 and
10677b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      Iop_Shr64 are undefined if the shift-amount is greater than or equal to
10678b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      the width of the value-to-be-shifted, we need to special case
10679b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      NUM + 1 >= 64. This is equivalent to INPUT != 0 && INPUT != 1.
10680b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      For both such INPUT values the result will be 0. */
10681b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10682b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(shift_amount, unop(Iop_64to8, binop(Iop_Add64, mkexpr(num),
10683b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                          mkU64(1))));
10684b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10685b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r1 + 1,
10686b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov               mkite(binop(Iop_CmpLE64U, mkexpr(input), mkU64(1)),
10687b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     /* == 0 || == 1*/ mkU64(0),
10688b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     /* otherwise */
10689b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     binop(Iop_Shr64,
10690b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                           binop(Iop_Shl64, mkexpr(input),
10691b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                 mkexpr(shift_amount)),
10692b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                           mkexpr(shift_amount))));
10693b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10694b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* Compare the original value as an unsigned integer with 0. */
10695b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_put2(S390_CC_OP_UNSIGNED_COMPARE, input,
10696b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                      mktemp(Ity_I64, mkU64(0)), False);
10697b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10698b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "flogr";
10699b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10700b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10701b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
10702b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_STCK(IRTemp op2addr)
10703b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10704b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRDirty *d;
10705b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp cc = newTemp(Ity_I64);
10706b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10707b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   d = unsafeIRDirty_1_N(cc, 0, "s390x_dirtyhelper_STCK",
10708b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                         &s390x_dirtyhelper_STCK,
10709b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                         mkIRExprVec_1(mkexpr(op2addr)));
10710b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   d->mFx   = Ifx_Write;
10711b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   d->mAddr = mkexpr(op2addr);
10712b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   d->mSize = 8;
10713b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   stmt(IRStmt_Dirty(d));
10714b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_fill(mkU64(S390_CC_OP_SET),
10715b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                      mkexpr(cc), mkU64(0), mkU64(0));
10716b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "stck";
10717b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10718b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10719b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
10720b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_STCKF(IRTemp op2addr)
10721b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10722b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRDirty *d;
10723b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp cc = newTemp(Ity_I64);
10724b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10725b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   d = unsafeIRDirty_1_N(cc, 0, "s390x_dirtyhelper_STCKF",
10726b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                         &s390x_dirtyhelper_STCKF,
10727b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                         mkIRExprVec_1(mkexpr(op2addr)));
10728b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   d->mFx   = Ifx_Write;
10729b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   d->mAddr = mkexpr(op2addr);
10730b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   d->mSize = 8;
10731b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   stmt(IRStmt_Dirty(d));
10732b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_fill(mkU64(S390_CC_OP_SET),
10733b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                      mkexpr(cc), mkU64(0), mkU64(0));
10734b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "stckf";
10735b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10736b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10737b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
10738b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_STCKE(IRTemp op2addr)
10739b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10740b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRDirty *d;
10741b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp cc = newTemp(Ity_I64);
10742b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10743b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   d = unsafeIRDirty_1_N(cc, 0, "s390x_dirtyhelper_STCKE",
10744b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                         &s390x_dirtyhelper_STCKE,
10745b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                         mkIRExprVec_1(mkexpr(op2addr)));
10746b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   d->mFx   = Ifx_Write;
10747b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   d->mAddr = mkexpr(op2addr);
10748b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   d->mSize = 16;
10749b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   stmt(IRStmt_Dirty(d));
10750b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_fill(mkU64(S390_CC_OP_SET),
10751b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                      mkexpr(cc), mkU64(0), mkU64(0));
10752b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "stcke";
10753b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10754b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10755b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
10756b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_STFLE(IRTemp op2addr)
10757b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10758b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRDirty *d;
10759b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp cc = newTemp(Ity_I64);
10760b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10761b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   d = unsafeIRDirty_1_N(cc, 0, "s390x_dirtyhelper_STFLE",
10762b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                         &s390x_dirtyhelper_STFLE,
10763b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                         mkIRExprVec_1(mkexpr(op2addr)));
10764b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10765b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   d->needsBBP = 1;  /* Need to pass pointer to guest state to helper */
10766b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10767b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   d->fxState[0].fx     = Ifx_Modify;  /* read then write */
10768b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   d->fxState[0].offset = S390X_GUEST_OFFSET(guest_r0);
10769b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   d->fxState[0].size   = sizeof(ULong);
10770b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   d->nFxState = 1;
10771b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10772b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   d->mAddr = mkexpr(op2addr);
10773b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* Pretend all double words are written */
10774b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   d->mSize = S390_NUM_FACILITY_DW * sizeof(ULong);
10775b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   d->mFx   = Ifx_Write;
10776b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10777b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   stmt(IRStmt_Dirty(d));
10778b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10779b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_thunk_fill(mkU64(S390_CC_OP_SET), mkexpr(cc), mkU64(0), mkU64(0));
10780b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10781b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "stfle";
10782b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10783b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10784b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic HChar *
10785b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_CKSM(UChar r1,UChar r2)
10786b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10787b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp addr = newTemp(Ity_I64);
10788b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp op = newTemp(Ity_I32);
10789b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp len = newTemp(Ity_I64);
10790b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp oldval = newTemp(Ity_I32);
10791b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp mask = newTemp(Ity_I32);
10792b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp newop = newTemp(Ity_I32);
10793b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result = newTemp(Ity_I32);
10794b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp result1 = newTemp(Ity_I32);
10795b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   IRTemp inc = newTemp(Ity_I64);
10796b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10797b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(oldval, get_gpr_w1(r1));
10798b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(addr, get_gpr_dw0(r2));
10799b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(len, get_gpr_dw0(r2+1));
10800b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10801b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* Condition code is always zero. */
10802b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_cc_set(0);
10803b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10804b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* If length is zero, there is no need to calculate the checksum */
10805b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if_condition_goto(binop(Iop_CmpEQ64, mkexpr(len), mkU64(0)),
10806b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     guest_IA_next_instr);
10807b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10808b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* Assiging the increment variable to adjust address and length
10809b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      later on. */
10810b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(inc, mkite(binop(Iop_CmpLT64U, mkexpr(len), mkU64(4)),
10811b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                           mkexpr(len), mkU64(4)));
10812b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10813b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* If length < 4 the final 4-byte 2nd operand value is computed by
10814b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      appending the remaining bytes to the right with 0. This is done
10815b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      by AND'ing the 4 bytes loaded from memory with an appropriate
10816b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      mask. If length >= 4, that mask is simply 0xffffffff. */
10817b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10818b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(mask, mkite(binop(Iop_CmpLT64U, mkexpr(len), mkU64(4)),
10819b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                      /* Mask computation when len < 4:
10820b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                         0xffffffff << (32 - (len % 4)*8) */
10821b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                      binop(Iop_Shl32, mkU32(0xffffffff),
10822b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                            unop(Iop_32to8,
10823b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                 binop(Iop_Sub32, mkU32(32),
10824b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                       binop(Iop_Shl32,
10825b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                             unop(Iop_64to32,
10826b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                  binop(Iop_And64,
10827b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                        mkexpr(len), mkU64(3))),
10828b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                             mkU8(3))))),
10829b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                      mkU32(0xffffffff)));
10830b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10831b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(op, load(Ity_I32, mkexpr(addr)));
10832b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(newop, binop(Iop_And32, mkexpr(op), mkexpr(mask)));
10833b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result, binop(Iop_Add32, mkexpr(newop), mkexpr(oldval)));
10834b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10835b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* Checking for carry */
10836b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   assign(result1, mkite(binop(Iop_CmpLT32U, mkexpr(result), mkexpr(newop)),
10837b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                         binop(Iop_Add32, mkexpr(result), mkU32(1)),
10838b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                         mkexpr(result)));
10839b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10840b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_w1(r1, mkexpr(result1));
10841b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r2, binop(Iop_Add64, mkexpr(addr), mkexpr(inc)));
10842b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(r2+1, binop(Iop_Sub64, mkexpr(len), mkexpr(inc)));
10843b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10844b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if_condition_goto(binop(Iop_CmpNE64, mkexpr(len), mkU64(0)),
10845b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                     guest_IA_curr_instr);
10846b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10847b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return "cksm";
10848b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10849b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10850b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10851b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/*------------------------------------------------------------*/
10852b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/*--- Build IR for special instructions                    ---*/
10853b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/*------------------------------------------------------------*/
10854b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10855b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
10856b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_client_request(void)
10857b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10858b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (0)
10859b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      vex_printf("%%R3 = client_request ( %%R2 )\n");
10860b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10861b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   irsb->next = mkU64((ULong)(guest_IA_curr_instr
10862b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                              + S390_SPECIAL_OP_PREAMBLE_SIZE
10863b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                              + S390_SPECIAL_OP_SIZE));
10864b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   irsb->jumpkind = Ijk_ClientReq;
10865b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10866b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   dis_res->whatNext = Dis_StopHere;
10867b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10868b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10869b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
10870b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_guest_NRADDR(void)
10871b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10872b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (0)
10873b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      vex_printf("%%R3 = guest_NRADDR\n");
10874b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10875b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(3, IRExpr_Get(S390X_GUEST_OFFSET(guest_NRADDR), Ity_I64));
10876b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10877b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10878b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void
10879b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_irgen_call_noredir(void)
10880b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10881b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* Continue after special op */
10882b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   put_gpr_dw0(14, mkU64(guest_IA_curr_instr
10883b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                         + S390_SPECIAL_OP_PREAMBLE_SIZE
10884b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                         + S390_SPECIAL_OP_SIZE));
10885b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10886b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* The address is in REG1, all parameters are in the right (guest) places */
10887b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   irsb->next     = get_gpr_dw0(1);
10888b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   irsb->jumpkind = Ijk_NoRedir;
10889b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10890b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   dis_res->whatNext = Dis_StopHere;
10891b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
10892b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10893b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Force proper alignment for the structures below. */
10894b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#pragma pack(1)
10895b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10896b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10897b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic s390_decode_t
10898b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_decode_2byte_and_irgen(UChar *bytes)
10899b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
10900b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   typedef union {
10901b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      struct {
10902b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int op : 16;
10903b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      } E;
10904b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      struct {
10905b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int op :  8;
10906b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int i  :  8;
10907b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      } I;
10908b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      struct {
10909b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int op :  8;
10910b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int r1 :  4;
10911b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int r2 :  4;
10912b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      } RR;
10913b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } formats;
10914b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   union {
10915b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      formats fmt;
10916b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      UShort value;
10917b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } ovl;
10918b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10919b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   vassert(sizeof(formats) == 2);
10920b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10921b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   ((char *)(&ovl.value))[0] = bytes[0];
10922b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   ((char *)(&ovl.value))[1] = bytes[1];
10923b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10924b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   switch (ovl.value & 0xffff) {
10925b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x0000: /* invalid opcode */
10926b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_format_RR_RR(s390_irgen_00, 0, 0); goto ok;
10927b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x0101: /* PR */ goto unimplemented;
10928b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x0102: /* UPT */ goto unimplemented;
10929b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x0104: /* PTFF */ goto unimplemented;
10930b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x0107: /* SCKPF */ goto unimplemented;
10931b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x010a: /* PFPO */ goto unimplemented;
10932b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x010b: /* TAM */ goto unimplemented;
10933b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x010c: /* SAM24 */ goto unimplemented;
10934b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x010d: /* SAM31 */ goto unimplemented;
10935b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x010e: /* SAM64 */ goto unimplemented;
10936b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x01ff: /* TRAP2 */ goto unimplemented;
10937b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
10938b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
10939b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   switch ((ovl.value & 0xff00) >> 8) {
10940b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x04: /* SPM */ goto unimplemented;
10941b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x05: /* BALR */ goto unimplemented;
10942b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x06: s390_format_RR_RR(s390_irgen_BCTR, ovl.fmt.RR.r1, ovl.fmt.RR.r2);
10943b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                goto ok;
10944b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x07: s390_format_RR(s390_irgen_BCR, ovl.fmt.RR.r1, ovl.fmt.RR.r2);
10945b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                             goto ok;
10946b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x0a: s390_format_I(s390_irgen_SVC, ovl.fmt.I.i);  goto ok;
10947b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x0b: /* BSM */ goto unimplemented;
10948b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x0c: /* BASSM */ goto unimplemented;
10949b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x0d: s390_format_RR_RR(s390_irgen_BASR, ovl.fmt.RR.r1, ovl.fmt.RR.r2);
10950b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                goto ok;
10951b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x0e: s390_format_RR(s390_irgen_MVCL, ovl.fmt.RR.r1, ovl.fmt.RR.r2);
10952b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                             goto ok;
10953b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x0f: s390_format_RR(s390_irgen_CLCL, ovl.fmt.RR.r1, ovl.fmt.RR.r2);
10954b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                             goto ok;
10955b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x10: s390_format_RR_RR(s390_irgen_LPR, ovl.fmt.RR.r1, ovl.fmt.RR.r2);
10956b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                goto ok;
10957b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x11: s390_format_RR_RR(s390_irgen_LNR, ovl.fmt.RR.r1, ovl.fmt.RR.r2);
10958b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                goto ok;
10959b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x12: s390_format_RR_RR(s390_irgen_LTR, ovl.fmt.RR.r1, ovl.fmt.RR.r2);
10960b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                goto ok;
10961b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x13: s390_format_RR_RR(s390_irgen_LCR, ovl.fmt.RR.r1, ovl.fmt.RR.r2);
10962b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                goto ok;
10963b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x14: s390_format_RR_RR(s390_irgen_NR, ovl.fmt.RR.r1, ovl.fmt.RR.r2);
10964b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                goto ok;
10965b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x15: s390_format_RR_RR(s390_irgen_CLR, ovl.fmt.RR.r1, ovl.fmt.RR.r2);
10966b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                goto ok;
10967b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x16: s390_format_RR_RR(s390_irgen_OR, ovl.fmt.RR.r1, ovl.fmt.RR.r2);
10968b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                goto ok;
10969b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x17: s390_format_RR_RR(s390_irgen_XR, ovl.fmt.RR.r1, ovl.fmt.RR.r2);
10970b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                goto ok;
10971b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x18: s390_format_RR_RR(s390_irgen_LR, ovl.fmt.RR.r1, ovl.fmt.RR.r2);
10972b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                goto ok;
10973b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x19: s390_format_RR_RR(s390_irgen_CR, ovl.fmt.RR.r1, ovl.fmt.RR.r2);
10974b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                goto ok;
10975b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x1a: s390_format_RR_RR(s390_irgen_AR, ovl.fmt.RR.r1, ovl.fmt.RR.r2);
10976b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                goto ok;
10977b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x1b: s390_format_RR_RR(s390_irgen_SR, ovl.fmt.RR.r1, ovl.fmt.RR.r2);
10978b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                goto ok;
10979b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x1c: s390_format_RR_RR(s390_irgen_MR, ovl.fmt.RR.r1, ovl.fmt.RR.r2);
10980b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                goto ok;
10981b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x1d: s390_format_RR_RR(s390_irgen_DR, ovl.fmt.RR.r1, ovl.fmt.RR.r2);
10982b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                goto ok;
10983b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x1e: s390_format_RR_RR(s390_irgen_ALR, ovl.fmt.RR.r1, ovl.fmt.RR.r2);
10984b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                goto ok;
10985b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x1f: s390_format_RR_RR(s390_irgen_SLR, ovl.fmt.RR.r1, ovl.fmt.RR.r2);
10986b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                goto ok;
10987b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x20: /* LPDR */ goto unimplemented;
10988b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x21: /* LNDR */ goto unimplemented;
10989b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x22: /* LTDR */ goto unimplemented;
10990b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x23: /* LCDR */ goto unimplemented;
10991b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x24: /* HDR */ goto unimplemented;
10992b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x25: /* LDXR */ goto unimplemented;
10993b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x26: /* MXR */ goto unimplemented;
10994b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x27: /* MXDR */ goto unimplemented;
10995b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x28: s390_format_RR_FF(s390_irgen_LDR, ovl.fmt.RR.r1, ovl.fmt.RR.r2);
10996b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                goto ok;
10997b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x29: /* CDR */ goto unimplemented;
10998b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x2a: /* ADR */ goto unimplemented;
10999b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x2b: /* SDR */ goto unimplemented;
11000b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x2c: /* MDR */ goto unimplemented;
11001b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x2d: /* DDR */ goto unimplemented;
11002b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x2e: /* AWR */ goto unimplemented;
11003b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x2f: /* SWR */ goto unimplemented;
11004b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x30: /* LPER */ goto unimplemented;
11005b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x31: /* LNER */ goto unimplemented;
11006b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x32: /* LTER */ goto unimplemented;
11007b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x33: /* LCER */ goto unimplemented;
11008b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x34: /* HER */ goto unimplemented;
11009b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x35: /* LEDR */ goto unimplemented;
11010b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x36: /* AXR */ goto unimplemented;
11011b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x37: /* SXR */ goto unimplemented;
11012b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x38: s390_format_RR_FF(s390_irgen_LER, ovl.fmt.RR.r1, ovl.fmt.RR.r2);
11013b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                goto ok;
11014b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x39: /* CER */ goto unimplemented;
11015b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x3a: /* AER */ goto unimplemented;
11016b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x3b: /* SER */ goto unimplemented;
11017b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x3c: /* MDER */ goto unimplemented;
11018b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x3d: /* DER */ goto unimplemented;
11019b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x3e: /* AUR */ goto unimplemented;
11020b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x3f: /* SUR */ goto unimplemented;
11021b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
11022b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
11023b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return S390_DECODE_UNKNOWN_INSN;
11024b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
11025b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovok:
11026b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return S390_DECODE_OK;
11027b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
11028b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovunimplemented:
11029b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return S390_DECODE_UNIMPLEMENTED_INSN;
11030b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
11031b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
11032b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic s390_decode_t
11033b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_decode_4byte_and_irgen(UChar *bytes)
11034b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
11035b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   typedef union {
11036b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      struct {
11037b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int op1 :  8;
11038b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int r1  :  4;
11039b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int op2 :  4;
11040b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int i2  : 16;
11041b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      } RI;
11042b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      struct {
11043b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int op : 16;
11044b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int    :  8;
11045b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int r1 :  4;
11046b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int r2 :  4;
11047b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      } RRE;
11048b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      struct {
11049b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int op : 16;
11050b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int r1 :  4;
11051b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int    :  4;
11052b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int r3 :  4;
11053b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int r2 :  4;
11054b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      } RRF;
11055b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      struct {
11056b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int op : 16;
11057b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int r3 :  4;
11058b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int m4 :  4;
11059b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int r1 :  4;
11060b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int r2 :  4;
11061b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      } RRF2;
11062b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      struct {
11063b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int op : 16;
11064b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int r3 :  4;
11065b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int    :  4;
11066b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int r1 :  4;
11067b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int r2 :  4;
11068b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      } RRF3;
11069b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      struct {
11070b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int op : 16;
11071b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int r3 :  4;
11072b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int    :  4;
11073b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int r1 :  4;
11074b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int r2 :  4;
11075b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      } RRR;
11076b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      struct {
11077b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int op : 16;
11078b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int r3 :  4;
11079b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int    :  4;
11080b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int r1 :  4;
11081b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int r2 :  4;
11082b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      } RRF4;
11083b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      struct {
11084b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int op :  8;
11085b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int r1 :  4;
11086b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int r3 :  4;
11087b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int b2 :  4;
11088b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int d2 : 12;
11089b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      } RS;
11090b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      struct {
11091b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int op :  8;
11092b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int r1 :  4;
11093b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int r3 :  4;
11094b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int i2 : 16;
11095b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      } RSI;
11096b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      struct {
11097b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int op :  8;
11098b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int r1 :  4;
11099b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int x2 :  4;
11100b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int b2 :  4;
11101b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int d2 : 12;
11102b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      } RX;
11103b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      struct {
11104b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int op : 16;
11105b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int b2 :  4;
11106b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int d2 : 12;
11107b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      } S;
11108b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      struct {
11109b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int op :  8;
11110b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int i2 :  8;
11111b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int b1 :  4;
11112b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int d1 : 12;
11113b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      } SI;
11114b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } formats;
11115b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   union {
11116b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      formats fmt;
11117b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      UInt value;
11118b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } ovl;
11119b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
11120b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   vassert(sizeof(formats) == 4);
11121b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
11122b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   ((char *)(&ovl.value))[0] = bytes[0];
11123b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   ((char *)(&ovl.value))[1] = bytes[1];
11124b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   ((char *)(&ovl.value))[2] = bytes[2];
11125b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   ((char *)(&ovl.value))[3] = bytes[3];
11126b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
11127b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   switch ((ovl.value & 0xff0f0000) >> 16) {
11128b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xa500: s390_format_RI_RU(s390_irgen_IIHH, ovl.fmt.RI.r1,
11129b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RI.i2);  goto ok;
11130b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xa501: s390_format_RI_RU(s390_irgen_IIHL, ovl.fmt.RI.r1,
11131b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RI.i2);  goto ok;
11132b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xa502: s390_format_RI_RU(s390_irgen_IILH, ovl.fmt.RI.r1,
11133b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RI.i2);  goto ok;
11134b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xa503: s390_format_RI_RU(s390_irgen_IILL, ovl.fmt.RI.r1,
11135b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RI.i2);  goto ok;
11136b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xa504: s390_format_RI_RU(s390_irgen_NIHH, ovl.fmt.RI.r1,
11137b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RI.i2);  goto ok;
11138b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xa505: s390_format_RI_RU(s390_irgen_NIHL, ovl.fmt.RI.r1,
11139b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RI.i2);  goto ok;
11140b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xa506: s390_format_RI_RU(s390_irgen_NILH, ovl.fmt.RI.r1,
11141b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RI.i2);  goto ok;
11142b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xa507: s390_format_RI_RU(s390_irgen_NILL, ovl.fmt.RI.r1,
11143b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RI.i2);  goto ok;
11144b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xa508: s390_format_RI_RU(s390_irgen_OIHH, ovl.fmt.RI.r1,
11145b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RI.i2);  goto ok;
11146b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xa509: s390_format_RI_RU(s390_irgen_OIHL, ovl.fmt.RI.r1,
11147b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RI.i2);  goto ok;
11148b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xa50a: s390_format_RI_RU(s390_irgen_OILH, ovl.fmt.RI.r1,
11149b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RI.i2);  goto ok;
11150b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xa50b: s390_format_RI_RU(s390_irgen_OILL, ovl.fmt.RI.r1,
11151b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RI.i2);  goto ok;
11152b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xa50c: s390_format_RI_RU(s390_irgen_LLIHH, ovl.fmt.RI.r1,
11153b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RI.i2);  goto ok;
11154b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xa50d: s390_format_RI_RU(s390_irgen_LLIHL, ovl.fmt.RI.r1,
11155b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RI.i2);  goto ok;
11156b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xa50e: s390_format_RI_RU(s390_irgen_LLILH, ovl.fmt.RI.r1,
11157b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RI.i2);  goto ok;
11158b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xa50f: s390_format_RI_RU(s390_irgen_LLILL, ovl.fmt.RI.r1,
11159b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RI.i2);  goto ok;
11160b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xa700: s390_format_RI_RU(s390_irgen_TMLH, ovl.fmt.RI.r1,
11161b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RI.i2);  goto ok;
11162b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xa701: s390_format_RI_RU(s390_irgen_TMLL, ovl.fmt.RI.r1,
11163b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RI.i2);  goto ok;
11164b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xa702: s390_format_RI_RU(s390_irgen_TMHH, ovl.fmt.RI.r1,
11165b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RI.i2);  goto ok;
11166b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xa703: s390_format_RI_RU(s390_irgen_TMHL, ovl.fmt.RI.r1,
11167b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RI.i2);  goto ok;
11168b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xa704: s390_format_RI(s390_irgen_BRC, ovl.fmt.RI.r1, ovl.fmt.RI.i2);
11169b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                               goto ok;
11170b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xa705: s390_format_RI_RP(s390_irgen_BRAS, ovl.fmt.RI.r1,
11171b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RI.i2);  goto ok;
11172b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xa706: s390_format_RI_RP(s390_irgen_BRCT, ovl.fmt.RI.r1,
11173b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RI.i2);  goto ok;
11174b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xa707: s390_format_RI_RP(s390_irgen_BRCTG, ovl.fmt.RI.r1,
11175b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RI.i2);  goto ok;
11176b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xa708: s390_format_RI_RI(s390_irgen_LHI, ovl.fmt.RI.r1, ovl.fmt.RI.i2);
11177b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  goto ok;
11178b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xa709: s390_format_RI_RI(s390_irgen_LGHI, ovl.fmt.RI.r1,
11179b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RI.i2);  goto ok;
11180b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xa70a: s390_format_RI_RI(s390_irgen_AHI, ovl.fmt.RI.r1, ovl.fmt.RI.i2);
11181b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  goto ok;
11182b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xa70b: s390_format_RI_RI(s390_irgen_AGHI, ovl.fmt.RI.r1,
11183b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RI.i2);  goto ok;
11184b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xa70c: s390_format_RI_RI(s390_irgen_MHI, ovl.fmt.RI.r1, ovl.fmt.RI.i2);
11185b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  goto ok;
11186b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xa70d: s390_format_RI_RI(s390_irgen_MGHI, ovl.fmt.RI.r1,
11187b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RI.i2);  goto ok;
11188b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xa70e: s390_format_RI_RI(s390_irgen_CHI, ovl.fmt.RI.r1, ovl.fmt.RI.i2);
11189b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  goto ok;
11190b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xa70f: s390_format_RI_RI(s390_irgen_CGHI, ovl.fmt.RI.r1,
11191b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RI.i2);  goto ok;
11192b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
11193b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
11194b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   switch ((ovl.value & 0xffff0000) >> 16) {
11195b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x8000: /* SSM */ goto unimplemented;
11196b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x8200: /* LPSW */ goto unimplemented;
11197b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x9300: s390_format_S_RD(s390_irgen_TS, ovl.fmt.S.b2, ovl.fmt.S.d2);
11198b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                 goto ok;
11199b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb202: /* STIDP */ goto unimplemented;
11200b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb204: /* SCK */ goto unimplemented;
11201b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb205: s390_format_S_RD(s390_irgen_STCK, ovl.fmt.S.b2, ovl.fmt.S.d2);goto ok;
11202b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb206: /* SCKC */ goto unimplemented;
11203b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb207: /* STCKC */ goto unimplemented;
11204b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb208: /* SPT */ goto unimplemented;
11205b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb209: /* STPT */ goto unimplemented;
11206b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb20a: /* SPKA */ goto unimplemented;
11207b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb20b: /* IPK */ goto unimplemented;
11208b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb20d: /* PTLB */ goto unimplemented;
11209b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb210: /* SPX */ goto unimplemented;
11210b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb211: /* STPX */ goto unimplemented;
11211b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb212: /* STAP */ goto unimplemented;
11212b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb214: /* SIE */ goto unimplemented;
11213b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb218: /* PC */ goto unimplemented;
11214b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb219: /* SAC */ goto unimplemented;
11215b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb21a: /* CFC */ goto unimplemented;
11216b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb221: /* IPTE */ goto unimplemented;
11217b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb222: s390_format_RRE_R0(s390_irgen_IPM, ovl.fmt.RRE.r1);  goto ok;
11218b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb223: /* IVSK */ goto unimplemented;
11219b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb224: /* IAC */ goto unimplemented;
11220b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb225: /* SSAR */ goto unimplemented;
11221b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb226: /* EPAR */ goto unimplemented;
11222b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb227: /* ESAR */ goto unimplemented;
11223b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb228: /* PT */ goto unimplemented;
11224b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb229: /* ISKE */ goto unimplemented;
11225b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb22a: /* RRBE */ goto unimplemented;
11226b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb22b: /* SSKE */ goto unimplemented;
11227b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb22c: /* TB */ goto unimplemented;
11228b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb22d: /* DXR */ goto unimplemented;
11229b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb22e: /* PGIN */ goto unimplemented;
11230b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb22f: /* PGOUT */ goto unimplemented;
11231b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb230: /* CSCH */ goto unimplemented;
11232b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb231: /* HSCH */ goto unimplemented;
11233b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb232: /* MSCH */ goto unimplemented;
11234b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb233: /* SSCH */ goto unimplemented;
11235b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb234: /* STSCH */ goto unimplemented;
11236b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb235: /* TSCH */ goto unimplemented;
11237b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb236: /* TPI */ goto unimplemented;
11238b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb237: /* SAL */ goto unimplemented;
11239b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb238: /* RSCH */ goto unimplemented;
11240b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb239: /* STCRW */ goto unimplemented;
11241b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb23a: /* STCPS */ goto unimplemented;
11242b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb23b: /* RCHP */ goto unimplemented;
11243b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb23c: /* SCHM */ goto unimplemented;
11244b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb240: /* BAKR */ goto unimplemented;
11245b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb241: s390_format_RRE(s390_irgen_CKSM, ovl.fmt.RRE.r1,
11246b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                ovl.fmt.RRE.r2);  goto ok;
11247b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb244: /* SQDR */ goto unimplemented;
11248b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb245: /* SQER */ goto unimplemented;
11249b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb246: /* STURA */ goto unimplemented;
11250b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb247: /* MSTA */ goto unimplemented;
11251b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb248: /* PALB */ goto unimplemented;
11252b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb249: /* EREG */ goto unimplemented;
11253b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb24a: /* ESTA */ goto unimplemented;
11254b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb24b: /* LURA */ goto unimplemented;
11255b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb24c: /* TAR */ goto unimplemented;
11256b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb24d: s390_format_RRE(s390_irgen_CPYA, ovl.fmt.RRE.r1,
11257b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                ovl.fmt.RRE.r2);  goto ok;
11258b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb24e: s390_format_RRE(s390_irgen_SAR, ovl.fmt.RRE.r1, ovl.fmt.RRE.r2);
11259b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                goto ok;
11260b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb24f: s390_format_RRE(s390_irgen_EAR, ovl.fmt.RRE.r1, ovl.fmt.RRE.r2);
11261b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                goto ok;
11262b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb250: /* CSP */ goto unimplemented;
11263b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb252: s390_format_RRE_RR(s390_irgen_MSR, ovl.fmt.RRE.r1,
11264b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11265b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb254: /* MVPG */ goto unimplemented;
11266b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb255: s390_format_RRE_RR(s390_irgen_MVST, ovl.fmt.RRE.r1,
11267b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11268b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb257: /* CUSE */ goto unimplemented;
11269b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb258: /* BSG */ goto unimplemented;
11270b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb25a: /* BSA */ goto unimplemented;
11271b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb25d: s390_format_RRE_RR(s390_irgen_CLST, ovl.fmt.RRE.r1,
11272b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11273b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb25e: s390_format_RRE_RR(s390_irgen_SRST, ovl.fmt.RRE.r1,
11274b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11275b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb263: /* CMPSC */ goto unimplemented;
11276b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb274: /* SIGA */ goto unimplemented;
11277b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb276: /* XSCH */ goto unimplemented;
11278b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb277: /* RP */ goto unimplemented;
11279b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb278: s390_format_S_RD(s390_irgen_STCKE, ovl.fmt.S.b2, ovl.fmt.S.d2);goto ok;
11280b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb279: /* SACF */ goto unimplemented;
11281b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb27c: s390_format_S_RD(s390_irgen_STCKF, ovl.fmt.S.b2, ovl.fmt.S.d2);goto ok;
11282b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb27d: /* STSI */ goto unimplemented;
11283b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb299: s390_format_S_RD(s390_irgen_SRNM, ovl.fmt.S.b2, ovl.fmt.S.d2);
11284b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                 goto ok;
11285b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb29c: s390_format_S_RD(s390_irgen_STFPC, ovl.fmt.S.b2, ovl.fmt.S.d2);
11286b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                 goto ok;
11287b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb29d: s390_format_S_RD(s390_irgen_LFPC, ovl.fmt.S.b2, ovl.fmt.S.d2);
11288b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                 goto ok;
11289b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb2a5: /* TRE */ goto unimplemented;
11290b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb2a6: /* CU21 */ goto unimplemented;
11291b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb2a7: /* CU12 */ goto unimplemented;
11292b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb2b0: s390_format_S_RD(s390_irgen_STFLE, ovl.fmt.S.b2, ovl.fmt.S.d2);
11293b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                 goto ok;
11294b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb2b1: /* STFL */ goto unimplemented;
11295b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb2b2: /* LPSWE */ goto unimplemented;
11296b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb2b8: /* SRNMB */ goto unimplemented;
11297b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb2b9: /* SRNMT */ goto unimplemented;
11298b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb2bd: /* LFAS */ goto unimplemented;
11299b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb2ff: /* TRAP4 */ goto unimplemented;
11300b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb300: s390_format_RRE_FF(s390_irgen_LPEBR, ovl.fmt.RRE.r1,
11301b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11302b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb301: s390_format_RRE_FF(s390_irgen_LNEBR, ovl.fmt.RRE.r1,
11303b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11304b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb302: s390_format_RRE_FF(s390_irgen_LTEBR, ovl.fmt.RRE.r1,
11305b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11306b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb303: s390_format_RRE_FF(s390_irgen_LCEBR, ovl.fmt.RRE.r1,
11307b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11308b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb304: s390_format_RRE_FF(s390_irgen_LDEBR, ovl.fmt.RRE.r1,
11309b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11310b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb305: s390_format_RRE_FF(s390_irgen_LXDBR, ovl.fmt.RRE.r1,
11311b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11312b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb306: s390_format_RRE_FF(s390_irgen_LXEBR, ovl.fmt.RRE.r1,
11313b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11314b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb307: /* MXDBR */ goto unimplemented;
11315b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb308: /* KEBR */ goto unimplemented;
11316b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb309: s390_format_RRE_FF(s390_irgen_CEBR, ovl.fmt.RRE.r1,
11317b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11318b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb30a: s390_format_RRE_FF(s390_irgen_AEBR, ovl.fmt.RRE.r1,
11319b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11320b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb30b: s390_format_RRE_FF(s390_irgen_SEBR, ovl.fmt.RRE.r1,
11321b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11322b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb30c: /* MDEBR */ goto unimplemented;
11323b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb30d: s390_format_RRE_FF(s390_irgen_DEBR, ovl.fmt.RRE.r1,
11324b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11325b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb30e: s390_format_RRF_F0FF(s390_irgen_MAEBR, ovl.fmt.RRF.r1,
11326b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                     ovl.fmt.RRF.r3, ovl.fmt.RRF.r2);  goto ok;
11327b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb30f: s390_format_RRF_F0FF(s390_irgen_MSEBR, ovl.fmt.RRF.r1,
11328b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                     ovl.fmt.RRF.r3, ovl.fmt.RRF.r2);  goto ok;
11329b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb310: s390_format_RRE_FF(s390_irgen_LPDBR, ovl.fmt.RRE.r1,
11330b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11331b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb311: s390_format_RRE_FF(s390_irgen_LNDBR, ovl.fmt.RRE.r1,
11332b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11333b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb312: s390_format_RRE_FF(s390_irgen_LTDBR, ovl.fmt.RRE.r1,
11334b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11335b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb313: s390_format_RRE_FF(s390_irgen_LCDBR, ovl.fmt.RRE.r1,
11336b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11337b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb314: s390_format_RRE_FF(s390_irgen_SQEBR, ovl.fmt.RRE.r1,
11338b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11339b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb315: s390_format_RRE_FF(s390_irgen_SQDBR, ovl.fmt.RRE.r1,
11340b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11341b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb316: s390_format_RRE_FF(s390_irgen_SQXBR, ovl.fmt.RRE.r1,
11342b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11343b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb317: s390_format_RRE_FF(s390_irgen_MEEBR, ovl.fmt.RRE.r1,
11344b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11345b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb318: /* KDBR */ goto unimplemented;
11346b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb319: s390_format_RRE_FF(s390_irgen_CDBR, ovl.fmt.RRE.r1,
11347b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11348b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb31a: s390_format_RRE_FF(s390_irgen_ADBR, ovl.fmt.RRE.r1,
11349b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11350b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb31b: s390_format_RRE_FF(s390_irgen_SDBR, ovl.fmt.RRE.r1,
11351b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11352b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb31c: s390_format_RRE_FF(s390_irgen_MDBR, ovl.fmt.RRE.r1,
11353b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11354b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb31d: s390_format_RRE_FF(s390_irgen_DDBR, ovl.fmt.RRE.r1,
11355b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11356b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb31e: s390_format_RRF_F0FF(s390_irgen_MADBR, ovl.fmt.RRF.r1,
11357b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                     ovl.fmt.RRF.r3, ovl.fmt.RRF.r2);  goto ok;
11358b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb31f: s390_format_RRF_F0FF(s390_irgen_MSDBR, ovl.fmt.RRF.r1,
11359b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                     ovl.fmt.RRF.r3, ovl.fmt.RRF.r2);  goto ok;
11360b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb324: /* LDER */ goto unimplemented;
11361b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb325: /* LXDR */ goto unimplemented;
11362b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb326: /* LXER */ goto unimplemented;
11363b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb32e: /* MAER */ goto unimplemented;
11364b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb32f: /* MSER */ goto unimplemented;
11365b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb336: /* SQXR */ goto unimplemented;
11366b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb337: /* MEER */ goto unimplemented;
11367b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb338: /* MAYLR */ goto unimplemented;
11368b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb339: /* MYLR */ goto unimplemented;
11369b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb33a: /* MAYR */ goto unimplemented;
11370b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb33b: /* MYR */ goto unimplemented;
11371b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb33c: /* MAYHR */ goto unimplemented;
11372b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb33d: /* MYHR */ goto unimplemented;
11373b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb33e: /* MADR */ goto unimplemented;
11374b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb33f: /* MSDR */ goto unimplemented;
11375b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb340: s390_format_RRE_FF(s390_irgen_LPXBR, ovl.fmt.RRE.r1,
11376b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11377b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb341: s390_format_RRE_FF(s390_irgen_LNXBR, ovl.fmt.RRE.r1,
11378b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11379b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb342: s390_format_RRE_FF(s390_irgen_LTXBR, ovl.fmt.RRE.r1,
11380b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11381b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb343: s390_format_RRE_FF(s390_irgen_LCXBR, ovl.fmt.RRE.r1,
11382b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11383b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb344: s390_format_RRE_FF(s390_irgen_LEDBR, ovl.fmt.RRE.r1,
11384b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11385b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb345: s390_format_RRE_FF(s390_irgen_LDXBR, ovl.fmt.RRE.r1,
11386b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11387b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb346: s390_format_RRE_FF(s390_irgen_LEXBR, ovl.fmt.RRE.r1,
11388b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11389b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb347: /* FIXBR */ goto unimplemented;
11390b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb348: /* KXBR */ goto unimplemented;
11391b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb349: s390_format_RRE_FF(s390_irgen_CXBR, ovl.fmt.RRE.r1,
11392b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11393b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb34a: s390_format_RRE_FF(s390_irgen_AXBR, ovl.fmt.RRE.r1,
11394b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11395b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb34b: s390_format_RRE_FF(s390_irgen_SXBR, ovl.fmt.RRE.r1,
11396b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11397b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb34c: s390_format_RRE_FF(s390_irgen_MXBR, ovl.fmt.RRE.r1,
11398b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11399b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb34d: s390_format_RRE_FF(s390_irgen_DXBR, ovl.fmt.RRE.r1,
11400b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11401b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb350: /* TBEDR */ goto unimplemented;
11402b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb351: /* TBDR */ goto unimplemented;
11403b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb353: /* DIEBR */ goto unimplemented;
11404b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb357: /* FIEBR */ goto unimplemented;
11405b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb358: /* THDER */ goto unimplemented;
11406b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb359: /* THDR */ goto unimplemented;
11407b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb35b: /* DIDBR */ goto unimplemented;
11408b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb35f: /* FIDBR */ goto unimplemented;
11409b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb360: /* LPXR */ goto unimplemented;
11410b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb361: /* LNXR */ goto unimplemented;
11411b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb362: /* LTXR */ goto unimplemented;
11412b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb363: /* LCXR */ goto unimplemented;
11413b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb365: s390_format_RRE_FF(s390_irgen_LXR, ovl.fmt.RRE.r1,
11414b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11415b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb366: /* LEXR */ goto unimplemented;
11416b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb367: /* FIXR */ goto unimplemented;
11417b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb369: /* CXR */ goto unimplemented;
11418b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb370: s390_format_RRE_FF(s390_irgen_LPDFR, ovl.fmt.RRE.r1,
11419b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11420b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb371: s390_format_RRE_FF(s390_irgen_LNDFR, ovl.fmt.RRE.r1,
11421b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11422b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb372: s390_format_RRF_F0FF2(s390_irgen_CPSDR, ovl.fmt.RRF3.r3,
11423b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RRF3.r1, ovl.fmt.RRF3.r2);
11424b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      goto ok;
11425b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb373: s390_format_RRE_FF(s390_irgen_LCDFR, ovl.fmt.RRE.r1,
11426b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11427b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb374: s390_format_RRE_F0(s390_irgen_LZER, ovl.fmt.RRE.r1);  goto ok;
11428b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb375: s390_format_RRE_F0(s390_irgen_LZDR, ovl.fmt.RRE.r1);  goto ok;
11429b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb376: s390_format_RRE_F0(s390_irgen_LZXR, ovl.fmt.RRE.r1);  goto ok;
11430b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb377: /* FIER */ goto unimplemented;
11431b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb37f: /* FIDR */ goto unimplemented;
11432b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb384: s390_format_RRE_R0(s390_irgen_SFPC, ovl.fmt.RRE.r1);  goto ok;
11433b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb385: /* SFASR */ goto unimplemented;
11434b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb38c: s390_format_RRE_R0(s390_irgen_EFPC, ovl.fmt.RRE.r1);  goto ok;
11435b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb390: /* CELFBR */ goto unimplemented;
11436b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb391: /* CDLFBR */ goto unimplemented;
11437b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb392: /* CXLFBR */ goto unimplemented;
11438b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb394: s390_format_RRE_FR(s390_irgen_CEFBR, ovl.fmt.RRE.r1,
11439b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11440b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb395: s390_format_RRE_FR(s390_irgen_CDFBR, ovl.fmt.RRE.r1,
11441b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11442b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb396: s390_format_RRE_FR(s390_irgen_CXFBR, ovl.fmt.RRE.r1,
11443b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11444b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb398: s390_format_RRF_U0RF(s390_irgen_CFEBR, ovl.fmt.RRF3.r3,
11445b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                     ovl.fmt.RRF3.r1, ovl.fmt.RRF3.r2);
11446b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                     goto ok;
11447b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb399: s390_format_RRF_U0RF(s390_irgen_CFDBR, ovl.fmt.RRF3.r3,
11448b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                     ovl.fmt.RRF3.r1, ovl.fmt.RRF3.r2);
11449b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                     goto ok;
11450b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb39a: s390_format_RRF_U0RF(s390_irgen_CFXBR, ovl.fmt.RRF3.r3,
11451b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                     ovl.fmt.RRF3.r1, ovl.fmt.RRF3.r2);
11452b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                     goto ok;
11453b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3a0: /* CELGBR */ goto unimplemented;
11454b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3a1: /* CDLGBR */ goto unimplemented;
11455b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3a2: /* CXLGBR */ goto unimplemented;
11456b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3a4: s390_format_RRE_FR(s390_irgen_CEGBR, ovl.fmt.RRE.r1,
11457b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11458b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3a5: s390_format_RRE_FR(s390_irgen_CDGBR, ovl.fmt.RRE.r1,
11459b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11460b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3a6: s390_format_RRE_FR(s390_irgen_CXGBR, ovl.fmt.RRE.r1,
11461b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11462b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3a8: s390_format_RRF_U0RF(s390_irgen_CGEBR, ovl.fmt.RRF3.r3,
11463b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                     ovl.fmt.RRF3.r1, ovl.fmt.RRF3.r2);
11464b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                     goto ok;
11465b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3a9: s390_format_RRF_U0RF(s390_irgen_CGDBR, ovl.fmt.RRF3.r3,
11466b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                     ovl.fmt.RRF3.r1, ovl.fmt.RRF3.r2);
11467b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                     goto ok;
11468b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3aa: s390_format_RRF_U0RF(s390_irgen_CGXBR, ovl.fmt.RRF3.r3,
11469b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                     ovl.fmt.RRF3.r1, ovl.fmt.RRF3.r2);
11470b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                     goto ok;
11471b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3b4: /* CEFR */ goto unimplemented;
11472b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3b5: /* CDFR */ goto unimplemented;
11473b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3b6: /* CXFR */ goto unimplemented;
11474b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3b8: /* CFER */ goto unimplemented;
11475b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3b9: /* CFDR */ goto unimplemented;
11476b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3ba: /* CFXR */ goto unimplemented;
11477b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3c1: s390_format_RRE_FR(s390_irgen_LDGR, ovl.fmt.RRE.r1,
11478b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11479b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3c4: /* CEGR */ goto unimplemented;
11480b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3c5: /* CDGR */ goto unimplemented;
11481b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3c6: /* CXGR */ goto unimplemented;
11482b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3c8: /* CGER */ goto unimplemented;
11483b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3c9: /* CGDR */ goto unimplemented;
11484b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3ca: /* CGXR */ goto unimplemented;
11485b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3cd: s390_format_RRE_RF(s390_irgen_LGDR, ovl.fmt.RRE.r1,
11486b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11487b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3d0: /* MDTR */ goto unimplemented;
11488b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3d1: /* DDTR */ goto unimplemented;
11489b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3d2: /* ADTR */ goto unimplemented;
11490b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3d3: /* SDTR */ goto unimplemented;
11491b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3d4: /* LDETR */ goto unimplemented;
11492b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3d5: /* LEDTR */ goto unimplemented;
11493b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3d6: /* LTDTR */ goto unimplemented;
11494b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3d7: /* FIDTR */ goto unimplemented;
11495b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3d8: /* MXTR */ goto unimplemented;
11496b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3d9: /* DXTR */ goto unimplemented;
11497b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3da: /* AXTR */ goto unimplemented;
11498b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3db: /* SXTR */ goto unimplemented;
11499b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3dc: /* LXDTR */ goto unimplemented;
11500b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3dd: /* LDXTR */ goto unimplemented;
11501b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3de: /* LTXTR */ goto unimplemented;
11502b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3df: /* FIXTR */ goto unimplemented;
11503b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3e0: /* KDTR */ goto unimplemented;
11504b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3e1: /* CGDTR */ goto unimplemented;
11505b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3e2: /* CUDTR */ goto unimplemented;
11506b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3e3: /* CSDTR */ goto unimplemented;
11507b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3e4: /* CDTR */ goto unimplemented;
11508b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3e5: /* EEDTR */ goto unimplemented;
11509b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3e7: /* ESDTR */ goto unimplemented;
11510b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3e8: /* KXTR */ goto unimplemented;
11511b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3e9: /* CGXTR */ goto unimplemented;
11512b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3ea: /* CUXTR */ goto unimplemented;
11513b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3eb: /* CSXTR */ goto unimplemented;
11514b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3ec: /* CXTR */ goto unimplemented;
11515b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3ed: /* EEXTR */ goto unimplemented;
11516b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3ef: /* ESXTR */ goto unimplemented;
11517b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3f1: /* CDGTR */ goto unimplemented;
11518b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3f2: /* CDUTR */ goto unimplemented;
11519b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3f3: /* CDSTR */ goto unimplemented;
11520b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3f4: /* CEDTR */ goto unimplemented;
11521b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3f5: /* QADTR */ goto unimplemented;
11522b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3f6: /* IEDTR */ goto unimplemented;
11523b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3f7: /* RRDTR */ goto unimplemented;
11524b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3f9: /* CXGTR */ goto unimplemented;
11525b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3fa: /* CXUTR */ goto unimplemented;
11526b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3fb: /* CXSTR */ goto unimplemented;
11527b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3fc: /* CEXTR */ goto unimplemented;
11528b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3fd: /* QAXTR */ goto unimplemented;
11529b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3fe: /* IEXTR */ goto unimplemented;
11530b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb3ff: /* RRXTR */ goto unimplemented;
11531b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb900: s390_format_RRE_RR(s390_irgen_LPGR, ovl.fmt.RRE.r1,
11532b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11533b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb901: s390_format_RRE_RR(s390_irgen_LNGR, ovl.fmt.RRE.r1,
11534b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11535b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb902: s390_format_RRE_RR(s390_irgen_LTGR, ovl.fmt.RRE.r1,
11536b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11537b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb903: s390_format_RRE_RR(s390_irgen_LCGR, ovl.fmt.RRE.r1,
11538b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11539b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb904: s390_format_RRE_RR(s390_irgen_LGR, ovl.fmt.RRE.r1,
11540b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11541b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb905: /* LURAG */ goto unimplemented;
11542b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb906: s390_format_RRE_RR(s390_irgen_LGBR, ovl.fmt.RRE.r1,
11543b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11544b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb907: s390_format_RRE_RR(s390_irgen_LGHR, ovl.fmt.RRE.r1,
11545b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11546b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb908: s390_format_RRE_RR(s390_irgen_AGR, ovl.fmt.RRE.r1,
11547b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11548b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb909: s390_format_RRE_RR(s390_irgen_SGR, ovl.fmt.RRE.r1,
11549b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11550b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb90a: s390_format_RRE_RR(s390_irgen_ALGR, ovl.fmt.RRE.r1,
11551b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11552b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb90b: s390_format_RRE_RR(s390_irgen_SLGR, ovl.fmt.RRE.r1,
11553b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11554b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb90c: s390_format_RRE_RR(s390_irgen_MSGR, ovl.fmt.RRE.r1,
11555b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11556b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb90d: s390_format_RRE_RR(s390_irgen_DSGR, ovl.fmt.RRE.r1,
11557b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11558b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb90e: /* EREGG */ goto unimplemented;
11559b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb90f: s390_format_RRE_RR(s390_irgen_LRVGR, ovl.fmt.RRE.r1,
11560b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11561b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb910: s390_format_RRE_RR(s390_irgen_LPGFR, ovl.fmt.RRE.r1,
11562b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11563b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb911: s390_format_RRE_RR(s390_irgen_LNGFR, ovl.fmt.RRE.r1,
11564b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11565b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb912: s390_format_RRE_RR(s390_irgen_LTGFR, ovl.fmt.RRE.r1,
11566b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11567b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb913: s390_format_RRE_RR(s390_irgen_LCGFR, ovl.fmt.RRE.r1,
11568b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11569b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb914: s390_format_RRE_RR(s390_irgen_LGFR, ovl.fmt.RRE.r1,
11570b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11571b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb916: s390_format_RRE_RR(s390_irgen_LLGFR, ovl.fmt.RRE.r1,
11572b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11573b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb917: s390_format_RRE_RR(s390_irgen_LLGTR, ovl.fmt.RRE.r1,
11574b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11575b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb918: s390_format_RRE_RR(s390_irgen_AGFR, ovl.fmt.RRE.r1,
11576b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11577b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb919: s390_format_RRE_RR(s390_irgen_SGFR, ovl.fmt.RRE.r1,
11578b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11579b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb91a: s390_format_RRE_RR(s390_irgen_ALGFR, ovl.fmt.RRE.r1,
11580b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11581b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb91b: s390_format_RRE_RR(s390_irgen_SLGFR, ovl.fmt.RRE.r1,
11582b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11583b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb91c: s390_format_RRE_RR(s390_irgen_MSGFR, ovl.fmt.RRE.r1,
11584b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11585b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb91d: s390_format_RRE_RR(s390_irgen_DSGFR, ovl.fmt.RRE.r1,
11586b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11587b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb91e: /* KMAC */ goto unimplemented;
11588b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb91f: s390_format_RRE_RR(s390_irgen_LRVR, ovl.fmt.RRE.r1,
11589b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11590b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb920: s390_format_RRE_RR(s390_irgen_CGR, ovl.fmt.RRE.r1,
11591b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11592b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb921: s390_format_RRE_RR(s390_irgen_CLGR, ovl.fmt.RRE.r1,
11593b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11594b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb925: /* STURG */ goto unimplemented;
11595b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb926: s390_format_RRE_RR(s390_irgen_LBR, ovl.fmt.RRE.r1,
11596b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11597b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb927: s390_format_RRE_RR(s390_irgen_LHR, ovl.fmt.RRE.r1,
11598b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11599b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb928: /* PCKMO */ goto unimplemented;
11600b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb92b: /* KMO */ goto unimplemented;
11601b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb92c: /* PCC */ goto unimplemented;
11602b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb92d: /* KMCTR */ goto unimplemented;
11603b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb92e: /* KM */ goto unimplemented;
11604b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb92f: /* KMC */ goto unimplemented;
11605b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb930: s390_format_RRE_RR(s390_irgen_CGFR, ovl.fmt.RRE.r1,
11606b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11607b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb931: s390_format_RRE_RR(s390_irgen_CLGFR, ovl.fmt.RRE.r1,
11608b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11609b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb93e: /* KIMD */ goto unimplemented;
11610b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb93f: /* KLMD */ goto unimplemented;
11611b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb941: /* CFDTR */ goto unimplemented;
11612b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb942: /* CLGDTR */ goto unimplemented;
11613b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb943: /* CLFDTR */ goto unimplemented;
11614b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb946: s390_format_RRE_RR(s390_irgen_BCTGR, ovl.fmt.RRE.r1,
11615b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11616b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb949: /* CFXTR */ goto unimplemented;
11617b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb94a: /* CLGXTR */ goto unimplemented;
11618b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb94b: /* CLFXTR */ goto unimplemented;
11619b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb951: /* CDFTR */ goto unimplemented;
11620b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb952: /* CDLGTR */ goto unimplemented;
11621b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb953: /* CDLFTR */ goto unimplemented;
11622b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb959: /* CXFTR */ goto unimplemented;
11623b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb95a: /* CXLGTR */ goto unimplemented;
11624b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb95b: /* CXLFTR */ goto unimplemented;
11625b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb960: /* CGRT */ goto unimplemented;
11626b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb961: /* CLGRT */ goto unimplemented;
11627b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb972: /* CRT */ goto unimplemented;
11628b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb973: /* CLRT */ goto unimplemented;
11629b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb980: s390_format_RRE_RR(s390_irgen_NGR, ovl.fmt.RRE.r1,
11630b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11631b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb981: s390_format_RRE_RR(s390_irgen_OGR, ovl.fmt.RRE.r1,
11632b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11633b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb982: s390_format_RRE_RR(s390_irgen_XGR, ovl.fmt.RRE.r1,
11634b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11635b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb983: s390_format_RRE_RR(s390_irgen_FLOGR, ovl.fmt.RRE.r1,
11636b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11637b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb984: s390_format_RRE_RR(s390_irgen_LLGCR, ovl.fmt.RRE.r1,
11638b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11639b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb985: s390_format_RRE_RR(s390_irgen_LLGHR, ovl.fmt.RRE.r1,
11640b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11641b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb986: s390_format_RRE_RR(s390_irgen_MLGR, ovl.fmt.RRE.r1,
11642b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11643b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb987: s390_format_RRE_RR(s390_irgen_DLGR, ovl.fmt.RRE.r1,
11644b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11645b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb988: s390_format_RRE_RR(s390_irgen_ALCGR, ovl.fmt.RRE.r1,
11646b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11647b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb989: s390_format_RRE_RR(s390_irgen_SLBGR, ovl.fmt.RRE.r1,
11648b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11649b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb98a: /* CSPG */ goto unimplemented;
11650b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb98d: /* EPSW */ goto unimplemented;
11651b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb98e: /* IDTE */ goto unimplemented;
11652b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb990: /* TRTT */ goto unimplemented;
11653b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb991: /* TRTO */ goto unimplemented;
11654b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb992: /* TROT */ goto unimplemented;
11655b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb993: /* TROO */ goto unimplemented;
11656b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb994: s390_format_RRE_RR(s390_irgen_LLCR, ovl.fmt.RRE.r1,
11657b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11658b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb995: s390_format_RRE_RR(s390_irgen_LLHR, ovl.fmt.RRE.r1,
11659b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11660b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb996: s390_format_RRE_RR(s390_irgen_MLR, ovl.fmt.RRE.r1,
11661b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11662b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb997: s390_format_RRE_RR(s390_irgen_DLR, ovl.fmt.RRE.r1,
11663b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11664b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb998: s390_format_RRE_RR(s390_irgen_ALCR, ovl.fmt.RRE.r1,
11665b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11666b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb999: s390_format_RRE_RR(s390_irgen_SLBR, ovl.fmt.RRE.r1,
11667b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11668b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb99a: /* EPAIR */ goto unimplemented;
11669b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb99b: /* ESAIR */ goto unimplemented;
11670b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb99d: /* ESEA */ goto unimplemented;
11671b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb99e: /* PTI */ goto unimplemented;
11672b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb99f: /* SSAIR */ goto unimplemented;
11673b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb9a2: /* PTF */ goto unimplemented;
11674b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb9aa: /* LPTEA */ goto unimplemented;
11675b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb9ae: /* RRBM */ goto unimplemented;
11676b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb9af: /* PFMF */ goto unimplemented;
11677b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb9b0: /* CU14 */ goto unimplemented;
11678b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb9b1: /* CU24 */ goto unimplemented;
11679b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb9b2: /* CU41 */ goto unimplemented;
11680b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb9b3: /* CU42 */ goto unimplemented;
11681b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb9bd: /* TRTRE */ goto unimplemented;
11682b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb9be: /* SRSTU */ goto unimplemented;
11683b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb9bf: /* TRTE */ goto unimplemented;
11684b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb9c8: s390_format_RRF_R0RR2(s390_irgen_AHHHR, ovl.fmt.RRF4.r3,
11685b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RRF4.r1, ovl.fmt.RRF4.r2);
11686b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      goto ok;
11687b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb9c9: s390_format_RRF_R0RR2(s390_irgen_SHHHR, ovl.fmt.RRF4.r3,
11688b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RRF4.r1, ovl.fmt.RRF4.r2);
11689b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      goto ok;
11690b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb9ca: s390_format_RRF_R0RR2(s390_irgen_ALHHHR, ovl.fmt.RRF4.r3,
11691b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RRF4.r1, ovl.fmt.RRF4.r2);
11692b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      goto ok;
11693b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb9cb: s390_format_RRF_R0RR2(s390_irgen_SLHHHR, ovl.fmt.RRF4.r3,
11694b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RRF4.r1, ovl.fmt.RRF4.r2);
11695b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      goto ok;
11696b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb9cd: s390_format_RRE_RR(s390_irgen_CHHR, ovl.fmt.RRE.r1,
11697b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11698b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb9cf: s390_format_RRE_RR(s390_irgen_CLHHR, ovl.fmt.RRE.r1,
11699b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11700b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb9d8: s390_format_RRF_R0RR2(s390_irgen_AHHLR, ovl.fmt.RRF4.r3,
11701b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RRF4.r1, ovl.fmt.RRF4.r2);
11702b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      goto ok;
11703b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb9d9: s390_format_RRF_R0RR2(s390_irgen_SHHLR, ovl.fmt.RRF4.r3,
11704b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RRF4.r1, ovl.fmt.RRF4.r2);
11705b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      goto ok;
11706b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb9da: s390_format_RRF_R0RR2(s390_irgen_ALHHLR, ovl.fmt.RRF4.r3,
11707b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RRF4.r1, ovl.fmt.RRF4.r2);
11708b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      goto ok;
11709b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb9db: s390_format_RRF_R0RR2(s390_irgen_SLHHLR, ovl.fmt.RRF4.r3,
11710b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RRF4.r1, ovl.fmt.RRF4.r2);
11711b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      goto ok;
11712b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb9dd: s390_format_RRE_RR(s390_irgen_CHLR, ovl.fmt.RRE.r1,
11713b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11714b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb9df: s390_format_RRE_RR(s390_irgen_CLHLR, ovl.fmt.RRE.r1,
11715b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RRE.r2);  goto ok;
11716b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb9e1: /* POPCNT */ goto unimplemented;
11717b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb9e2: s390_format_RRF_U0RR(s390_irgen_LOCGR, ovl.fmt.RRF3.r3,
11718b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                     ovl.fmt.RRF3.r1, ovl.fmt.RRF3.r2,
11719b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                     S390_XMNM_LOCGR);  goto ok;
11720b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb9e4: s390_format_RRF_R0RR2(s390_irgen_NGRK, ovl.fmt.RRF4.r3,
11721b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RRF4.r1, ovl.fmt.RRF4.r2);
11722b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      goto ok;
11723b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb9e6: s390_format_RRF_R0RR2(s390_irgen_OGRK, ovl.fmt.RRF4.r3,
11724b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RRF4.r1, ovl.fmt.RRF4.r2);
11725b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      goto ok;
11726b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb9e7: s390_format_RRF_R0RR2(s390_irgen_XGRK, ovl.fmt.RRF4.r3,
11727b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RRF4.r1, ovl.fmt.RRF4.r2);
11728b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      goto ok;
11729b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb9e8: s390_format_RRF_R0RR2(s390_irgen_AGRK, ovl.fmt.RRF4.r3,
11730b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RRF4.r1, ovl.fmt.RRF4.r2);
11731b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      goto ok;
11732b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb9e9: s390_format_RRF_R0RR2(s390_irgen_SGRK, ovl.fmt.RRF4.r3,
11733b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RRF4.r1, ovl.fmt.RRF4.r2);
11734b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      goto ok;
11735b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb9ea: s390_format_RRF_R0RR2(s390_irgen_ALGRK, ovl.fmt.RRF4.r3,
11736b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RRF4.r1, ovl.fmt.RRF4.r2);
11737b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      goto ok;
11738b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb9eb: s390_format_RRF_R0RR2(s390_irgen_SLGRK, ovl.fmt.RRF4.r3,
11739b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RRF4.r1, ovl.fmt.RRF4.r2);
11740b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      goto ok;
11741b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb9f2: s390_format_RRF_U0RR(s390_irgen_LOCR, ovl.fmt.RRF3.r3,
11742b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                     ovl.fmt.RRF3.r1, ovl.fmt.RRF3.r2,
11743b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                     S390_XMNM_LOCR);  goto ok;
11744b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb9f4: s390_format_RRF_R0RR2(s390_irgen_NRK, ovl.fmt.RRF4.r3,
11745b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RRF4.r1, ovl.fmt.RRF4.r2);
11746b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      goto ok;
11747b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb9f6: s390_format_RRF_R0RR2(s390_irgen_ORK, ovl.fmt.RRF4.r3,
11748b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RRF4.r1, ovl.fmt.RRF4.r2);
11749b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      goto ok;
11750b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb9f7: s390_format_RRF_R0RR2(s390_irgen_XRK, ovl.fmt.RRF4.r3,
11751b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RRF4.r1, ovl.fmt.RRF4.r2);
11752b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      goto ok;
11753b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb9f8: s390_format_RRF_R0RR2(s390_irgen_ARK, ovl.fmt.RRF4.r3,
11754b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RRF4.r1, ovl.fmt.RRF4.r2);
11755b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      goto ok;
11756b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb9f9: s390_format_RRF_R0RR2(s390_irgen_SRK, ovl.fmt.RRF4.r3,
11757b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RRF4.r1, ovl.fmt.RRF4.r2);
11758b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      goto ok;
11759b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb9fa: s390_format_RRF_R0RR2(s390_irgen_ALRK, ovl.fmt.RRF4.r3,
11760b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RRF4.r1, ovl.fmt.RRF4.r2);
11761b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      goto ok;
11762b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb9fb: s390_format_RRF_R0RR2(s390_irgen_SLRK, ovl.fmt.RRF4.r3,
11763b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RRF4.r1, ovl.fmt.RRF4.r2);
11764b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      goto ok;
11765b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
11766b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
11767b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   switch ((ovl.value & 0xff000000) >> 24) {
11768b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x40: s390_format_RX_RRRD(s390_irgen_STH, ovl.fmt.RX.r1, ovl.fmt.RX.x2,
11769b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RX.b2, ovl.fmt.RX.d2);  goto ok;
11770b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x41: s390_format_RX_RRRD(s390_irgen_LA, ovl.fmt.RX.r1, ovl.fmt.RX.x2,
11771b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RX.b2, ovl.fmt.RX.d2);  goto ok;
11772b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x42: s390_format_RX_RRRD(s390_irgen_STC, ovl.fmt.RX.r1, ovl.fmt.RX.x2,
11773b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RX.b2, ovl.fmt.RX.d2);  goto ok;
11774b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x43: s390_format_RX_RRRD(s390_irgen_IC, ovl.fmt.RX.r1, ovl.fmt.RX.x2,
11775b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RX.b2, ovl.fmt.RX.d2);  goto ok;
11776b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x44: s390_format_RX_RRRD(s390_irgen_EX, ovl.fmt.RX.r1, ovl.fmt.RX.x2,
11777b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RX.b2, ovl.fmt.RX.d2);  goto ok;
11778b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x45: /* BAL */ goto unimplemented;
11779b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x46: s390_format_RX_RRRD(s390_irgen_BCT, ovl.fmt.RX.r1, ovl.fmt.RX.x2,
11780b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RX.b2, ovl.fmt.RX.d2);  goto ok;
11781b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x47: s390_format_RX(s390_irgen_BC, ovl.fmt.RX.r1, ovl.fmt.RX.x2,
11782b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                             ovl.fmt.RX.b2, ovl.fmt.RX.d2);  goto ok;
11783b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x48: s390_format_RX_RRRD(s390_irgen_LH, ovl.fmt.RX.r1, ovl.fmt.RX.x2,
11784b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RX.b2, ovl.fmt.RX.d2);  goto ok;
11785b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x49: s390_format_RX_RRRD(s390_irgen_CH, ovl.fmt.RX.r1, ovl.fmt.RX.x2,
11786b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RX.b2, ovl.fmt.RX.d2);  goto ok;
11787b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x4a: s390_format_RX_RRRD(s390_irgen_AH, ovl.fmt.RX.r1, ovl.fmt.RX.x2,
11788b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RX.b2, ovl.fmt.RX.d2);  goto ok;
11789b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x4b: s390_format_RX_RRRD(s390_irgen_SH, ovl.fmt.RX.r1, ovl.fmt.RX.x2,
11790b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RX.b2, ovl.fmt.RX.d2);  goto ok;
11791b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x4c: s390_format_RX_RRRD(s390_irgen_MH, ovl.fmt.RX.r1, ovl.fmt.RX.x2,
11792b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RX.b2, ovl.fmt.RX.d2);  goto ok;
11793b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x4d: s390_format_RX_RRRD(s390_irgen_BAS, ovl.fmt.RX.r1, ovl.fmt.RX.x2,
11794b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RX.b2, ovl.fmt.RX.d2);  goto ok;
11795b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x4e: s390_format_RX_RRRD(s390_irgen_CVD, ovl.fmt.RX.r1, ovl.fmt.RX.x2,
11796b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RX.b2, ovl.fmt.RX.d2);  goto ok;
11797b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x4f: s390_format_RX_RRRD(s390_irgen_CVB, ovl.fmt.RX.r1, ovl.fmt.RX.x2,
11798b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RX.b2, ovl.fmt.RX.d2);  goto ok;
11799b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x50: s390_format_RX_RRRD(s390_irgen_ST, ovl.fmt.RX.r1, ovl.fmt.RX.x2,
11800b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RX.b2, ovl.fmt.RX.d2);  goto ok;
11801b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x51: s390_format_RX_RRRD(s390_irgen_LAE, ovl.fmt.RX.r1, ovl.fmt.RX.x2,
11802b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RX.b2, ovl.fmt.RX.d2);  goto ok;
11803b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x54: s390_format_RX_RRRD(s390_irgen_N, ovl.fmt.RX.r1, ovl.fmt.RX.x2,
11804b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RX.b2, ovl.fmt.RX.d2);  goto ok;
11805b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x55: s390_format_RX_RRRD(s390_irgen_CL, ovl.fmt.RX.r1, ovl.fmt.RX.x2,
11806b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RX.b2, ovl.fmt.RX.d2);  goto ok;
11807b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x56: s390_format_RX_RRRD(s390_irgen_O, ovl.fmt.RX.r1, ovl.fmt.RX.x2,
11808b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RX.b2, ovl.fmt.RX.d2);  goto ok;
11809b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x57: s390_format_RX_RRRD(s390_irgen_X, ovl.fmt.RX.r1, ovl.fmt.RX.x2,
11810b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RX.b2, ovl.fmt.RX.d2);  goto ok;
11811b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x58: s390_format_RX_RRRD(s390_irgen_L, ovl.fmt.RX.r1, ovl.fmt.RX.x2,
11812b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RX.b2, ovl.fmt.RX.d2);  goto ok;
11813b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x59: s390_format_RX_RRRD(s390_irgen_C, ovl.fmt.RX.r1, ovl.fmt.RX.x2,
11814b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RX.b2, ovl.fmt.RX.d2);  goto ok;
11815b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x5a: s390_format_RX_RRRD(s390_irgen_A, ovl.fmt.RX.r1, ovl.fmt.RX.x2,
11816b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RX.b2, ovl.fmt.RX.d2);  goto ok;
11817b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x5b: s390_format_RX_RRRD(s390_irgen_S, ovl.fmt.RX.r1, ovl.fmt.RX.x2,
11818b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RX.b2, ovl.fmt.RX.d2);  goto ok;
11819b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x5c: s390_format_RX_RRRD(s390_irgen_M, ovl.fmt.RX.r1, ovl.fmt.RX.x2,
11820b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RX.b2, ovl.fmt.RX.d2);  goto ok;
11821b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x5d: s390_format_RX_RRRD(s390_irgen_D, ovl.fmt.RX.r1, ovl.fmt.RX.x2,
11822b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RX.b2, ovl.fmt.RX.d2);  goto ok;
11823b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x5e: s390_format_RX_RRRD(s390_irgen_AL, ovl.fmt.RX.r1, ovl.fmt.RX.x2,
11824b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RX.b2, ovl.fmt.RX.d2);  goto ok;
11825b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x5f: s390_format_RX_RRRD(s390_irgen_SL, ovl.fmt.RX.r1, ovl.fmt.RX.x2,
11826b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RX.b2, ovl.fmt.RX.d2);  goto ok;
11827b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x60: s390_format_RX_FRRD(s390_irgen_STD, ovl.fmt.RX.r1, ovl.fmt.RX.x2,
11828b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RX.b2, ovl.fmt.RX.d2);  goto ok;
11829b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x67: /* MXD */ goto unimplemented;
11830b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x68: s390_format_RX_FRRD(s390_irgen_LD, ovl.fmt.RX.r1, ovl.fmt.RX.x2,
11831b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RX.b2, ovl.fmt.RX.d2);  goto ok;
11832b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x69: /* CD */ goto unimplemented;
11833b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x6a: /* AD */ goto unimplemented;
11834b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x6b: /* SD */ goto unimplemented;
11835b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x6c: /* MD */ goto unimplemented;
11836b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x6d: /* DD */ goto unimplemented;
11837b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x6e: /* AW */ goto unimplemented;
11838b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x6f: /* SW */ goto unimplemented;
11839b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x70: s390_format_RX_FRRD(s390_irgen_STE, ovl.fmt.RX.r1, ovl.fmt.RX.x2,
11840b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RX.b2, ovl.fmt.RX.d2);  goto ok;
11841b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x71: s390_format_RX_RRRD(s390_irgen_MS, ovl.fmt.RX.r1, ovl.fmt.RX.x2,
11842b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RX.b2, ovl.fmt.RX.d2);  goto ok;
11843b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x78: s390_format_RX_FRRD(s390_irgen_LE, ovl.fmt.RX.r1, ovl.fmt.RX.x2,
11844b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RX.b2, ovl.fmt.RX.d2);  goto ok;
11845b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x79: /* CE */ goto unimplemented;
11846b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x7a: /* AE */ goto unimplemented;
11847b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x7b: /* SE */ goto unimplemented;
11848b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x7c: /* MDE */ goto unimplemented;
11849b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x7d: /* DE */ goto unimplemented;
11850b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x7e: /* AU */ goto unimplemented;
11851b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x7f: /* SU */ goto unimplemented;
11852b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x83: /* DIAG */ goto unimplemented;
11853b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x84: s390_format_RSI_RRP(s390_irgen_BRXH, ovl.fmt.RSI.r1,
11854b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RSI.r3, ovl.fmt.RSI.i2);  goto ok;
11855b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x85: s390_format_RSI_RRP(s390_irgen_BRXLE, ovl.fmt.RSI.r1,
11856b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RSI.r3, ovl.fmt.RSI.i2);  goto ok;
11857b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x86: s390_format_RS_RRRD(s390_irgen_BXH, ovl.fmt.RS.r1, ovl.fmt.RS.r3,
11858b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RS.b2, ovl.fmt.RS.d2);  goto ok;
11859b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x87: s390_format_RS_RRRD(s390_irgen_BXLE, ovl.fmt.RS.r1, ovl.fmt.RS.r3,
11860b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RS.b2, ovl.fmt.RS.d2);  goto ok;
11861b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x88: s390_format_RS_R0RD(s390_irgen_SRL, ovl.fmt.RS.r1, ovl.fmt.RS.b2,
11862b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RS.d2);  goto ok;
11863b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x89: s390_format_RS_R0RD(s390_irgen_SLL, ovl.fmt.RS.r1, ovl.fmt.RS.b2,
11864b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RS.d2);  goto ok;
11865b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x8a: s390_format_RS_R0RD(s390_irgen_SRA, ovl.fmt.RS.r1, ovl.fmt.RS.b2,
11866b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RS.d2);  goto ok;
11867b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x8b: s390_format_RS_R0RD(s390_irgen_SLA, ovl.fmt.RS.r1, ovl.fmt.RS.b2,
11868b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RS.d2);  goto ok;
11869b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x8c: s390_format_RS_R0RD(s390_irgen_SRDL, ovl.fmt.RS.r1, ovl.fmt.RS.b2,
11870b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RS.d2);  goto ok;
11871b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x8d: s390_format_RS_R0RD(s390_irgen_SLDL, ovl.fmt.RS.r1, ovl.fmt.RS.b2,
11872b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RS.d2);  goto ok;
11873b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x8e: s390_format_RS_R0RD(s390_irgen_SRDA, ovl.fmt.RS.r1, ovl.fmt.RS.b2,
11874b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RS.d2);  goto ok;
11875b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x8f: s390_format_RS_R0RD(s390_irgen_SLDA, ovl.fmt.RS.r1, ovl.fmt.RS.b2,
11876b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RS.d2);  goto ok;
11877b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x90: s390_format_RS_RRRD(s390_irgen_STM, ovl.fmt.RS.r1, ovl.fmt.RS.r3,
11878b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RS.b2, ovl.fmt.RS.d2);  goto ok;
11879b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x91: s390_format_SI_URD(s390_irgen_TM, ovl.fmt.SI.i2, ovl.fmt.SI.b1,
11880b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                 ovl.fmt.SI.d1);  goto ok;
11881b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x92: s390_format_SI_URD(s390_irgen_MVI, ovl.fmt.SI.i2, ovl.fmt.SI.b1,
11882b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                 ovl.fmt.SI.d1);  goto ok;
11883b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x94: s390_format_SI_URD(s390_irgen_NI, ovl.fmt.SI.i2, ovl.fmt.SI.b1,
11884b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                 ovl.fmt.SI.d1);  goto ok;
11885b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x95: s390_format_SI_URD(s390_irgen_CLI, ovl.fmt.SI.i2, ovl.fmt.SI.b1,
11886b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                 ovl.fmt.SI.d1);  goto ok;
11887b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x96: s390_format_SI_URD(s390_irgen_OI, ovl.fmt.SI.i2, ovl.fmt.SI.b1,
11888b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                 ovl.fmt.SI.d1);  goto ok;
11889b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x97: s390_format_SI_URD(s390_irgen_XI, ovl.fmt.SI.i2, ovl.fmt.SI.b1,
11890b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                 ovl.fmt.SI.d1);  goto ok;
11891b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x98: s390_format_RS_RRRD(s390_irgen_LM, ovl.fmt.RS.r1, ovl.fmt.RS.r3,
11892b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RS.b2, ovl.fmt.RS.d2);  goto ok;
11893b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x99: /* TRACE */ goto unimplemented;
11894b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x9a: s390_format_RS_AARD(s390_irgen_LAM, ovl.fmt.RS.r1, ovl.fmt.RS.r3,
11895b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RS.b2, ovl.fmt.RS.d2);  goto ok;
11896b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0x9b: s390_format_RS_AARD(s390_irgen_STAM, ovl.fmt.RS.r1, ovl.fmt.RS.r3,
11897b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RS.b2, ovl.fmt.RS.d2);  goto ok;
11898b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xa8: s390_format_RS_RRRD(s390_irgen_MVCLE, ovl.fmt.RS.r1,
11899b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RS.r3, ovl.fmt.RS.b2, ovl.fmt.RS.d2);
11900b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  goto ok;
11901b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xa9: s390_format_RS_RRRD(s390_irgen_CLCLE, ovl.fmt.RS.r1,
11902b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RS.r3, ovl.fmt.RS.b2, ovl.fmt.RS.d2);
11903b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  goto ok;
11904b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xac: /* STNSM */ goto unimplemented;
11905b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xad: /* STOSM */ goto unimplemented;
11906b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xae: /* SIGP */ goto unimplemented;
11907b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xaf: /* MC */ goto unimplemented;
11908b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb1: /* LRA */ goto unimplemented;
11909b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb6: /* STCTL */ goto unimplemented;
11910b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xb7: /* LCTL */ goto unimplemented;
11911b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xba: s390_format_RS_RRRD(s390_irgen_CS, ovl.fmt.RS.r1, ovl.fmt.RS.r3,
11912b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RS.b2, ovl.fmt.RS.d2);  goto ok;
11913b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xbb: /* CDS */ goto unimplemented;
11914b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xbd: s390_format_RS_RURD(s390_irgen_CLM, ovl.fmt.RS.r1, ovl.fmt.RS.r3,
11915b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RS.b2, ovl.fmt.RS.d2);  goto ok;
11916b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xbe: s390_format_RS_RURD(s390_irgen_STCM, ovl.fmt.RS.r1, ovl.fmt.RS.r3,
11917b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RS.b2, ovl.fmt.RS.d2);  goto ok;
11918b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xbf: s390_format_RS_RURD(s390_irgen_ICM, ovl.fmt.RS.r1, ovl.fmt.RS.r3,
11919b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  ovl.fmt.RS.b2, ovl.fmt.RS.d2);  goto ok;
11920b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
11921b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
11922b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return S390_DECODE_UNKNOWN_INSN;
11923b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
11924b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovok:
11925b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return S390_DECODE_OK;
11926b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
11927b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovunimplemented:
11928b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return S390_DECODE_UNIMPLEMENTED_INSN;
11929b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
11930b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
11931b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic s390_decode_t
11932b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_decode_6byte_and_irgen(UChar *bytes)
11933b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
11934b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   typedef union {
11935b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      struct {
11936b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int op1 :  8;
11937b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int r1  :  4;
11938b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int r3  :  4;
11939b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int i2  : 16;
11940b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int     :  8;
11941b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int op2 :  8;
11942b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      } RIE;
11943b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      struct {
11944b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int op1 :  8;
11945b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int r1  :  4;
11946b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int r2  :  4;
11947b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int i3  :  8;
11948b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int i4  :  8;
11949b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int i5  :  8;
11950b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int op2 :  8;
11951b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      } RIE_RRUUU;
11952b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      struct {
11953b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int op1 :  8;
11954b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int r1  :  4;
11955b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int     :  4;
11956b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int i2  : 16;
11957b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int m3  :  4;
11958b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int     :  4;
11959b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int op2 :  8;
11960b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      } RIEv1;
11961b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      struct {
11962b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int op1 :  8;
11963b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int r1  :  4;
11964b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int r2  :  4;
11965b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int i4  : 16;
11966b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int m3  :  4;
11967b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int     :  4;
11968b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int op2 :  8;
11969b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      } RIE_RRPU;
11970b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      struct {
11971b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int op1 :  8;
11972b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int r1  :  4;
11973b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int m3  :  4;
11974b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int i4  : 16;
11975b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int i2  :  8;
11976b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int op2 :  8;
11977b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      } RIEv3;
11978b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      struct {
11979b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int op1 :  8;
11980b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int r1  :  4;
11981b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int op2 :  4;
11982b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int i2  : 32;
11983b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      } RIL;
11984b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      struct {
11985b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int op1 :  8;
11986b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int r1  :  4;
11987b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int m3  :  4;
11988b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int b4  :  4;
11989b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int d4  : 12;
11990b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int i2  :  8;
11991b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int op2 :  8;
11992b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      } RIS;
11993b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      struct {
11994b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int op1 :  8;
11995b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int r1  :  4;
11996b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int r2  :  4;
11997b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int b4  :  4;
11998b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int d4  : 12;
11999b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int m3  :  4;
12000b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int     :  4;
12001b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int op2 :  8;
12002b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      } RRS;
12003b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      struct {
12004b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int op1 :  8;
12005b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int l1  :  4;
12006b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int     :  4;
12007b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int b1  :  4;
12008b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int d1  : 12;
12009b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int     :  8;
12010b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int op2 :  8;
12011b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      } RSL;
12012b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      struct {
12013b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int op1 :  8;
12014b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int r1  :  4;
12015b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int r3  :  4;
12016b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int b2  :  4;
12017b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int dl2 : 12;
12018b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int dh2 :  8;
12019b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int op2 :  8;
12020b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      } RSY;
12021b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      struct {
12022b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int op1 :  8;
12023b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int r1  :  4;
12024b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int x2  :  4;
12025b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int b2  :  4;
12026b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int d2  : 12;
12027b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int     :  8;
12028b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int op2 :  8;
12029b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      } RXE;
12030b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      struct {
12031b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int op1 :  8;
12032b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int r3  :  4;
12033b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int x2  :  4;
12034b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int b2  :  4;
12035b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int d2  : 12;
12036b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int r1  :  4;
12037b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int     :  4;
12038b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int op2 :  8;
12039b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      } RXF;
12040b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      struct {
12041b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int op1 :  8;
12042b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int r1  :  4;
12043b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int x2  :  4;
12044b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int b2  :  4;
12045b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int dl2 : 12;
12046b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int dh2 :  8;
12047b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int op2 :  8;
12048b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      } RXY;
12049b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      struct {
12050b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int op1 :  8;
12051b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int i2  :  8;
12052b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int b1  :  4;
12053b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int dl1 : 12;
12054b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int dh1 :  8;
12055b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int op2 :  8;
12056b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      } SIY;
12057b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      struct {
12058b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int op :  8;
12059b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int l  :  8;
12060b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int b1 :  4;
12061b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int d1 : 12;
12062b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int b2 :  4;
12063b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int d2 : 12;
12064b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      } SS;
12065b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      struct {
12066b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int op :  8;
12067b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int l1 :  4;
12068b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int l2 :  4;
12069b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int b1 :  4;
12070b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int d1 : 12;
12071b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int b2 :  4;
12072b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int d2 : 12;
12073b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      } SS_LLRDRD;
12074b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      struct {
12075b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int op :  8;
12076b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int r1 :  4;
12077b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int r3 :  4;
12078b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int b2 :  4;
12079b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int d2 : 12;
12080b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int b4 :  4;
12081b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int d4 : 12;
12082b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      } SS_RRRDRD2;
12083b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      struct {
12084b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int op : 16;
12085b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int b1 :  4;
12086b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int d1 : 12;
12087b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int b2 :  4;
12088b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int d2 : 12;
12089b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      } SSE;
12090b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      struct {
12091b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int op1 :  8;
12092b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int r3  :  4;
12093b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int op2 :  4;
12094b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int b1  :  4;
12095b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int d1  : 12;
12096b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int b2  :  4;
12097b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int d2  : 12;
12098b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      } SSF;
12099b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      struct {
12100b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int op : 16;
12101b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int b1 :  4;
12102b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int d1 : 12;
12103b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         unsigned int i2 : 16;
12104b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      } SIL;
12105b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } formats;
12106b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   union {
12107b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      formats fmt;
12108b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      ULong value;
12109b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } ovl;
12110b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
12111b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   vassert(sizeof(formats) == 6);
12112b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
12113b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   ((char *)(&ovl.value))[0] = bytes[0];
12114b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   ((char *)(&ovl.value))[1] = bytes[1];
12115b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   ((char *)(&ovl.value))[2] = bytes[2];
12116b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   ((char *)(&ovl.value))[3] = bytes[3];
12117b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   ((char *)(&ovl.value))[4] = bytes[4];
12118b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   ((char *)(&ovl.value))[5] = bytes[5];
12119b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   ((char *)(&ovl.value))[6] = 0x0;
12120b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   ((char *)(&ovl.value))[7] = 0x0;
12121b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
12122b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   switch ((ovl.value >> 16) & 0xff00000000ffULL) {
12123b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe30000000002ULL: s390_format_RXY_RRRD(s390_irgen_LTG, ovl.fmt.RXY.r1,
12124b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12125b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12126b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12127b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe30000000003ULL: /* LRAG */ goto unimplemented;
12128b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe30000000004ULL: s390_format_RXY_RRRD(s390_irgen_LG, ovl.fmt.RXY.r1,
12129b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12130b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12131b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12132b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe30000000006ULL: s390_format_RXY_RRRD(s390_irgen_CVBY, ovl.fmt.RXY.r1,
12133b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12134b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12135b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12136b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe30000000008ULL: s390_format_RXY_RRRD(s390_irgen_AG, ovl.fmt.RXY.r1,
12137b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12138b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12139b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12140b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe30000000009ULL: s390_format_RXY_RRRD(s390_irgen_SG, ovl.fmt.RXY.r1,
12141b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12142b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12143b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12144b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe3000000000aULL: s390_format_RXY_RRRD(s390_irgen_ALG, ovl.fmt.RXY.r1,
12145b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12146b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12147b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12148b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe3000000000bULL: s390_format_RXY_RRRD(s390_irgen_SLG, ovl.fmt.RXY.r1,
12149b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12150b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12151b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12152b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe3000000000cULL: s390_format_RXY_RRRD(s390_irgen_MSG, ovl.fmt.RXY.r1,
12153b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12154b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12155b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12156b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe3000000000dULL: s390_format_RXY_RRRD(s390_irgen_DSG, ovl.fmt.RXY.r1,
12157b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12158b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12159b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12160b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe3000000000eULL: /* CVBG */ goto unimplemented;
12161b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe3000000000fULL: s390_format_RXY_RRRD(s390_irgen_LRVG, ovl.fmt.RXY.r1,
12162b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12163b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12164b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12165b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe30000000012ULL: s390_format_RXY_RRRD(s390_irgen_LT, ovl.fmt.RXY.r1,
12166b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12167b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12168b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12169b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe30000000013ULL: /* LRAY */ goto unimplemented;
12170b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe30000000014ULL: s390_format_RXY_RRRD(s390_irgen_LGF, ovl.fmt.RXY.r1,
12171b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12172b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12173b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12174b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe30000000015ULL: s390_format_RXY_RRRD(s390_irgen_LGH, ovl.fmt.RXY.r1,
12175b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12176b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12177b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12178b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe30000000016ULL: s390_format_RXY_RRRD(s390_irgen_LLGF, ovl.fmt.RXY.r1,
12179b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12180b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12181b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12182b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe30000000017ULL: s390_format_RXY_RRRD(s390_irgen_LLGT, ovl.fmt.RXY.r1,
12183b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12184b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12185b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12186b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe30000000018ULL: s390_format_RXY_RRRD(s390_irgen_AGF, ovl.fmt.RXY.r1,
12187b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12188b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12189b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12190b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe30000000019ULL: s390_format_RXY_RRRD(s390_irgen_SGF, ovl.fmt.RXY.r1,
12191b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12192b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12193b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12194b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe3000000001aULL: s390_format_RXY_RRRD(s390_irgen_ALGF, ovl.fmt.RXY.r1,
12195b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12196b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12197b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12198b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe3000000001bULL: s390_format_RXY_RRRD(s390_irgen_SLGF, ovl.fmt.RXY.r1,
12199b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12200b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12201b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12202b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe3000000001cULL: s390_format_RXY_RRRD(s390_irgen_MSGF, ovl.fmt.RXY.r1,
12203b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12204b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12205b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12206b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe3000000001dULL: s390_format_RXY_RRRD(s390_irgen_DSGF, ovl.fmt.RXY.r1,
12207b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12208b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12209b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12210b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe3000000001eULL: s390_format_RXY_RRRD(s390_irgen_LRV, ovl.fmt.RXY.r1,
12211b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12212b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12213b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12214b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe3000000001fULL: s390_format_RXY_RRRD(s390_irgen_LRVH, ovl.fmt.RXY.r1,
12215b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12216b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12217b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12218b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe30000000020ULL: s390_format_RXY_RRRD(s390_irgen_CG, ovl.fmt.RXY.r1,
12219b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12220b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12221b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12222b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe30000000021ULL: s390_format_RXY_RRRD(s390_irgen_CLG, ovl.fmt.RXY.r1,
12223b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12224b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12225b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12226b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe30000000024ULL: s390_format_RXY_RRRD(s390_irgen_STG, ovl.fmt.RXY.r1,
12227b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12228b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12229b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12230b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe30000000026ULL: s390_format_RXY_RRRD(s390_irgen_CVDY, ovl.fmt.RXY.r1,
12231b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12232b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12233b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12234b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe3000000002eULL: /* CVDG */ goto unimplemented;
12235b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe3000000002fULL: s390_format_RXY_RRRD(s390_irgen_STRVG,
12236b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.r1, ovl.fmt.RXY.x2,
12237b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.b2, ovl.fmt.RXY.dl2,
12238b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12239b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe30000000030ULL: s390_format_RXY_RRRD(s390_irgen_CGF, ovl.fmt.RXY.r1,
12240b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12241b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12242b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12243b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe30000000031ULL: s390_format_RXY_RRRD(s390_irgen_CLGF, ovl.fmt.RXY.r1,
12244b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12245b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12246b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12247b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe30000000032ULL: s390_format_RXY_RRRD(s390_irgen_LTGF, ovl.fmt.RXY.r1,
12248b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12249b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12250b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12251b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe30000000034ULL: s390_format_RXY_RRRD(s390_irgen_CGH, ovl.fmt.RXY.r1,
12252b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12253b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12254b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12255b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe30000000036ULL: s390_format_RXY_URRD(s390_irgen_PFD, ovl.fmt.RXY.r1,
12256b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12257b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12258b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12259b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe3000000003eULL: s390_format_RXY_RRRD(s390_irgen_STRV, ovl.fmt.RXY.r1,
12260b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12261b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12262b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12263b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe3000000003fULL: s390_format_RXY_RRRD(s390_irgen_STRVH,
12264b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.r1, ovl.fmt.RXY.x2,
12265b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.b2, ovl.fmt.RXY.dl2,
12266b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12267b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe30000000046ULL: s390_format_RXY_RRRD(s390_irgen_BCTG, ovl.fmt.RXY.r1,
12268b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12269b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12270b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12271b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe30000000050ULL: s390_format_RXY_RRRD(s390_irgen_STY, ovl.fmt.RXY.r1,
12272b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12273b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12274b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12275b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe30000000051ULL: s390_format_RXY_RRRD(s390_irgen_MSY, ovl.fmt.RXY.r1,
12276b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12277b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12278b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12279b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe30000000054ULL: s390_format_RXY_RRRD(s390_irgen_NY, ovl.fmt.RXY.r1,
12280b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12281b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12282b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12283b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe30000000055ULL: s390_format_RXY_RRRD(s390_irgen_CLY, ovl.fmt.RXY.r1,
12284b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12285b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12286b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12287b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe30000000056ULL: s390_format_RXY_RRRD(s390_irgen_OY, ovl.fmt.RXY.r1,
12288b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12289b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12290b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12291b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe30000000057ULL: s390_format_RXY_RRRD(s390_irgen_XY, ovl.fmt.RXY.r1,
12292b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12293b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12294b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12295b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe30000000058ULL: s390_format_RXY_RRRD(s390_irgen_LY, ovl.fmt.RXY.r1,
12296b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12297b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12298b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12299b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe30000000059ULL: s390_format_RXY_RRRD(s390_irgen_CY, ovl.fmt.RXY.r1,
12300b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12301b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12302b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12303b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe3000000005aULL: s390_format_RXY_RRRD(s390_irgen_AY, ovl.fmt.RXY.r1,
12304b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12305b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12306b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12307b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe3000000005bULL: s390_format_RXY_RRRD(s390_irgen_SY, ovl.fmt.RXY.r1,
12308b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12309b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12310b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12311b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe3000000005cULL: s390_format_RXY_RRRD(s390_irgen_MFY, ovl.fmt.RXY.r1,
12312b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12313b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12314b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12315b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe3000000005eULL: s390_format_RXY_RRRD(s390_irgen_ALY, ovl.fmt.RXY.r1,
12316b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12317b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12318b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12319b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe3000000005fULL: s390_format_RXY_RRRD(s390_irgen_SLY, ovl.fmt.RXY.r1,
12320b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12321b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12322b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12323b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe30000000070ULL: s390_format_RXY_RRRD(s390_irgen_STHY, ovl.fmt.RXY.r1,
12324b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12325b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12326b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12327b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe30000000071ULL: s390_format_RXY_RRRD(s390_irgen_LAY, ovl.fmt.RXY.r1,
12328b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12329b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12330b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12331b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe30000000072ULL: s390_format_RXY_RRRD(s390_irgen_STCY, ovl.fmt.RXY.r1,
12332b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12333b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12334b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12335b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe30000000073ULL: s390_format_RXY_RRRD(s390_irgen_ICY, ovl.fmt.RXY.r1,
12336b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12337b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12338b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12339b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe30000000075ULL: s390_format_RXY_RRRD(s390_irgen_LAEY, ovl.fmt.RXY.r1,
12340b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12341b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12342b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12343b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe30000000076ULL: s390_format_RXY_RRRD(s390_irgen_LB, ovl.fmt.RXY.r1,
12344b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12345b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12346b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12347b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe30000000077ULL: s390_format_RXY_RRRD(s390_irgen_LGB, ovl.fmt.RXY.r1,
12348b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12349b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12350b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12351b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe30000000078ULL: s390_format_RXY_RRRD(s390_irgen_LHY, ovl.fmt.RXY.r1,
12352b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12353b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12354b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12355b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe30000000079ULL: s390_format_RXY_RRRD(s390_irgen_CHY, ovl.fmt.RXY.r1,
12356b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12357b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12358b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12359b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe3000000007aULL: s390_format_RXY_RRRD(s390_irgen_AHY, ovl.fmt.RXY.r1,
12360b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12361b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12362b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12363b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe3000000007bULL: s390_format_RXY_RRRD(s390_irgen_SHY, ovl.fmt.RXY.r1,
12364b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12365b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12366b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12367b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe3000000007cULL: s390_format_RXY_RRRD(s390_irgen_MHY, ovl.fmt.RXY.r1,
12368b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12369b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12370b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12371b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe30000000080ULL: s390_format_RXY_RRRD(s390_irgen_NG, ovl.fmt.RXY.r1,
12372b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12373b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12374b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12375b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe30000000081ULL: s390_format_RXY_RRRD(s390_irgen_OG, ovl.fmt.RXY.r1,
12376b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12377b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12378b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12379b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe30000000082ULL: s390_format_RXY_RRRD(s390_irgen_XG, ovl.fmt.RXY.r1,
12380b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12381b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12382b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12383b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe30000000086ULL: s390_format_RXY_RRRD(s390_irgen_MLG, ovl.fmt.RXY.r1,
12384b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12385b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12386b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12387b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe30000000087ULL: s390_format_RXY_RRRD(s390_irgen_DLG, ovl.fmt.RXY.r1,
12388b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12389b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12390b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12391b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe30000000088ULL: s390_format_RXY_RRRD(s390_irgen_ALCG, ovl.fmt.RXY.r1,
12392b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12393b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12394b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12395b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe30000000089ULL: s390_format_RXY_RRRD(s390_irgen_SLBG, ovl.fmt.RXY.r1,
12396b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12397b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12398b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12399b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe3000000008eULL: s390_format_RXY_RRRD(s390_irgen_STPQ, ovl.fmt.RXY.r1,
12400b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12401b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12402b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12403b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe3000000008fULL: s390_format_RXY_RRRD(s390_irgen_LPQ, ovl.fmt.RXY.r1,
12404b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12405b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12406b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12407b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe30000000090ULL: s390_format_RXY_RRRD(s390_irgen_LLGC, ovl.fmt.RXY.r1,
12408b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12409b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12410b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12411b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe30000000091ULL: s390_format_RXY_RRRD(s390_irgen_LLGH, ovl.fmt.RXY.r1,
12412b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12413b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12414b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12415b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe30000000094ULL: s390_format_RXY_RRRD(s390_irgen_LLC, ovl.fmt.RXY.r1,
12416b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12417b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12418b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12419b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe30000000095ULL: s390_format_RXY_RRRD(s390_irgen_LLH, ovl.fmt.RXY.r1,
12420b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12421b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12422b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12423b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe30000000096ULL: s390_format_RXY_RRRD(s390_irgen_ML, ovl.fmt.RXY.r1,
12424b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12425b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12426b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12427b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe30000000097ULL: s390_format_RXY_RRRD(s390_irgen_DL, ovl.fmt.RXY.r1,
12428b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12429b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12430b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12431b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe30000000098ULL: s390_format_RXY_RRRD(s390_irgen_ALC, ovl.fmt.RXY.r1,
12432b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12433b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12434b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12435b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe30000000099ULL: s390_format_RXY_RRRD(s390_irgen_SLB, ovl.fmt.RXY.r1,
12436b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12437b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12438b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12439b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe300000000c0ULL: s390_format_RXY_RRRD(s390_irgen_LBH, ovl.fmt.RXY.r1,
12440b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12441b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12442b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12443b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe300000000c2ULL: s390_format_RXY_RRRD(s390_irgen_LLCH, ovl.fmt.RXY.r1,
12444b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12445b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12446b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12447b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe300000000c3ULL: s390_format_RXY_RRRD(s390_irgen_STCH, ovl.fmt.RXY.r1,
12448b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12449b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12450b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12451b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe300000000c4ULL: s390_format_RXY_RRRD(s390_irgen_LHH, ovl.fmt.RXY.r1,
12452b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12453b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12454b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12455b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe300000000c6ULL: s390_format_RXY_RRRD(s390_irgen_LLHH, ovl.fmt.RXY.r1,
12456b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12457b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12458b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12459b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe300000000c7ULL: s390_format_RXY_RRRD(s390_irgen_STHH, ovl.fmt.RXY.r1,
12460b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12461b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12462b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12463b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe300000000caULL: s390_format_RXY_RRRD(s390_irgen_LFH, ovl.fmt.RXY.r1,
12464b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12465b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12466b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12467b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe300000000cbULL: s390_format_RXY_RRRD(s390_irgen_STFH, ovl.fmt.RXY.r1,
12468b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12469b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12470b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12471b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe300000000cdULL: s390_format_RXY_RRRD(s390_irgen_CHF, ovl.fmt.RXY.r1,
12472b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12473b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12474b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12475b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe300000000cfULL: s390_format_RXY_RRRD(s390_irgen_CLHF, ovl.fmt.RXY.r1,
12476b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12477b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12478b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12479b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb0000000004ULL: s390_format_RSY_RRRD(s390_irgen_LMG, ovl.fmt.RSY.r1,
12480b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.r3, ovl.fmt.RSY.b2,
12481b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dl2,
12482b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dh2);  goto ok;
12483b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb000000000aULL: s390_format_RSY_RRRD(s390_irgen_SRAG, ovl.fmt.RSY.r1,
12484b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.r3, ovl.fmt.RSY.b2,
12485b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dl2,
12486b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dh2);  goto ok;
12487b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb000000000bULL: s390_format_RSY_RRRD(s390_irgen_SLAG, ovl.fmt.RSY.r1,
12488b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.r3, ovl.fmt.RSY.b2,
12489b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dl2,
12490b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dh2);  goto ok;
12491b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb000000000cULL: s390_format_RSY_RRRD(s390_irgen_SRLG, ovl.fmt.RSY.r1,
12492b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.r3, ovl.fmt.RSY.b2,
12493b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dl2,
12494b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dh2);  goto ok;
12495b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb000000000dULL: s390_format_RSY_RRRD(s390_irgen_SLLG, ovl.fmt.RSY.r1,
12496b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.r3, ovl.fmt.RSY.b2,
12497b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dl2,
12498b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dh2);  goto ok;
12499b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb000000000fULL: /* TRACG */ goto unimplemented;
12500b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb0000000014ULL: s390_format_RSY_RRRD(s390_irgen_CSY, ovl.fmt.RSY.r1,
12501b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.r3, ovl.fmt.RSY.b2,
12502b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dl2,
12503b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dh2);  goto ok;
12504b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb000000001cULL: s390_format_RSY_RRRD(s390_irgen_RLLG, ovl.fmt.RSY.r1,
12505b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.r3, ovl.fmt.RSY.b2,
12506b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dl2,
12507b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dh2);  goto ok;
12508b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb000000001dULL: s390_format_RSY_RRRD(s390_irgen_RLL, ovl.fmt.RSY.r1,
12509b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.r3, ovl.fmt.RSY.b2,
12510b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dl2,
12511b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dh2);  goto ok;
12512b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb0000000020ULL: s390_format_RSY_RURD(s390_irgen_CLMH, ovl.fmt.RSY.r1,
12513b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.r3, ovl.fmt.RSY.b2,
12514b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dl2,
12515b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dh2);  goto ok;
12516b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb0000000021ULL: s390_format_RSY_RURD(s390_irgen_CLMY, ovl.fmt.RSY.r1,
12517b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.r3, ovl.fmt.RSY.b2,
12518b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dl2,
12519b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dh2);  goto ok;
12520b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb0000000024ULL: s390_format_RSY_RRRD(s390_irgen_STMG, ovl.fmt.RSY.r1,
12521b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.r3, ovl.fmt.RSY.b2,
12522b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dl2,
12523b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dh2);  goto ok;
12524b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb0000000025ULL: /* STCTG */ goto unimplemented;
12525b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb0000000026ULL: s390_format_RSY_RRRD(s390_irgen_STMH, ovl.fmt.RSY.r1,
12526b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.r3, ovl.fmt.RSY.b2,
12527b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dl2,
12528b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dh2);  goto ok;
12529b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb000000002cULL: s390_format_RSY_RURD(s390_irgen_STCMH,
12530b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.r1, ovl.fmt.RSY.r3,
12531b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.b2, ovl.fmt.RSY.dl2,
12532b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dh2);  goto ok;
12533b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb000000002dULL: s390_format_RSY_RURD(s390_irgen_STCMY,
12534b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.r1, ovl.fmt.RSY.r3,
12535b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.b2, ovl.fmt.RSY.dl2,
12536b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dh2);  goto ok;
12537b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb000000002fULL: /* LCTLG */ goto unimplemented;
12538b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb0000000030ULL: s390_format_RSY_RRRD(s390_irgen_CSG, ovl.fmt.RSY.r1,
12539b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.r3, ovl.fmt.RSY.b2,
12540b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dl2,
12541b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dh2);  goto ok;
12542b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb0000000031ULL: /* CDSY */ goto unimplemented;
12543b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb000000003eULL: /* CDSG */ goto unimplemented;
12544b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb0000000044ULL: s390_format_RSY_RRRD(s390_irgen_BXHG, ovl.fmt.RSY.r1,
12545b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.r3, ovl.fmt.RSY.b2,
12546b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dl2,
12547b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dh2);  goto ok;
12548b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb0000000045ULL: s390_format_RSY_RRRD(s390_irgen_BXLEG,
12549b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.r1, ovl.fmt.RSY.r3,
12550b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.b2, ovl.fmt.RSY.dl2,
12551b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dh2);  goto ok;
12552b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb000000004cULL: /* ECAG */ goto unimplemented;
12553b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb0000000051ULL: s390_format_SIY_URD(s390_irgen_TMY, ovl.fmt.SIY.i2,
12554b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                               ovl.fmt.SIY.b1, ovl.fmt.SIY.dl1,
12555b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                               ovl.fmt.SIY.dh1);  goto ok;
12556b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb0000000052ULL: s390_format_SIY_URD(s390_irgen_MVIY, ovl.fmt.SIY.i2,
12557b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                               ovl.fmt.SIY.b1, ovl.fmt.SIY.dl1,
12558b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                               ovl.fmt.SIY.dh1);  goto ok;
12559b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb0000000054ULL: s390_format_SIY_URD(s390_irgen_NIY, ovl.fmt.SIY.i2,
12560b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                               ovl.fmt.SIY.b1, ovl.fmt.SIY.dl1,
12561b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                               ovl.fmt.SIY.dh1);  goto ok;
12562b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb0000000055ULL: s390_format_SIY_URD(s390_irgen_CLIY, ovl.fmt.SIY.i2,
12563b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                               ovl.fmt.SIY.b1, ovl.fmt.SIY.dl1,
12564b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                               ovl.fmt.SIY.dh1);  goto ok;
12565b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb0000000056ULL: s390_format_SIY_URD(s390_irgen_OIY, ovl.fmt.SIY.i2,
12566b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                               ovl.fmt.SIY.b1, ovl.fmt.SIY.dl1,
12567b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                               ovl.fmt.SIY.dh1);  goto ok;
12568b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb0000000057ULL: s390_format_SIY_URD(s390_irgen_XIY, ovl.fmt.SIY.i2,
12569b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                               ovl.fmt.SIY.b1, ovl.fmt.SIY.dl1,
12570b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                               ovl.fmt.SIY.dh1);  goto ok;
12571b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb000000006aULL: s390_format_SIY_IRD(s390_irgen_ASI, ovl.fmt.SIY.i2,
12572b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                               ovl.fmt.SIY.b1, ovl.fmt.SIY.dl1,
12573b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                               ovl.fmt.SIY.dh1);  goto ok;
12574b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb000000006eULL: s390_format_SIY_IRD(s390_irgen_ALSI, ovl.fmt.SIY.i2,
12575b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                               ovl.fmt.SIY.b1, ovl.fmt.SIY.dl1,
12576b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                               ovl.fmt.SIY.dh1);  goto ok;
12577b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb000000007aULL: s390_format_SIY_IRD(s390_irgen_AGSI, ovl.fmt.SIY.i2,
12578b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                               ovl.fmt.SIY.b1, ovl.fmt.SIY.dl1,
12579b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                               ovl.fmt.SIY.dh1);  goto ok;
12580b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb000000007eULL: s390_format_SIY_IRD(s390_irgen_ALGSI, ovl.fmt.SIY.i2,
12581b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                               ovl.fmt.SIY.b1, ovl.fmt.SIY.dl1,
12582b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                               ovl.fmt.SIY.dh1);  goto ok;
12583b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb0000000080ULL: s390_format_RSY_RURD(s390_irgen_ICMH, ovl.fmt.RSY.r1,
12584b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.r3, ovl.fmt.RSY.b2,
12585b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dl2,
12586b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dh2);  goto ok;
12587b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb0000000081ULL: s390_format_RSY_RURD(s390_irgen_ICMY, ovl.fmt.RSY.r1,
12588b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.r3, ovl.fmt.RSY.b2,
12589b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dl2,
12590b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dh2);  goto ok;
12591b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb000000008eULL: /* MVCLU */ goto unimplemented;
12592b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb000000008fULL: /* CLCLU */ goto unimplemented;
12593b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb0000000090ULL: s390_format_RSY_RRRD(s390_irgen_STMY, ovl.fmt.RSY.r1,
12594b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.r3, ovl.fmt.RSY.b2,
12595b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dl2,
12596b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dh2);  goto ok;
12597b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb0000000096ULL: s390_format_RSY_RRRD(s390_irgen_LMH, ovl.fmt.RSY.r1,
12598b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.r3, ovl.fmt.RSY.b2,
12599b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dl2,
12600b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dh2);  goto ok;
12601b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb0000000098ULL: s390_format_RSY_RRRD(s390_irgen_LMY, ovl.fmt.RSY.r1,
12602b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.r3, ovl.fmt.RSY.b2,
12603b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dl2,
12604b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dh2);  goto ok;
12605b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb000000009aULL: s390_format_RSY_AARD(s390_irgen_LAMY, ovl.fmt.RSY.r1,
12606b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.r3, ovl.fmt.RSY.b2,
12607b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dl2,
12608b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dh2);  goto ok;
12609b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb000000009bULL: s390_format_RSY_AARD(s390_irgen_STAMY,
12610b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.r1, ovl.fmt.RSY.r3,
12611b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.b2, ovl.fmt.RSY.dl2,
12612b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dh2);  goto ok;
12613b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb00000000c0ULL: /* TP */ goto unimplemented;
12614b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb00000000dcULL: s390_format_RSY_RRRD(s390_irgen_SRAK, ovl.fmt.RSY.r1,
12615b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.r3, ovl.fmt.RSY.b2,
12616b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dl2,
12617b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dh2);  goto ok;
12618b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb00000000ddULL: s390_format_RSY_RRRD(s390_irgen_SLAK, ovl.fmt.RSY.r1,
12619b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.r3, ovl.fmt.RSY.b2,
12620b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dl2,
12621b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dh2);  goto ok;
12622b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb00000000deULL: s390_format_RSY_RRRD(s390_irgen_SRLK, ovl.fmt.RSY.r1,
12623b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.r3, ovl.fmt.RSY.b2,
12624b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dl2,
12625b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dh2);  goto ok;
12626b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb00000000dfULL: s390_format_RSY_RRRD(s390_irgen_SLLK, ovl.fmt.RSY.r1,
12627b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.r3, ovl.fmt.RSY.b2,
12628b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dl2,
12629b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dh2);  goto ok;
12630b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb00000000e2ULL: s390_format_RSY_RDRM(s390_irgen_LOCG, ovl.fmt.RSY.r1,
12631b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.r3, ovl.fmt.RSY.b2,
12632b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dl2,
12633b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dh2,
12634b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                S390_XMNM_LOCG);  goto ok;
12635b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb00000000e3ULL: s390_format_RSY_RDRM(s390_irgen_STOCG,
12636b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.r1, ovl.fmt.RSY.r3,
12637b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.b2, ovl.fmt.RSY.dl2,
12638b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dh2,
12639b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                S390_XMNM_STOCG);  goto ok;
12640b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb00000000e4ULL: s390_format_RSY_RRRD(s390_irgen_LANG, ovl.fmt.RSY.r1,
12641b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.r3, ovl.fmt.RSY.b2,
12642b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dl2,
12643b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dh2);  goto ok;
12644b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb00000000e6ULL: s390_format_RSY_RRRD(s390_irgen_LAOG, ovl.fmt.RSY.r1,
12645b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.r3, ovl.fmt.RSY.b2,
12646b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dl2,
12647b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dh2);  goto ok;
12648b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb00000000e7ULL: s390_format_RSY_RRRD(s390_irgen_LAXG, ovl.fmt.RSY.r1,
12649b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.r3, ovl.fmt.RSY.b2,
12650b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dl2,
12651b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dh2);  goto ok;
12652b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb00000000e8ULL: s390_format_RSY_RRRD(s390_irgen_LAAG, ovl.fmt.RSY.r1,
12653b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.r3, ovl.fmt.RSY.b2,
12654b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dl2,
12655b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dh2);  goto ok;
12656b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb00000000eaULL: s390_format_RSY_RRRD(s390_irgen_LAALG,
12657b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.r1, ovl.fmt.RSY.r3,
12658b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.b2, ovl.fmt.RSY.dl2,
12659b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dh2);  goto ok;
12660b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb00000000f2ULL: s390_format_RSY_RDRM(s390_irgen_LOC, ovl.fmt.RSY.r1,
12661b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.r3, ovl.fmt.RSY.b2,
12662b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dl2,
12663b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dh2, S390_XMNM_LOC);
12664b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                goto ok;
12665b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb00000000f3ULL: s390_format_RSY_RDRM(s390_irgen_STOC, ovl.fmt.RSY.r1,
12666b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.r3, ovl.fmt.RSY.b2,
12667b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dl2,
12668b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dh2,
12669b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                S390_XMNM_STOC);  goto ok;
12670b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb00000000f4ULL: s390_format_RSY_RRRD(s390_irgen_LAN, ovl.fmt.RSY.r1,
12671b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.r3, ovl.fmt.RSY.b2,
12672b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dl2,
12673b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dh2);  goto ok;
12674b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb00000000f6ULL: s390_format_RSY_RRRD(s390_irgen_LAO, ovl.fmt.RSY.r1,
12675b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.r3, ovl.fmt.RSY.b2,
12676b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dl2,
12677b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dh2);  goto ok;
12678b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb00000000f7ULL: s390_format_RSY_RRRD(s390_irgen_LAX, ovl.fmt.RSY.r1,
12679b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.r3, ovl.fmt.RSY.b2,
12680b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dl2,
12681b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dh2);  goto ok;
12682b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb00000000f8ULL: s390_format_RSY_RRRD(s390_irgen_LAA, ovl.fmt.RSY.r1,
12683b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.r3, ovl.fmt.RSY.b2,
12684b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dl2,
12685b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dh2);  goto ok;
12686b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeb00000000faULL: s390_format_RSY_RRRD(s390_irgen_LAAL, ovl.fmt.RSY.r1,
12687b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.r3, ovl.fmt.RSY.b2,
12688b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dl2,
12689b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RSY.dh2);  goto ok;
12690b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xec0000000044ULL: s390_format_RIE_RRP(s390_irgen_BRXHG, ovl.fmt.RIE.r1,
12691b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                               ovl.fmt.RIE.r3, ovl.fmt.RIE.i2);
12692b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                               goto ok;
12693b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xec0000000045ULL: s390_format_RIE_RRP(s390_irgen_BRXLG, ovl.fmt.RIE.r1,
12694b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                               ovl.fmt.RIE.r3, ovl.fmt.RIE.i2);
12695b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                               goto ok;
12696b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xec0000000051ULL: /* RISBLG */ goto unimplemented;
12697b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xec0000000054ULL: s390_format_RIE_RRUUU(s390_irgen_RNSBG,
12698b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                 ovl.fmt.RIE_RRUUU.r1,
12699b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                 ovl.fmt.RIE_RRUUU.r2,
12700b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                 ovl.fmt.RIE_RRUUU.i3,
12701b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                 ovl.fmt.RIE_RRUUU.i4,
12702b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                 ovl.fmt.RIE_RRUUU.i5);
12703b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                 goto ok;
12704b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xec0000000055ULL: s390_format_RIE_RRUUU(s390_irgen_RISBG,
12705b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                 ovl.fmt.RIE_RRUUU.r1,
12706b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                 ovl.fmt.RIE_RRUUU.r2,
12707b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                 ovl.fmt.RIE_RRUUU.i3,
12708b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                 ovl.fmt.RIE_RRUUU.i4,
12709b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                 ovl.fmt.RIE_RRUUU.i5);
12710b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                 goto ok;
12711b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xec0000000056ULL: s390_format_RIE_RRUUU(s390_irgen_ROSBG,
12712b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                 ovl.fmt.RIE_RRUUU.r1,
12713b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                 ovl.fmt.RIE_RRUUU.r2,
12714b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                 ovl.fmt.RIE_RRUUU.i3,
12715b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                 ovl.fmt.RIE_RRUUU.i4,
12716b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                 ovl.fmt.RIE_RRUUU.i5);
12717b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                 goto ok;
12718b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xec0000000057ULL: s390_format_RIE_RRUUU(s390_irgen_RXSBG,
12719b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                 ovl.fmt.RIE_RRUUU.r1,
12720b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                 ovl.fmt.RIE_RRUUU.r2,
12721b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                 ovl.fmt.RIE_RRUUU.i3,
12722b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                 ovl.fmt.RIE_RRUUU.i4,
12723b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                 ovl.fmt.RIE_RRUUU.i5);
12724b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                 goto ok;
12725b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xec000000005dULL: /* RISBHG */ goto unimplemented;
12726b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xec0000000064ULL: s390_format_RIE_RRPU(s390_irgen_CGRJ,
12727b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RIE_RRPU.r1,
12728b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RIE_RRPU.r2,
12729b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RIE_RRPU.i4,
12730b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RIE_RRPU.m3);  goto ok;
12731b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xec0000000065ULL: s390_format_RIE_RRPU(s390_irgen_CLGRJ,
12732b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RIE_RRPU.r1,
12733b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RIE_RRPU.r2,
12734b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RIE_RRPU.i4,
12735b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RIE_RRPU.m3);  goto ok;
12736b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xec0000000070ULL: /* CGIT */ goto unimplemented;
12737b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xec0000000071ULL: /* CLGIT */ goto unimplemented;
12738b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xec0000000072ULL: /* CIT */ goto unimplemented;
12739b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xec0000000073ULL: /* CLFIT */ goto unimplemented;
12740b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xec0000000076ULL: s390_format_RIE_RRPU(s390_irgen_CRJ,
12741b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RIE_RRPU.r1,
12742b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RIE_RRPU.r2,
12743b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RIE_RRPU.i4,
12744b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RIE_RRPU.m3);  goto ok;
12745b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xec0000000077ULL: s390_format_RIE_RRPU(s390_irgen_CLRJ,
12746b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RIE_RRPU.r1,
12747b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RIE_RRPU.r2,
12748b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RIE_RRPU.i4,
12749b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RIE_RRPU.m3);  goto ok;
12750b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xec000000007cULL: s390_format_RIE_RUPI(s390_irgen_CGIJ,
12751b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RIEv3.r1,
12752b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RIEv3.m3,
12753b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RIEv3.i4,
12754b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RIEv3.i2);  goto ok;
12755b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xec000000007dULL: s390_format_RIE_RUPU(s390_irgen_CLGIJ,
12756b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RIEv3.r1,
12757b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RIEv3.m3,
12758b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RIEv3.i4,
12759b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RIEv3.i2);  goto ok;
12760b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xec000000007eULL: s390_format_RIE_RUPI(s390_irgen_CIJ,
12761b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RIEv3.r1,
12762b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RIEv3.m3,
12763b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RIEv3.i4,
12764b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RIEv3.i2);  goto ok;
12765b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xec000000007fULL: s390_format_RIE_RUPU(s390_irgen_CLIJ,
12766b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RIEv3.r1,
12767b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RIEv3.m3,
12768b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RIEv3.i4,
12769b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RIEv3.i2);  goto ok;
12770b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xec00000000d8ULL: s390_format_RIE_RRI0(s390_irgen_AHIK, ovl.fmt.RIE.r1,
12771b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RIE.r3, ovl.fmt.RIE.i2);
12772b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                goto ok;
12773b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xec00000000d9ULL: s390_format_RIE_RRI0(s390_irgen_AGHIK,
12774b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RIE.r1, ovl.fmt.RIE.r3,
12775b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RIE.i2);  goto ok;
12776b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xec00000000daULL: s390_format_RIE_RRI0(s390_irgen_ALHSIK,
12777b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RIE.r1, ovl.fmt.RIE.r3,
12778b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RIE.i2);  goto ok;
12779b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xec00000000dbULL: s390_format_RIE_RRI0(s390_irgen_ALGHSIK,
12780b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RIE.r1, ovl.fmt.RIE.r3,
12781b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RIE.i2);  goto ok;
12782b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xec00000000e4ULL: s390_format_RRS(s390_irgen_CGRB, ovl.fmt.RRS.r1,
12783b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                           ovl.fmt.RRS.r2, ovl.fmt.RRS.b4,
12784b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                           ovl.fmt.RRS.d4, ovl.fmt.RRS.m3);
12785b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                           goto ok;
12786b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xec00000000e5ULL: s390_format_RRS(s390_irgen_CLGRB, ovl.fmt.RRS.r1,
12787b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                           ovl.fmt.RRS.r2, ovl.fmt.RRS.b4,
12788b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                           ovl.fmt.RRS.d4, ovl.fmt.RRS.m3);
12789b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                           goto ok;
12790b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xec00000000f6ULL: s390_format_RRS(s390_irgen_CRB, ovl.fmt.RRS.r1,
12791b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                           ovl.fmt.RRS.r2, ovl.fmt.RRS.b4,
12792b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                           ovl.fmt.RRS.d4, ovl.fmt.RRS.m3);
12793b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                           goto ok;
12794b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xec00000000f7ULL: s390_format_RRS(s390_irgen_CLRB, ovl.fmt.RRS.r1,
12795b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                           ovl.fmt.RRS.r2, ovl.fmt.RRS.b4,
12796b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                           ovl.fmt.RRS.d4, ovl.fmt.RRS.m3);
12797b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                           goto ok;
12798b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xec00000000fcULL: s390_format_RIS_RURDI(s390_irgen_CGIB,
12799b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                 ovl.fmt.RIS.r1, ovl.fmt.RIS.m3,
12800b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                 ovl.fmt.RIS.b4, ovl.fmt.RIS.d4,
12801b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                 ovl.fmt.RIS.i2);  goto ok;
12802b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xec00000000fdULL: s390_format_RIS_RURDU(s390_irgen_CLGIB,
12803b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                 ovl.fmt.RIS.r1, ovl.fmt.RIS.m3,
12804b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                 ovl.fmt.RIS.b4, ovl.fmt.RIS.d4,
12805b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                 ovl.fmt.RIS.i2);  goto ok;
12806b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xec00000000feULL: s390_format_RIS_RURDI(s390_irgen_CIB, ovl.fmt.RIS.r1,
12807b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                 ovl.fmt.RIS.m3, ovl.fmt.RIS.b4,
12808b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                 ovl.fmt.RIS.d4,
12809b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                 ovl.fmt.RIS.i2);  goto ok;
12810b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xec00000000ffULL: s390_format_RIS_RURDU(s390_irgen_CLIB,
12811b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                 ovl.fmt.RIS.r1, ovl.fmt.RIS.m3,
12812b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                 ovl.fmt.RIS.b4, ovl.fmt.RIS.d4,
12813b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                 ovl.fmt.RIS.i2);  goto ok;
12814b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xed0000000004ULL: s390_format_RXE_FRRD(s390_irgen_LDEB, ovl.fmt.RXE.r1,
12815b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXE.x2, ovl.fmt.RXE.b2,
12816b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXE.d2);  goto ok;
12817b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xed0000000005ULL: s390_format_RXE_FRRD(s390_irgen_LXDB, ovl.fmt.RXE.r1,
12818b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXE.x2, ovl.fmt.RXE.b2,
12819b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXE.d2);  goto ok;
12820b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xed0000000006ULL: s390_format_RXE_FRRD(s390_irgen_LXEB, ovl.fmt.RXE.r1,
12821b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXE.x2, ovl.fmt.RXE.b2,
12822b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXE.d2);  goto ok;
12823b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xed0000000007ULL: /* MXDB */ goto unimplemented;
12824b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xed0000000008ULL: /* KEB */ goto unimplemented;
12825b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xed0000000009ULL: s390_format_RXE_FRRD(s390_irgen_CEB, ovl.fmt.RXE.r1,
12826b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXE.x2, ovl.fmt.RXE.b2,
12827b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXE.d2);  goto ok;
12828b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xed000000000aULL: s390_format_RXE_FRRD(s390_irgen_AEB, ovl.fmt.RXE.r1,
12829b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXE.x2, ovl.fmt.RXE.b2,
12830b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXE.d2);  goto ok;
12831b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xed000000000bULL: s390_format_RXE_FRRD(s390_irgen_SEB, ovl.fmt.RXE.r1,
12832b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXE.x2, ovl.fmt.RXE.b2,
12833b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXE.d2);  goto ok;
12834b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xed000000000cULL: /* MDEB */ goto unimplemented;
12835b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xed000000000dULL: s390_format_RXE_FRRD(s390_irgen_DEB, ovl.fmt.RXE.r1,
12836b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXE.x2, ovl.fmt.RXE.b2,
12837b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXE.d2);  goto ok;
12838b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xed000000000eULL: s390_format_RXF_FRRDF(s390_irgen_MAEB,
12839b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                 ovl.fmt.RXF.r3, ovl.fmt.RXF.x2,
12840b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                 ovl.fmt.RXF.b2, ovl.fmt.RXF.d2,
12841b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                 ovl.fmt.RXF.r1);  goto ok;
12842b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xed000000000fULL: s390_format_RXF_FRRDF(s390_irgen_MSEB,
12843b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                 ovl.fmt.RXF.r3, ovl.fmt.RXF.x2,
12844b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                 ovl.fmt.RXF.b2, ovl.fmt.RXF.d2,
12845b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                 ovl.fmt.RXF.r1);  goto ok;
12846b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xed0000000010ULL: s390_format_RXE_FRRD(s390_irgen_TCEB, ovl.fmt.RXE.r1,
12847b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXE.x2, ovl.fmt.RXE.b2,
12848b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXE.d2);  goto ok;
12849b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xed0000000011ULL: s390_format_RXE_FRRD(s390_irgen_TCDB, ovl.fmt.RXE.r1,
12850b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXE.x2, ovl.fmt.RXE.b2,
12851b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXE.d2);  goto ok;
12852b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xed0000000012ULL: s390_format_RXE_FRRD(s390_irgen_TCXB, ovl.fmt.RXE.r1,
12853b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXE.x2, ovl.fmt.RXE.b2,
12854b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXE.d2);  goto ok;
12855b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xed0000000014ULL: s390_format_RXE_FRRD(s390_irgen_SQEB, ovl.fmt.RXE.r1,
12856b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXE.x2, ovl.fmt.RXE.b2,
12857b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXE.d2);  goto ok;
12858b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xed0000000015ULL: s390_format_RXE_FRRD(s390_irgen_SQDB, ovl.fmt.RXE.r1,
12859b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXE.x2, ovl.fmt.RXE.b2,
12860b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXE.d2);  goto ok;
12861b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xed0000000017ULL: s390_format_RXE_FRRD(s390_irgen_MEEB, ovl.fmt.RXE.r1,
12862b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXE.x2, ovl.fmt.RXE.b2,
12863b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXE.d2);  goto ok;
12864b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xed0000000018ULL: /* KDB */ goto unimplemented;
12865b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xed0000000019ULL: s390_format_RXE_FRRD(s390_irgen_CDB, ovl.fmt.RXE.r1,
12866b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXE.x2, ovl.fmt.RXE.b2,
12867b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXE.d2);  goto ok;
12868b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xed000000001aULL: s390_format_RXE_FRRD(s390_irgen_ADB, ovl.fmt.RXE.r1,
12869b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXE.x2, ovl.fmt.RXE.b2,
12870b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXE.d2);  goto ok;
12871b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xed000000001bULL: s390_format_RXE_FRRD(s390_irgen_SDB, ovl.fmt.RXE.r1,
12872b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXE.x2, ovl.fmt.RXE.b2,
12873b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXE.d2);  goto ok;
12874b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xed000000001cULL: s390_format_RXE_FRRD(s390_irgen_MDB, ovl.fmt.RXE.r1,
12875b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXE.x2, ovl.fmt.RXE.b2,
12876b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXE.d2);  goto ok;
12877b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xed000000001dULL: s390_format_RXE_FRRD(s390_irgen_DDB, ovl.fmt.RXE.r1,
12878b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXE.x2, ovl.fmt.RXE.b2,
12879b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXE.d2);  goto ok;
12880b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xed000000001eULL: s390_format_RXF_FRRDF(s390_irgen_MADB,
12881b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                 ovl.fmt.RXF.r3, ovl.fmt.RXF.x2,
12882b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                 ovl.fmt.RXF.b2, ovl.fmt.RXF.d2,
12883b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                 ovl.fmt.RXF.r1);  goto ok;
12884b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xed000000001fULL: s390_format_RXF_FRRDF(s390_irgen_MSDB,
12885b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                 ovl.fmt.RXF.r3, ovl.fmt.RXF.x2,
12886b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                 ovl.fmt.RXF.b2, ovl.fmt.RXF.d2,
12887b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                 ovl.fmt.RXF.r1);  goto ok;
12888b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xed0000000024ULL: /* LDE */ goto unimplemented;
12889b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xed0000000025ULL: /* LXD */ goto unimplemented;
12890b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xed0000000026ULL: /* LXE */ goto unimplemented;
12891b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xed000000002eULL: /* MAE */ goto unimplemented;
12892b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xed000000002fULL: /* MSE */ goto unimplemented;
12893b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xed0000000034ULL: /* SQE */ goto unimplemented;
12894b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xed0000000035ULL: /* SQD */ goto unimplemented;
12895b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xed0000000037ULL: /* MEE */ goto unimplemented;
12896b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xed0000000038ULL: /* MAYL */ goto unimplemented;
12897b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xed0000000039ULL: /* MYL */ goto unimplemented;
12898b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xed000000003aULL: /* MAY */ goto unimplemented;
12899b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xed000000003bULL: /* MY */ goto unimplemented;
12900b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xed000000003cULL: /* MAYH */ goto unimplemented;
12901b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xed000000003dULL: /* MYH */ goto unimplemented;
12902b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xed000000003eULL: /* MAD */ goto unimplemented;
12903b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xed000000003fULL: /* MSD */ goto unimplemented;
12904b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xed0000000040ULL: /* SLDT */ goto unimplemented;
12905b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xed0000000041ULL: /* SRDT */ goto unimplemented;
12906b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xed0000000048ULL: /* SLXT */ goto unimplemented;
12907b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xed0000000049ULL: /* SRXT */ goto unimplemented;
12908b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xed0000000050ULL: /* TDCET */ goto unimplemented;
12909b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xed0000000051ULL: /* TDGET */ goto unimplemented;
12910b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xed0000000054ULL: /* TDCDT */ goto unimplemented;
12911b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xed0000000055ULL: /* TDGDT */ goto unimplemented;
12912b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xed0000000058ULL: /* TDCXT */ goto unimplemented;
12913b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xed0000000059ULL: /* TDGXT */ goto unimplemented;
12914b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xed0000000064ULL: s390_format_RXY_FRRD(s390_irgen_LEY, ovl.fmt.RXY.r1,
12915b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12916b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12917b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12918b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xed0000000065ULL: s390_format_RXY_FRRD(s390_irgen_LDY, ovl.fmt.RXY.r1,
12919b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12920b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12921b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12922b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xed0000000066ULL: s390_format_RXY_FRRD(s390_irgen_STEY, ovl.fmt.RXY.r1,
12923b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12924b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12925b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12926b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xed0000000067ULL: s390_format_RXY_FRRD(s390_irgen_STDY, ovl.fmt.RXY.r1,
12927b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.x2, ovl.fmt.RXY.b2,
12928b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dl2,
12929b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                                ovl.fmt.RXY.dh2);  goto ok;
12930b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
12931b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
12932b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   switch (((ovl.value >> 16) & 0xff0f00000000ULL) >> 32) {
12933b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xc000ULL: s390_format_RIL_RP(s390_irgen_LARL, ovl.fmt.RIL.r1,
12934b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RIL.i2);  goto ok;
12935b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xc001ULL: s390_format_RIL_RI(s390_irgen_LGFI, ovl.fmt.RIL.r1,
12936b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RIL.i2);  goto ok;
12937b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xc004ULL: s390_format_RIL(s390_irgen_BRCL, ovl.fmt.RIL.r1,
12938b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                   ovl.fmt.RIL.i2);  goto ok;
12939b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xc005ULL: s390_format_RIL_RP(s390_irgen_BRASL, ovl.fmt.RIL.r1,
12940b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RIL.i2);  goto ok;
12941b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xc006ULL: s390_format_RIL_RU(s390_irgen_XIHF, ovl.fmt.RIL.r1,
12942b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RIL.i2);  goto ok;
12943b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xc007ULL: s390_format_RIL_RU(s390_irgen_XILF, ovl.fmt.RIL.r1,
12944b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RIL.i2);  goto ok;
12945b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xc008ULL: s390_format_RIL_RU(s390_irgen_IIHF, ovl.fmt.RIL.r1,
12946b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RIL.i2);  goto ok;
12947b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xc009ULL: s390_format_RIL_RU(s390_irgen_IILF, ovl.fmt.RIL.r1,
12948b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RIL.i2);  goto ok;
12949b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xc00aULL: s390_format_RIL_RU(s390_irgen_NIHF, ovl.fmt.RIL.r1,
12950b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RIL.i2);  goto ok;
12951b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xc00bULL: s390_format_RIL_RU(s390_irgen_NILF, ovl.fmt.RIL.r1,
12952b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RIL.i2);  goto ok;
12953b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xc00cULL: s390_format_RIL_RU(s390_irgen_OIHF, ovl.fmt.RIL.r1,
12954b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RIL.i2);  goto ok;
12955b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xc00dULL: s390_format_RIL_RU(s390_irgen_OILF, ovl.fmt.RIL.r1,
12956b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RIL.i2);  goto ok;
12957b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xc00eULL: s390_format_RIL_RU(s390_irgen_LLIHF, ovl.fmt.RIL.r1,
12958b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RIL.i2);  goto ok;
12959b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xc00fULL: s390_format_RIL_RU(s390_irgen_LLILF, ovl.fmt.RIL.r1,
12960b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RIL.i2);  goto ok;
12961b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xc200ULL: s390_format_RIL_RI(s390_irgen_MSGFI, ovl.fmt.RIL.r1,
12962b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RIL.i2);  goto ok;
12963b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xc201ULL: s390_format_RIL_RI(s390_irgen_MSFI, ovl.fmt.RIL.r1,
12964b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RIL.i2);  goto ok;
12965b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xc204ULL: s390_format_RIL_RU(s390_irgen_SLGFI, ovl.fmt.RIL.r1,
12966b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RIL.i2);  goto ok;
12967b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xc205ULL: s390_format_RIL_RU(s390_irgen_SLFI, ovl.fmt.RIL.r1,
12968b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RIL.i2);  goto ok;
12969b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xc208ULL: s390_format_RIL_RI(s390_irgen_AGFI, ovl.fmt.RIL.r1,
12970b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RIL.i2);  goto ok;
12971b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xc209ULL: s390_format_RIL_RI(s390_irgen_AFI, ovl.fmt.RIL.r1,
12972b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RIL.i2);  goto ok;
12973b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xc20aULL: s390_format_RIL_RU(s390_irgen_ALGFI, ovl.fmt.RIL.r1,
12974b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RIL.i2);  goto ok;
12975b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xc20bULL: s390_format_RIL_RU(s390_irgen_ALFI, ovl.fmt.RIL.r1,
12976b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RIL.i2);  goto ok;
12977b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xc20cULL: s390_format_RIL_RI(s390_irgen_CGFI, ovl.fmt.RIL.r1,
12978b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RIL.i2);  goto ok;
12979b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xc20dULL: s390_format_RIL_RI(s390_irgen_CFI, ovl.fmt.RIL.r1,
12980b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RIL.i2);  goto ok;
12981b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xc20eULL: s390_format_RIL_RU(s390_irgen_CLGFI, ovl.fmt.RIL.r1,
12982b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RIL.i2);  goto ok;
12983b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xc20fULL: s390_format_RIL_RU(s390_irgen_CLFI, ovl.fmt.RIL.r1,
12984b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RIL.i2);  goto ok;
12985b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xc402ULL: s390_format_RIL_RP(s390_irgen_LLHRL, ovl.fmt.RIL.r1,
12986b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RIL.i2);  goto ok;
12987b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xc404ULL: s390_format_RIL_RP(s390_irgen_LGHRL, ovl.fmt.RIL.r1,
12988b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RIL.i2);  goto ok;
12989b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xc405ULL: s390_format_RIL_RP(s390_irgen_LHRL, ovl.fmt.RIL.r1,
12990b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RIL.i2);  goto ok;
12991b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xc406ULL: s390_format_RIL_RP(s390_irgen_LLGHRL, ovl.fmt.RIL.r1,
12992b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RIL.i2);  goto ok;
12993b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xc407ULL: s390_format_RIL_RP(s390_irgen_STHRL, ovl.fmt.RIL.r1,
12994b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RIL.i2);  goto ok;
12995b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xc408ULL: s390_format_RIL_RP(s390_irgen_LGRL, ovl.fmt.RIL.r1,
12996b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RIL.i2);  goto ok;
12997b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xc40bULL: s390_format_RIL_RP(s390_irgen_STGRL, ovl.fmt.RIL.r1,
12998b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RIL.i2);  goto ok;
12999b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xc40cULL: s390_format_RIL_RP(s390_irgen_LGFRL, ovl.fmt.RIL.r1,
13000b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RIL.i2);  goto ok;
13001b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xc40dULL: s390_format_RIL_RP(s390_irgen_LRL, ovl.fmt.RIL.r1,
13002b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RIL.i2);  goto ok;
13003b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xc40eULL: s390_format_RIL_RP(s390_irgen_LLGFRL, ovl.fmt.RIL.r1,
13004b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RIL.i2);  goto ok;
13005b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xc40fULL: s390_format_RIL_RP(s390_irgen_STRL, ovl.fmt.RIL.r1,
13006b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RIL.i2);  goto ok;
13007b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xc600ULL: s390_format_RIL_RP(s390_irgen_EXRL, ovl.fmt.RIL.r1,
13008b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RIL.i2);  goto ok;
13009b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xc602ULL: s390_format_RIL_UP(s390_irgen_PFDRL, ovl.fmt.RIL.r1,
13010b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RIL.i2);  goto ok;
13011b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xc604ULL: s390_format_RIL_RP(s390_irgen_CGHRL, ovl.fmt.RIL.r1,
13012b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RIL.i2);  goto ok;
13013b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xc605ULL: s390_format_RIL_RP(s390_irgen_CHRL, ovl.fmt.RIL.r1,
13014b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RIL.i2);  goto ok;
13015b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xc606ULL: s390_format_RIL_RP(s390_irgen_CLGHRL, ovl.fmt.RIL.r1,
13016b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RIL.i2);  goto ok;
13017b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xc607ULL: s390_format_RIL_RP(s390_irgen_CLHRL, ovl.fmt.RIL.r1,
13018b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RIL.i2);  goto ok;
13019b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xc608ULL: s390_format_RIL_RP(s390_irgen_CGRL, ovl.fmt.RIL.r1,
13020b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RIL.i2);  goto ok;
13021b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xc60aULL: s390_format_RIL_RP(s390_irgen_CLGRL, ovl.fmt.RIL.r1,
13022b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RIL.i2);  goto ok;
13023b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xc60cULL: s390_format_RIL_RP(s390_irgen_CGFRL, ovl.fmt.RIL.r1,
13024b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RIL.i2);  goto ok;
13025b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xc60dULL: s390_format_RIL_RP(s390_irgen_CRL, ovl.fmt.RIL.r1,
13026b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RIL.i2);  goto ok;
13027b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xc60eULL: s390_format_RIL_RP(s390_irgen_CLGFRL, ovl.fmt.RIL.r1,
13028b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RIL.i2);  goto ok;
13029b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xc60fULL: s390_format_RIL_RP(s390_irgen_CLRL, ovl.fmt.RIL.r1,
13030b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RIL.i2);  goto ok;
13031b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xc800ULL: /* MVCOS */ goto unimplemented;
13032b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xc801ULL: /* ECTG */ goto unimplemented;
13033b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xc802ULL: /* CSST */ goto unimplemented;
13034b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xc804ULL: /* LPD */ goto unimplemented;
13035b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xc805ULL: /* LPDG */ goto unimplemented;
13036b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xcc06ULL: /* BRCTH */ goto unimplemented;
13037b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xcc08ULL: s390_format_RIL_RI(s390_irgen_AIH, ovl.fmt.RIL.r1,
13038b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RIL.i2);  goto ok;
13039b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xcc0aULL: s390_format_RIL_RI(s390_irgen_ALSIH, ovl.fmt.RIL.r1,
13040b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RIL.i2);  goto ok;
13041b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xcc0bULL: s390_format_RIL_RI(s390_irgen_ALSIHN, ovl.fmt.RIL.r1,
13042b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RIL.i2);  goto ok;
13043b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xcc0dULL: s390_format_RIL_RI(s390_irgen_CIH, ovl.fmt.RIL.r1,
13044b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RIL.i2);  goto ok;
13045b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xcc0fULL: s390_format_RIL_RU(s390_irgen_CLIH, ovl.fmt.RIL.r1,
13046b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                      ovl.fmt.RIL.i2);  goto ok;
13047b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
13048b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
13049b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   switch (((ovl.value >> 16) & 0xff0000000000ULL) >> 40) {
13050b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xd0ULL: /* TRTR */ goto unimplemented;
13051b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xd1ULL: /* MVN */ goto unimplemented;
13052b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xd2ULL: s390_format_SS_L0RDRD(s390_irgen_MVC, ovl.fmt.SS.l,
13053b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                       ovl.fmt.SS.b1, ovl.fmt.SS.d1,
13054b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                       ovl.fmt.SS.b2, ovl.fmt.SS.d2);  goto ok;
13055b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xd3ULL: /* MVZ */ goto unimplemented;
13056b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xd4ULL: s390_format_SS_L0RDRD(s390_irgen_NC, ovl.fmt.SS.l,
13057b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                       ovl.fmt.SS.b1, ovl.fmt.SS.d1,
13058b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                       ovl.fmt.SS.b2, ovl.fmt.SS.d2);  goto ok;
13059b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xd5ULL: s390_format_SS_L0RDRD(s390_irgen_CLC, ovl.fmt.SS.l,
13060b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                       ovl.fmt.SS.b1, ovl.fmt.SS.d1,
13061b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                       ovl.fmt.SS.b2, ovl.fmt.SS.d2);  goto ok;
13062b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xd6ULL: s390_format_SS_L0RDRD(s390_irgen_OC, ovl.fmt.SS.l,
13063b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                       ovl.fmt.SS.b1, ovl.fmt.SS.d1,
13064b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                       ovl.fmt.SS.b2, ovl.fmt.SS.d2);  goto ok;
13065b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xd7ULL:
13066b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      if (ovl.fmt.SS.b1 == ovl.fmt.SS.b2 && ovl.fmt.SS.d1 == ovl.fmt.SS.d2)
13067b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         s390_irgen_XC_sameloc(ovl.fmt.SS.l, ovl.fmt.SS.b1, ovl.fmt.SS.d1);
13068b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      else
13069b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        s390_format_SS_L0RDRD(s390_irgen_XC, ovl.fmt.SS.l,
13070b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                              ovl.fmt.SS.b1, ovl.fmt.SS.d1,
13071b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                              ovl.fmt.SS.b2, ovl.fmt.SS.d2);
13072b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      goto ok;
13073b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xd9ULL: /* MVCK */ goto unimplemented;
13074b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xdaULL: /* MVCP */ goto unimplemented;
13075b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xdbULL: /* MVCS */ goto unimplemented;
13076b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xdcULL: /* TR */ goto unimplemented;
13077b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xddULL: /* TRT */ goto unimplemented;
13078b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xdeULL: /* ED */ goto unimplemented;
13079b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xdfULL: /* EDMK */ goto unimplemented;
13080b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe1ULL: /* PKU */ goto unimplemented;
13081b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe2ULL: /* UNPKU */ goto unimplemented;
13082b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe8ULL: /* MVCIN */ goto unimplemented;
13083b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe9ULL: /* PKA */ goto unimplemented;
13084b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeaULL: /* UNPKA */ goto unimplemented;
13085b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xeeULL: /* PLO */ goto unimplemented;
13086b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xefULL: /* LMD */ goto unimplemented;
13087b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xf0ULL: /* SRP */ goto unimplemented;
13088b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xf1ULL: /* MVO */ goto unimplemented;
13089b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xf2ULL: /* PACK */ goto unimplemented;
13090b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xf3ULL: /* UNPK */ goto unimplemented;
13091b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xf8ULL: /* ZAP */ goto unimplemented;
13092b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xf9ULL: /* CP */ goto unimplemented;
13093b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xfaULL: /* AP */ goto unimplemented;
13094b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xfbULL: /* SP */ goto unimplemented;
13095b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xfcULL: /* MP */ goto unimplemented;
13096b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xfdULL: /* DP */ goto unimplemented;
13097b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
13098b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
13099b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   switch (((ovl.value >> 16) & 0xffff00000000ULL) >> 32) {
13100b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe500ULL: /* LASP */ goto unimplemented;
13101b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe501ULL: /* TPROT */ goto unimplemented;
13102b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe502ULL: /* STRAG */ goto unimplemented;
13103b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe50eULL: /* MVCSK */ goto unimplemented;
13104b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe50fULL: /* MVCDK */ goto unimplemented;
13105b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe544ULL: s390_format_SIL_RDI(s390_irgen_MVHHI, ovl.fmt.SIL.b1,
13106b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                       ovl.fmt.SIL.d1, ovl.fmt.SIL.i2);
13107b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                       goto ok;
13108b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe548ULL: s390_format_SIL_RDI(s390_irgen_MVGHI, ovl.fmt.SIL.b1,
13109b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                       ovl.fmt.SIL.d1, ovl.fmt.SIL.i2);
13110b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                       goto ok;
13111b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe54cULL: s390_format_SIL_RDI(s390_irgen_MVHI, ovl.fmt.SIL.b1,
13112b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                       ovl.fmt.SIL.d1, ovl.fmt.SIL.i2);
13113b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                       goto ok;
13114b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe554ULL: s390_format_SIL_RDI(s390_irgen_CHHSI, ovl.fmt.SIL.b1,
13115b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                       ovl.fmt.SIL.d1, ovl.fmt.SIL.i2);
13116b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                       goto ok;
13117b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe555ULL: s390_format_SIL_RDU(s390_irgen_CLHHSI, ovl.fmt.SIL.b1,
13118b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                       ovl.fmt.SIL.d1, ovl.fmt.SIL.i2);
13119b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                       goto ok;
13120b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe558ULL: s390_format_SIL_RDI(s390_irgen_CGHSI, ovl.fmt.SIL.b1,
13121b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                       ovl.fmt.SIL.d1, ovl.fmt.SIL.i2);
13122b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                       goto ok;
13123b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe559ULL: s390_format_SIL_RDU(s390_irgen_CLGHSI, ovl.fmt.SIL.b1,
13124b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                       ovl.fmt.SIL.d1, ovl.fmt.SIL.i2);
13125b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                       goto ok;
13126b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe55cULL: s390_format_SIL_RDI(s390_irgen_CHSI, ovl.fmt.SIL.b1,
13127b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                       ovl.fmt.SIL.d1, ovl.fmt.SIL.i2);
13128b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                       goto ok;
13129b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case 0xe55dULL: s390_format_SIL_RDU(s390_irgen_CLFHSI, ovl.fmt.SIL.b1,
13130b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                       ovl.fmt.SIL.d1, ovl.fmt.SIL.i2);
13131b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                       goto ok;
13132b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
13133b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
13134b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return S390_DECODE_UNKNOWN_INSN;
13135b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
13136b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovok:
13137b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return S390_DECODE_OK;
13138b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
13139b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovunimplemented:
13140b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return S390_DECODE_UNIMPLEMENTED_INSN;
13141b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
13142b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
13143b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Handle "special" instructions. */
13144b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic s390_decode_t
13145b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_decode_special_and_irgen(UChar *bytes)
13146b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
13147b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_decode_t status = S390_DECODE_OK;
13148b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
13149b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* Got a "Special" instruction preamble.  Which one is it? */
13150b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (bytes[0] == 0x18 && bytes[1] == 0x22 /* lr %r2, %r2 */) {
13151b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_irgen_client_request();
13152b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } else if (bytes[0] == 0x18 && bytes[1] == 0x33 /* lr %r3, %r3 */) {
13153b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_irgen_guest_NRADDR();
13154b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } else if (bytes[0] == 0x18 && bytes[1] == 0x44 /* lr %r4, %r4 */) {
13155b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      s390_irgen_call_noredir();
13156b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } else {
13157b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      /* We don't know what it is. */
13158b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      return S390_DECODE_UNKNOWN_SPECIAL_INSN;
13159b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
13160b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
13161b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   dis_res->len = S390_SPECIAL_OP_PREAMBLE_SIZE + S390_SPECIAL_OP_SIZE;
13162b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
13163b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return status;
13164b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
13165b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
13166b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
13167b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Function returns # bytes that were decoded or 0 in case of failure */
13168b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic UInt
13169b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovs390_decode_and_irgen(UChar *bytes, UInt insn_length, DisResult *dres)
13170b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
13171b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   s390_decode_t status;
13172b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
13173b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   dis_res = dres;
13174b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
13175b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* Spot the 8-byte preamble:   18ff lr r15,r15
13176b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  1811 lr r1,r1
13177b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  1822 lr r2,r2
13178b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                  1833 lr r3,r3 */
13179b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (bytes[ 0] == 0x18 && bytes[ 1] == 0xff && bytes[ 2] == 0x18 &&
13180b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov       bytes[ 3] == 0x11 && bytes[ 4] == 0x18 && bytes[ 5] == 0x22 &&
13181b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov       bytes[ 6] == 0x18 && bytes[ 7] == 0x33) {
13182b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
13183b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      /* Handle special instruction that follows that preamble. */
13184b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      if (0) vex_printf("special function handling...\n");
13185b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
13186b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      insn_length = S390_SPECIAL_OP_PREAMBLE_SIZE + S390_SPECIAL_OP_SIZE;
13187b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      guest_IA_next_instr = guest_IA_curr_instr + insn_length;
13188b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
13189b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      status =
13190b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         s390_decode_special_and_irgen(bytes + S390_SPECIAL_OP_PREAMBLE_SIZE);
13191b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   } else {
13192b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      /* Handle normal instructions. */
13193b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      switch (insn_length) {
13194b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      case 2:
13195b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         status = s390_decode_2byte_and_irgen(bytes);
13196b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         break;
13197b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
13198b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      case 4:
13199b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         status = s390_decode_4byte_and_irgen(bytes);
13200b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         break;
13201b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
13202b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      case 6:
13203b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         status = s390_decode_6byte_and_irgen(bytes);
13204b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         break;
13205b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
13206b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      default:
13207b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        status = S390_DECODE_ERROR;
13208b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        break;
13209b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      }
13210b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
13211b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* If next instruction is execute, stop here */
13212b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (irsb->next == NULL && dis_res->whatNext == Dis_Continue
13213b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov       && bytes[insn_length] == 0x44) {
13214b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      irsb->next = IRExpr_Const(IRConst_U64(guest_IA_next_instr));
13215b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      dis_res->whatNext = Dis_StopHere;
13216b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      dis_res->continueAt = 0;
13217b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
13218b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
13219b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (status == S390_DECODE_OK) return insn_length;  /* OK */
13220b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
13221b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* Decoding failed somehow */
13222b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   vex_printf("vex s390->IR: ");
13223b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   switch (status) {
13224b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case S390_DECODE_UNKNOWN_INSN:
13225b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      vex_printf("unknown insn: ");
13226b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      break;
13227b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
13228b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case S390_DECODE_UNIMPLEMENTED_INSN:
13229b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      vex_printf("unimplemented insn: ");
13230b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      break;
13231b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
13232b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case S390_DECODE_UNKNOWN_SPECIAL_INSN:
13233b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      vex_printf("unimplemented special insn: ");
13234b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      break;
13235b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
13236b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   default:
13237b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   case S390_DECODE_ERROR:
13238b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      vex_printf("decoding error: ");
13239b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      break;
13240b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
13241b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
13242b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   vex_printf("%02x%02x", bytes[0], bytes[1]);
13243b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (insn_length > 2) {
13244b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      vex_printf(" %02x%02x", bytes[2], bytes[3]);
13245b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
13246b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (insn_length > 4) {
13247b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      vex_printf(" %02x%02x", bytes[4], bytes[5]);
13248b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
13249b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   vex_printf("\n");
13250b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
13251b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return 0;  /* Failed */
13252b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
13253b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
13254b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
13255b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Generate an IRExpr for an address. */
13256b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic __inline__ IRExpr *
13257b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovmkaddr_expr(Addr64 addr)
13258b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
13259b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return IRExpr_Const(IRConst_U64(addr));
13260b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
13261b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
13262b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
13263b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Disassemble a single instruction INSN into IR. */
13264b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic DisResult
13265b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy StepanovdisInstr_S390_WRK(UChar *insn)
13266b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
13267b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UChar byte;
13268b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   UInt  insn_length;
13269b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   DisResult dres;
13270b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
13271b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* ---------------------------------------------------- */
13272b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* --- Compute instruction length                    -- */
13273b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* ---------------------------------------------------- */
13274b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
13275b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* Get the first byte of the insn. */
13276b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   byte = insn[0];
13277b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
13278b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* The leftmost two bits (0:1) encode the length of the insn in bytes.
13279b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      00 -> 2 bytes, 01 -> 4 bytes, 10 -> 4 bytes, 11 -> 6 bytes. */
13280b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   insn_length = ((((byte >> 6) + 1) >> 1) + 1) << 1;
13281b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
13282b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   guest_IA_next_instr = guest_IA_curr_instr + insn_length;
13283b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
13284b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* ---------------------------------------------------- */
13285b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* --- Initialise the DisResult data                 -- */
13286b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* ---------------------------------------------------- */
13287b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   dres.whatNext   = Dis_Continue;
13288b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   dres.len        = insn_length;
13289b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   dres.continueAt = 0;
13290b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
13291b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* fixs390: consider chasing of conditional jumps */
13292b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
13293b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* Normal and special instruction handling starts here. */
13294b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (s390_decode_and_irgen(insn, insn_length, &dres) == 0) {
13295b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      /* All decode failures end up here. The decoder has already issued an
13296b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         error message.
13297b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         Tell the dispatcher that this insn cannot be decoded, and so has
13298b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         not been executed, and (is currently) the next to be executed.
13299b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         IA should be up-to-date since it made so at the start of each
13300b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         insn, but nevertheless be paranoid and update it again right
13301b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         now. */
13302b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      addStmtToIRSB(irsb, IRStmt_Put(S390X_GUEST_OFFSET(guest_IA),
13303b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                     mkaddr_expr(guest_IA_curr_instr)));
13304b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
13305b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      irsb->next = mkaddr_expr(guest_IA_next_instr);
13306b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      irsb->jumpkind = Ijk_NoDecode;
13307b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      dres.whatNext = Dis_StopHere;
13308b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      dres.len = 0;
13309b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   }
13310b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
13311b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return dres;
13312b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
13313b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
13314b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
13315b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/*------------------------------------------------------------*/
13316b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/*--- Top-level fn                                         ---*/
13317b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/*------------------------------------------------------------*/
13318b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
13319b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Disassemble a single instruction into IR.  The instruction
13320b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   is located in host memory at &guest_code[delta]. */
13321b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
13322b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy StepanovDisResult
13323b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy StepanovdisInstr_S390(IRSB        *irsb_IN,
13324b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov              Bool         put_IP,
13325b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov              Bool       (*resteerOkFn)(void *, Addr64),
13326b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov              Bool         resteerCisOk,
13327b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov              void        *callback_opaque,
13328b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov              UChar       *guest_code,
13329b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov              Long         delta,
13330b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov              Addr64       guest_IP,
13331b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov              VexArch      guest_arch,
13332b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov              VexArchInfo *archinfo,
13333b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov              VexAbiInfo  *abiinfo,
13334b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov              Bool         host_bigendian)
13335b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
13336b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   vassert(guest_arch == VexArchS390X);
13337b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
13338b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* The instruction decoder requires a big-endian machine. */
13339b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   vassert(host_bigendian == True);
13340b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
13341b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* Set globals (see top of this file) */
13342b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   guest_IA_curr_instr = guest_IP;
13343b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   irsb = irsb_IN;
13344b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   resteer_fn = resteerOkFn;
13345b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   resteer_data = callback_opaque;
13346b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
13347b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   /* We may be asked to update the guest IA before going further. */
13348b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   if (put_IP)
13349b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      addStmtToIRSB(irsb, IRStmt_Put(S390X_GUEST_OFFSET(guest_IA),
13350b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                                     mkaddr_expr(guest_IA_curr_instr)));
13351b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
13352b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   return disInstr_S390_WRK(guest_code + delta);
13353b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
13354b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
13355b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/*---------------------------------------------------------------*/
13356b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/*--- end                                   guest_s390_toIR.c ---*/
13357b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/*---------------------------------------------------------------*/
13358