1/*---------------------------------------------------------------*/
2/*--- begin                               guest_tilegx_defs.h ---*/
3/*---------------------------------------------------------------*/
4
5/*
6   This file is part of Valgrind, a dynamic binary instrumentation
7   framework.
8
9   Copyright (C) 2010-2013 Tilera Corp.
10
11   This program is free software; you can redistribute it and/or
12   modify it under the terms of the GNU General Public License as
13   published by the Free Software Foundation; either version 2 of the
14   License, or (at your option) any later version.
15
16   This program is distributed in the hope that it will be useful, but
17   WITHOUT ANY WARRANTY; without even the implied warranty of
18   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
19   General Public License for more details.
20
21   You should have received a copy of the GNU General Public License
22   along with this program; if not, write to the Free Software
23   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
24   02111-1307, USA.
25
26   The GNU General Public License is contained in the file COPYING.
27*/
28
29 /* Contributed by Zhi-Gang Liu <zliu at tilera dot com> */
30
31#ifndef __VEX_GUEST_TILEGX_DEFS_H
32#define __VEX_GUEST_TILEGX_DEFS_H
33
34#ifdef __tilegx__
35#include "tilegx_disasm.h"
36#endif
37
38/*---------------------------------------------------------*/
39/*--- tilegx to IR conversion                           ---*/
40/*---------------------------------------------------------*/
41
42/* Convert one TILEGX insn to IR.  See the type DisOneInstrFn in
43   bb_to_IR.h. */
44extern DisResult disInstr_TILEGX ( IRSB* irbb,
45                                   Bool (*resteerOkFn) ( void *, Addr ),
46                                   Bool resteerCisOk,
47                                   void* callback_opaque,
48                                   const UChar* guest_code,
49                                   Long delta,
50                                   Addr guest_IP,
51                                   VexArch guest_arch,
52                                   const VexArchInfo* archinfo,
53                                   const VexAbiInfo* abiinfo,
54                                   VexEndness host_endness_IN,
55                                   Bool sigill_diag_IN );
56
57/* Used by the optimiser to specialise calls to helpers. */
58extern IRExpr *guest_tilegx_spechelper ( const HChar * function_name,
59                                         IRExpr ** args,
60                                         IRStmt ** precedingStmts,
61                                         Int n_precedingStmts );
62
63/* Describes to the optimser which part of the guest state require
64   precise memory exceptions.  This is logically part of the guest
65   state description. */
66extern Bool guest_tilegx_state_requires_precise_mem_exns (
67  Int, Int, VexRegisterUpdates );
68
69extern VexGuestLayout tilegxGuest_layout;
70
71/*---------------------------------------------------------*/
72/*--- tilegx guest helpers                              ---*/
73/*---------------------------------------------------------*/
74
75extern ULong tilegx_dirtyhelper_gen ( ULong opc,
76                                      ULong rd0,
77                                      ULong rd1,
78                                      ULong rd2,
79                                      ULong rd3 );
80
81/*---------------------------------------------------------*/
82/*--- Condition code stuff                              ---*/
83/*---------------------------------------------------------*/
84
85/* Defines conditions which we can ask for TILEGX */
86
87typedef enum {
88  TILEGXCondEQ = 0,      /* equal                         : Z=1 */
89  TILEGXCondNE = 1,      /* not equal                     : Z=0 */
90  TILEGXCondHS = 2,      /* >=u (higher or same)          : C=1 */
91  TILEGXCondLO = 3,      /* <u  (lower)                   : C=0 */
92  TILEGXCondMI = 4,      /* minus (negative)              : N=1 */
93  TILEGXCondPL = 5,      /* plus (zero or +ve)            : N=0 */
94  TILEGXCondVS = 6,      /* overflow                      : V=1 */
95  TILEGXCondVC = 7,      /* no overflow                   : V=0 */
96  TILEGXCondHI = 8,      /* >u   (higher)                 : C=1 && Z=0 */
97  TILEGXCondLS = 9,      /* <=u  (lower or same)          : C=0 || Z=1 */
98  TILEGXCondGE = 10,     /* >=s (signed greater or equal) : N=V */
99  TILEGXCondLT = 11,     /* <s  (signed less than)        : N!=V */
100  TILEGXCondGT = 12,     /* >s  (signed greater)          : Z=0 && N=V */
101  TILEGXCondLE = 13,     /* <=s (signed less or equal)    : Z=1 || N!=V */
102  TILEGXCondAL = 14,     /* always (unconditional)        : 1 */
103  TILEGXCondNV = 15      /* never (unconditional):        : 0 */
104} TILEGXCondcode;
105
106#endif            /* __VEX_GUEST_TILEGX_DEFS_H */
107
108/*---------------------------------------------------------------*/
109/*--- end                                 guest_tilegx_defs.h ---*/
110/*---------------------------------------------------------------*/
111