1
2/*---------------------------------------------------------------*/
3/*--- begin                             libvex_guest_tilegx.h ---*/
4/*---------------------------------------------------------------*/
5
6/*
7  This file is part of Valgrind, a dynamic binary instrumentation
8  framework.
9
10  Copyright (C) 2010-2015 Tilera Corp.
11
12  This program is free software; you can redistribute it and/or
13  modify it under the terms of the GNU General Public License as
14  published by the Free Software Foundation; either version 2 of the
15  License, or (at your option) any later version.
16
17  This program is distributed in the hope that it will be useful, but
18  WITHOUT ANY WARRANTY; without even the implied warranty of
19  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
20  General Public License for more details.
21
22  You should have received a copy of the GNU General Public License
23  along with this program; if not, write to the Free Software
24  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
25  02111-1307, USA.
26
27  The GNU General Public License is contained in the file COPYING.
28*/
29
30/* Contributed by Zhi-Gang Liu <zliu at tilera dot com> */
31
32#ifndef __LIBVEX_PUB_GUEST_TILEGX_H
33#define __LIBVEX_PUB_GUEST_TILEGX_H
34
35#include "libvex_basictypes.h"
36#include "libvex_emnote.h"
37
38#undef   TILEGX_DEBUG
39
40/*---------------------------------------------------------------*/
41/*--- Vex's representation of the tilegx CPU state.           ---*/
42/*---------------------------------------------------------------*/
43
44typedef ULong ULONG;
45
46typedef
47struct {
48  /* CPU Registers */
49  /*   0   */ ULONG guest_r0;
50  /*   8   */ ULONG guest_r1;
51  /*   16  */ ULONG guest_r2;
52  /*   24  */ ULONG guest_r3;
53  /*   32  */ ULONG guest_r4;
54  /*   40  */ ULONG guest_r5;
55  /*   48  */ ULONG guest_r6;
56  /*   56  */ ULONG guest_r7;
57  /*   64  */ ULONG guest_r8;
58  /*   72  */ ULONG guest_r9;
59  /*   80  */ ULONG guest_r10;
60  /*   88  */ ULONG guest_r11;
61  /*   96  */ ULONG guest_r12;
62  /*   104 */ ULONG guest_r13;
63  /*   112 */ ULONG guest_r14;
64  /*   120 */ ULONG guest_r15;
65  /*   128 */ ULONG guest_r16;
66  /*   136 */ ULONG guest_r17;
67  /*   144 */ ULONG guest_r18;
68  /*   152 */ ULONG guest_r19;
69  /*   160 */ ULONG guest_r20;
70  /*   168 */ ULONG guest_r21;
71  /*   176 */ ULONG guest_r22;
72  /*   184 */ ULONG guest_r23;
73  /*   192 */ ULONG guest_r24;
74  /*   200 */ ULONG guest_r25;
75  /*   208 */ ULONG guest_r26;
76  /*   216 */ ULONG guest_r27;
77  /*   224 */ ULONG guest_r28;
78  /*   232 */ ULONG guest_r29;
79  /*   240 */ ULONG guest_r30;
80  /*   248 */ ULONG guest_r31;
81  /*   256 */ ULONG guest_r32;
82  /*   264 */ ULONG guest_r33;
83  /*   272 */ ULONG guest_r34;
84  /*   280 */ ULONG guest_r35;
85  /*   288 */ ULONG guest_r36;
86  /*   296 */ ULONG guest_r37;
87  /*   304 */ ULONG guest_r38;
88  /*   312 */ ULONG guest_r39;
89  /*   320 */ ULONG guest_r40;
90  /*   328 */ ULONG guest_r41;
91  /*   336 */ ULONG guest_r42;
92  /*   344 */ ULONG guest_r43;
93  /*   352 */ ULONG guest_r44;
94  /*   360 */ ULONG guest_r45;
95  /*   368 */ ULONG guest_r46;
96  /*   376 */ ULONG guest_r47;
97  /*   384 */ ULONG guest_r48;
98  /*   392 */ ULONG guest_r49;
99  /*   400 */ ULONG guest_r50;
100  /*   408 */ ULONG guest_r51;
101  /*   416 */ ULONG guest_r52; /* FP */
102  /*   424 */ ULONG guest_r53;
103  /*   432 */ ULONG guest_r54; /* SP */
104  /*   440 */ ULONG guest_r55; /* LR */
105  /*   448 */ ULONG guest_r56; /* zero */
106  /*   456 */ ULONG guest_r57; /* Reserved */
107  /*   464 */ ULONG guest_r58; /* Reserved */
108  /*   472 */ ULONG guest_r59; /* Reserved */
109  /*   480 */ ULONG guest_r60; /* Reserved */
110  /*   488 */ ULONG guest_r61; /* Reserved */
111  /*   496 */ ULONG guest_r62; /* Reserved */
112  /*   504 */ ULONG guest_r63; /* Reserved */
113  /*   512 */ ULONG guest_pc;
114  /*   520 */ ULONG guest_spare; /* Reserved */
115  /*   528 */ ULONG guest_EMNOTE;
116  /*   536 */ ULONG guest_CMSTART;
117  /*   544 */ ULONG guest_CMLEN;
118  /*   552 */ ULONG guest_NRADDR;
119  /*   560 */ ULong guest_cmpexch;
120  /*   568 */ ULong guest_zero;
121  /*   576 */ ULong guest_ex_context_0;
122  /*   584 */ ULong guest_ex_context_1;
123  /*   592 */ ULong host_EvC_FAILADDR;
124  /*   600 */ ULong host_EvC_COUNTER;
125  /*   608 */ ULong guest_COND;
126  /*   616 */ ULong PAD;
127
128} VexGuestTILEGXState;
129
130#define OFFSET_tilegx_r(_N)  (8 * (_N))
131
132/*---------------------------------------------------------------*/
133/*--- Utility functions for TILEGX guest stuff.               ---*/
134/*---------------------------------------------------------------*/
135
136/* ALL THE FOLLOWING ARE VISIBLE TO LIBRARY CLIENT */
137
138/* Initialise all guest TILEGX state. */
139
140extern
141void LibVEX_GuestTILEGX_initialise ( /*OUT*/VexGuestTILEGXState* vex_state );
142
143
144#endif /* __LIBVEX_PUB_GUEST_TILEGX_H */
145
146
147/*---------------------------------------------------------------*/
148/*---                                   libvex_guest_tilegx.h ---*/
149/*---------------------------------------------------------------*/
150