/* -*- mode: C; c-basic-offset: 3; -*- */

/*---------------------------------------------------------------*/
/*--- begin                                 guest_s390_defs.h ---*/
/*---------------------------------------------------------------*/

/*
   This file is part of Valgrind, a dynamic binary instrumentation
   framework.

   Copyright IBM Corp. 2010-2011

   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
   published by the Free Software Foundation; either version 2 of the
   License, or (at your option) any later version.

   This program is distributed in the hope that it will be useful, but
   WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
   02110-1301, USA.

   The GNU General Public License is contained in the file COPYING.
*/

/* Contributed by Florian Krohm */

#ifndef __VEX_GUEST_S390_DEFS_H
#define __VEX_GUEST_S390_DEFS_H

#include "libvex_basictypes.h"
#include "libvex_ir.h"                // IRSB  (needed by bb_to_IR.h)
#include "libvex.h"                   // VexArch  (needed by bb_to_IR.h)
#include "guest_generic_bb_to_IR.h"   // DisResult

/* Convert one s390 insn to IR.  See the type DisOneInstrFn in
   bb_to_IR.h. */
extern
DisResult disInstr_S390 ( IRSB*        irbb,
                          Bool         put_IP,
                          Bool         (*resteerOkFn) ( void*, Addr64 ),
                          Bool         resteerCisOk,
                          void*        callback_opaque,
                          UChar*       guest_code,
                          Long         delta,
                          Addr64       guest_IP,
                          VexArch      guest_arch,
                          VexArchInfo* archinfo,
                          VexAbiInfo*  abiinfo,
                          Bool         host_bigendian );

/* Used by the optimiser to specialise calls to helpers. */
extern
IRExpr* guest_s390x_spechelper ( HChar   *function_name,
                                 IRExpr **args,
                                 IRStmt **precedingStmts,
                                 Int n_precedingStmts);


/* Describes to the optimser which part of the guest state require
   precise memory exceptions.  This is logically part of the guest
   state description. */
extern
Bool guest_s390x_state_requires_precise_mem_exns ( Int, Int );

extern
VexGuestLayout s390xGuest_layout;


UInt s390_decode_and_irgen(UChar *, UInt, DisResult *);

#define S390_GUEST_OFFSET(x)  offsetof(VexGuestS390XState, x)

/*------------------------------------------------------------*/
/*--- Dirty Helper functions.                              ---*/
/*------------------------------------------------------------*/
void s390x_dirtyhelper_EX(ULong torun);
ULong s390x_dirtyhelper_STCK(ULong *addr);
ULong s390x_dirtyhelper_STCKF(ULong *addr);
ULong s390x_dirtyhelper_STCKE(ULong *addr);

/*------------------------------------------------------------*/
/*--- IR generators for special opcodes.                   ---*/
/*------------------------------------------------------------*/
void s390_irgen_client_request(void);
void s390_irgen_guest_NRADDR(void);
void s390_irgen_call_noredir(void);
void s390_irgen_internal_return(void);

#include "libvex_basictypes.h"
#include "libvex_ir.h"

/* The various ways to compute the condition code. */

enum {
   S390_CC_OP_BITWISE = 0,
   S390_CC_OP_SIGNED_COMPARE = 1,
   S390_CC_OP_UNSIGNED_COMPARE = 2,
   S390_CC_OP_SIGNED_ADD_32 = 3,
   S390_CC_OP_SIGNED_ADD_64 = 4,
   S390_CC_OP_UNSIGNED_ADD_32 = 5,
   S390_CC_OP_UNSIGNED_ADD_64 = 6,
   S390_CC_OP_UNSIGNED_ADDC_32 = 7,
   S390_CC_OP_UNSIGNED_ADDC_64 = 8,
   S390_CC_OP_SIGNED_SUB_32 = 9,
   S390_CC_OP_SIGNED_SUB_64 = 10,
   S390_CC_OP_UNSIGNED_SUB_32 = 11,
   S390_CC_OP_UNSIGNED_SUB_64 = 12,
   S390_CC_OP_UNSIGNED_SUBB_32 = 13,
   S390_CC_OP_UNSIGNED_SUBB_64 = 14,
   S390_CC_OP_LOAD_AND_TEST = 15,
   S390_CC_OP_LOAD_POSITIVE_32 = 16,
   S390_CC_OP_LOAD_POSITIVE_64 = 17,
   S390_CC_OP_TEST_AND_SET = 18,
   S390_CC_OP_TEST_UNDER_MASK_8 = 19,
   S390_CC_OP_TEST_UNDER_MASK_16 = 20,
   S390_CC_OP_SHIFT_LEFT_32 = 21,
   S390_CC_OP_SHIFT_LEFT_64 = 22,
   S390_CC_OP_INSERT_CHAR_MASK_32 = 23,
   S390_CC_OP_BFP_RESULT_32 = 24,
   S390_CC_OP_BFP_RESULT_64 = 25,
   S390_CC_OP_BFP_RESULT_128 = 26,
   S390_CC_OP_BFP_32_TO_INT_32 = 27,
   S390_CC_OP_BFP_64_TO_INT_32 = 28,
   S390_CC_OP_BFP_128_TO_INT_32 = 29,
   S390_CC_OP_BFP_32_TO_INT_64 = 30,
   S390_CC_OP_BFP_64_TO_INT_64 = 31,
   S390_CC_OP_BFP_128_TO_INT_64 = 32,
   S390_CC_OP_BFP_TDC_32 = 33,
   S390_CC_OP_BFP_TDC_64 = 34,
   S390_CC_OP_BFP_TDC_128 = 35,
   S390_CC_OP_SET = 36
};

/*------------------------------------------------------------*/
/*--- Thunk layout                                         ---*/
/*------------------------------------------------------------*/

/*
   Z -- value is zero extended to 32 / 64 bit
   S -- value is sign extended to 32 / 64 bit
   F -- a binary floating point value

   +--------------------------------+-----------------------+----------------------+-------------+
   | op                             |   cc_dep1             |   cc_dep2            |   cc_ndep   |
   +--------------------------------+-----------------------+----------------------+-------------+
   | S390_CC_OP_BITWISE             | Z result              |                      |             |
   | S390_CC_OP_SIGNED_COMPARE      | S 1st operand         | S 2nd operand        |             |
   | S390_CC_OP_UNSIGNED_COMPARE    | Z 1st operand         | Z 2nd operand        |             |
   | S390_CC_OP_SIGNED_ADD_32       | S 1st operand         | S 2nd operand        |             |
   | S390_CC_OP_SIGNED_ADD_64       | S 1st operand         | S 2nd operand        |             |
   | S390_CC_OP_UNSIGNED_ADD_32     | Z 1st operand         | Z 2nd operand        |             |
   | S390_CC_OP_UNSIGNED_ADD_64     | Z 1st operand         | Z 2nd operand        |             |
   | S390_CC_OP_UNSIGNED_ADDC_32    | Z 1st operand         | Z 2nd operand        | Z carry in  |
   | S390_CC_OP_UNSIGNED_ADDC_64    | Z 1st operand         | Z 2nd operand        | Z carry in  |
   | S390_CC_OP_SIGNED_SUB_32       | S left operand        | S right operand      |             |
   | S390_CC_OP_SIGNED_SUB_64       | S left operand        | S right operand      |             |
   | S390_CC_OP_UNSIGNED_SUB_32     | Z left operand        | Z right operand      |             |
   | S390_CC_OP_UNSIGNED_SUB_64     | Z left operand        | Z right operand      |             |
   | S390_CC_OP_UNSIGNED_SUBB_32    | Z left operand        | Z right operand      | Z borrow in |
   | S390_CC_OP_UNSIGNED_SUBB_64    | Z left operand        | Z right operand      | Z borrow in |
   | S390_CC_OP_LOAD_AND_TEST       | S loaded value        |                      |             |
   | S390_CC_OP_LOAD_POSITIVE_32    | S loaded value        |                      |             |
   | S390_CC_OP_LOAD_POSITIVE_64    | S loaded value        |                      |             |
   | S390_CC_OP_TEST_AND_SET        | Z tested value        |                      |             |
   | S390_CC_OP_TEST_UNDER_MASK_8   | Z tested value        | Z mask               |             |
   | S390_CC_OP_TEST_UNDER_MASK_16  | Z tested value        | Z mask               |             |
   | S390_CC_OP_SHIFT_LEFT_32       | Z value to be shifted | Z shift amount       |             |
   | S390_CC_OP_SHIFT_LEFT_64       | Z value to be shifted | Z shift amount       |             |
   | S390_CC_OP_INSERT_CHAR_MASK_32 | Z result              | Z mask               |             |
   | S390_CC_OP_BFP_RESULT_32       | F result              |                      |             |
   | S390_CC_OP_BFP_RESULT_64       | F result              |                      |             |
   | S390_CC_OP_BFP_RESULT_128      | F result hi 64 bits   | F result low 64 bits |             |
   | S390_CC_OP_BFP_32_TO_INT_32    | F source              |                      |             |
   | S390_CC_OP_BFP_64_TO_INT_32    | F source              |                      |             |
   | S390_CC_OP_BFP_128_TO_INT_32   | F source hi 64 bits   |                      |             |
   | S390_CC_OP_BFP_32_TO_INT_64    | F source              |                      |             |
   | S390_CC_OP_BFP_64_TO_INT_64    | F source              |                      |             |
   | S390_CC_OP_BFP_128_TO_INT_64   | F source hi 64 bits   |                      |             |
   | S390_CC_OP_BFP_TDC_32          | F value               | Z class              |             |
   | S390_CC_OP_BFP_TDC_64          | F value               | Z class              |             |
   | S390_CC_OP_BFP_TDC_128         | F value hi 64 bits    | F value low 64 bits  | Z class     |
   | S390_CC_OP_SET                 | Z condition code      |                      |             |
   +--------------------------------+-----------------------+----------------------+-------------+
*/

/*------------------------------------------------------------*/
/*--- condition code helpers.                             ---*/
/*------------------------------------------------------------*/
UInt s390_calculate_cc(ULong cc_op, ULong cc_dep1, ULong cc_dep2,
                       ULong cc_ndep);
UInt s390_calculate_icc(ULong op, ULong dep1, ULong dep2);
UInt s390_calculate_cond(ULong mask, ULong op, ULong dep1, ULong dep2,
                         ULong ndep);

/* Size of special instruction preamble */
#define S390_SPECIAL_OP_PREAMBLE_SIZE 8

/* Size of special instructions */
#define S390_SPECIAL_OP_SIZE 2

/* Last target instruction for the EX helper */
extern ULong last_execute_target;

/*---------------------------------------------------------------*/
/*--- end                                   guest_s390_defs.h ---*/
/*---------------------------------------------------------------*/

#endif /* __VEX_GUEST_S390_DEFS_H */
