10de80192f57cd132b31b233c65734de04939ce65sewardj
20de80192f57cd132b31b233c65734de04939ce65sewardj/*---------------------------------------------------------------*/
30de80192f57cd132b31b233c65734de04939ce65sewardj/*--- begin                             libvex_guest_tilegx.h ---*/
40de80192f57cd132b31b233c65734de04939ce65sewardj/*---------------------------------------------------------------*/
50de80192f57cd132b31b233c65734de04939ce65sewardj
60de80192f57cd132b31b233c65734de04939ce65sewardj/*
70de80192f57cd132b31b233c65734de04939ce65sewardj  This file is part of Valgrind, a dynamic binary instrumentation
80de80192f57cd132b31b233c65734de04939ce65sewardj  framework.
90de80192f57cd132b31b233c65734de04939ce65sewardj
10785952d4bf502fa756b2ac58595fd31fe0f88559sewardj  Copyright (C) 2010-2015 Tilera Corp.
110de80192f57cd132b31b233c65734de04939ce65sewardj
120de80192f57cd132b31b233c65734de04939ce65sewardj  This program is free software; you can redistribute it and/or
130de80192f57cd132b31b233c65734de04939ce65sewardj  modify it under the terms of the GNU General Public License as
140de80192f57cd132b31b233c65734de04939ce65sewardj  published by the Free Software Foundation; either version 2 of the
150de80192f57cd132b31b233c65734de04939ce65sewardj  License, or (at your option) any later version.
160de80192f57cd132b31b233c65734de04939ce65sewardj
170de80192f57cd132b31b233c65734de04939ce65sewardj  This program is distributed in the hope that it will be useful, but
180de80192f57cd132b31b233c65734de04939ce65sewardj  WITHOUT ANY WARRANTY; without even the implied warranty of
190de80192f57cd132b31b233c65734de04939ce65sewardj  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
200de80192f57cd132b31b233c65734de04939ce65sewardj  General Public License for more details.
210de80192f57cd132b31b233c65734de04939ce65sewardj
220de80192f57cd132b31b233c65734de04939ce65sewardj  You should have received a copy of the GNU General Public License
230de80192f57cd132b31b233c65734de04939ce65sewardj  along with this program; if not, write to the Free Software
240de80192f57cd132b31b233c65734de04939ce65sewardj  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
250de80192f57cd132b31b233c65734de04939ce65sewardj  02111-1307, USA.
260de80192f57cd132b31b233c65734de04939ce65sewardj
270de80192f57cd132b31b233c65734de04939ce65sewardj  The GNU General Public License is contained in the file COPYING.
280de80192f57cd132b31b233c65734de04939ce65sewardj*/
290de80192f57cd132b31b233c65734de04939ce65sewardj
300de80192f57cd132b31b233c65734de04939ce65sewardj/* Contributed by Zhi-Gang Liu <zliu at tilera dot com> */
310de80192f57cd132b31b233c65734de04939ce65sewardj
320de80192f57cd132b31b233c65734de04939ce65sewardj#ifndef __LIBVEX_PUB_GUEST_TILEGX_H
330de80192f57cd132b31b233c65734de04939ce65sewardj#define __LIBVEX_PUB_GUEST_TILEGX_H
340de80192f57cd132b31b233c65734de04939ce65sewardj
350de80192f57cd132b31b233c65734de04939ce65sewardj#include "libvex_basictypes.h"
360de80192f57cd132b31b233c65734de04939ce65sewardj#include "libvex_emnote.h"
370de80192f57cd132b31b233c65734de04939ce65sewardj
380de80192f57cd132b31b233c65734de04939ce65sewardj#undef   TILEGX_DEBUG
390de80192f57cd132b31b233c65734de04939ce65sewardj
400de80192f57cd132b31b233c65734de04939ce65sewardj/*---------------------------------------------------------------*/
410de80192f57cd132b31b233c65734de04939ce65sewardj/*--- Vex's representation of the tilegx CPU state.           ---*/
420de80192f57cd132b31b233c65734de04939ce65sewardj/*---------------------------------------------------------------*/
430de80192f57cd132b31b233c65734de04939ce65sewardj
440de80192f57cd132b31b233c65734de04939ce65sewardjtypedef ULong ULONG;
450de80192f57cd132b31b233c65734de04939ce65sewardj
460de80192f57cd132b31b233c65734de04939ce65sewardjtypedef
470de80192f57cd132b31b233c65734de04939ce65sewardjstruct {
480de80192f57cd132b31b233c65734de04939ce65sewardj  /* CPU Registers */
490de80192f57cd132b31b233c65734de04939ce65sewardj  /*   0   */ ULONG guest_r0;
500de80192f57cd132b31b233c65734de04939ce65sewardj  /*   8   */ ULONG guest_r1;
510de80192f57cd132b31b233c65734de04939ce65sewardj  /*   16  */ ULONG guest_r2;
520de80192f57cd132b31b233c65734de04939ce65sewardj  /*   24  */ ULONG guest_r3;
530de80192f57cd132b31b233c65734de04939ce65sewardj  /*   32  */ ULONG guest_r4;
540de80192f57cd132b31b233c65734de04939ce65sewardj  /*   40  */ ULONG guest_r5;
550de80192f57cd132b31b233c65734de04939ce65sewardj  /*   48  */ ULONG guest_r6;
560de80192f57cd132b31b233c65734de04939ce65sewardj  /*   56  */ ULONG guest_r7;
570de80192f57cd132b31b233c65734de04939ce65sewardj  /*   64  */ ULONG guest_r8;
580de80192f57cd132b31b233c65734de04939ce65sewardj  /*   72  */ ULONG guest_r9;
590de80192f57cd132b31b233c65734de04939ce65sewardj  /*   80  */ ULONG guest_r10;
600de80192f57cd132b31b233c65734de04939ce65sewardj  /*   88  */ ULONG guest_r11;
610de80192f57cd132b31b233c65734de04939ce65sewardj  /*   96  */ ULONG guest_r12;
620de80192f57cd132b31b233c65734de04939ce65sewardj  /*   104 */ ULONG guest_r13;
630de80192f57cd132b31b233c65734de04939ce65sewardj  /*   112 */ ULONG guest_r14;
640de80192f57cd132b31b233c65734de04939ce65sewardj  /*   120 */ ULONG guest_r15;
650de80192f57cd132b31b233c65734de04939ce65sewardj  /*   128 */ ULONG guest_r16;
660de80192f57cd132b31b233c65734de04939ce65sewardj  /*   136 */ ULONG guest_r17;
670de80192f57cd132b31b233c65734de04939ce65sewardj  /*   144 */ ULONG guest_r18;
680de80192f57cd132b31b233c65734de04939ce65sewardj  /*   152 */ ULONG guest_r19;
690de80192f57cd132b31b233c65734de04939ce65sewardj  /*   160 */ ULONG guest_r20;
700de80192f57cd132b31b233c65734de04939ce65sewardj  /*   168 */ ULONG guest_r21;
710de80192f57cd132b31b233c65734de04939ce65sewardj  /*   176 */ ULONG guest_r22;
720de80192f57cd132b31b233c65734de04939ce65sewardj  /*   184 */ ULONG guest_r23;
730de80192f57cd132b31b233c65734de04939ce65sewardj  /*   192 */ ULONG guest_r24;
740de80192f57cd132b31b233c65734de04939ce65sewardj  /*   200 */ ULONG guest_r25;
750de80192f57cd132b31b233c65734de04939ce65sewardj  /*   208 */ ULONG guest_r26;
760de80192f57cd132b31b233c65734de04939ce65sewardj  /*   216 */ ULONG guest_r27;
770de80192f57cd132b31b233c65734de04939ce65sewardj  /*   224 */ ULONG guest_r28;
780de80192f57cd132b31b233c65734de04939ce65sewardj  /*   232 */ ULONG guest_r29;
790de80192f57cd132b31b233c65734de04939ce65sewardj  /*   240 */ ULONG guest_r30;
800de80192f57cd132b31b233c65734de04939ce65sewardj  /*   248 */ ULONG guest_r31;
810de80192f57cd132b31b233c65734de04939ce65sewardj  /*   256 */ ULONG guest_r32;
820de80192f57cd132b31b233c65734de04939ce65sewardj  /*   264 */ ULONG guest_r33;
830de80192f57cd132b31b233c65734de04939ce65sewardj  /*   272 */ ULONG guest_r34;
840de80192f57cd132b31b233c65734de04939ce65sewardj  /*   280 */ ULONG guest_r35;
850de80192f57cd132b31b233c65734de04939ce65sewardj  /*   288 */ ULONG guest_r36;
860de80192f57cd132b31b233c65734de04939ce65sewardj  /*   296 */ ULONG guest_r37;
870de80192f57cd132b31b233c65734de04939ce65sewardj  /*   304 */ ULONG guest_r38;
880de80192f57cd132b31b233c65734de04939ce65sewardj  /*   312 */ ULONG guest_r39;
890de80192f57cd132b31b233c65734de04939ce65sewardj  /*   320 */ ULONG guest_r40;
900de80192f57cd132b31b233c65734de04939ce65sewardj  /*   328 */ ULONG guest_r41;
910de80192f57cd132b31b233c65734de04939ce65sewardj  /*   336 */ ULONG guest_r42;
920de80192f57cd132b31b233c65734de04939ce65sewardj  /*   344 */ ULONG guest_r43;
930de80192f57cd132b31b233c65734de04939ce65sewardj  /*   352 */ ULONG guest_r44;
940de80192f57cd132b31b233c65734de04939ce65sewardj  /*   360 */ ULONG guest_r45;
950de80192f57cd132b31b233c65734de04939ce65sewardj  /*   368 */ ULONG guest_r46;
960de80192f57cd132b31b233c65734de04939ce65sewardj  /*   376 */ ULONG guest_r47;
970de80192f57cd132b31b233c65734de04939ce65sewardj  /*   384 */ ULONG guest_r48;
980de80192f57cd132b31b233c65734de04939ce65sewardj  /*   392 */ ULONG guest_r49;
990de80192f57cd132b31b233c65734de04939ce65sewardj  /*   400 */ ULONG guest_r50;
1000de80192f57cd132b31b233c65734de04939ce65sewardj  /*   408 */ ULONG guest_r51;
1010de80192f57cd132b31b233c65734de04939ce65sewardj  /*   416 */ ULONG guest_r52; /* FP */
1020de80192f57cd132b31b233c65734de04939ce65sewardj  /*   424 */ ULONG guest_r53;
1030de80192f57cd132b31b233c65734de04939ce65sewardj  /*   432 */ ULONG guest_r54; /* SP */
1040de80192f57cd132b31b233c65734de04939ce65sewardj  /*   440 */ ULONG guest_r55; /* LR */
1050de80192f57cd132b31b233c65734de04939ce65sewardj  /*   448 */ ULONG guest_r56; /* zero */
1060de80192f57cd132b31b233c65734de04939ce65sewardj  /*   456 */ ULONG guest_r57; /* Reserved */
1070de80192f57cd132b31b233c65734de04939ce65sewardj  /*   464 */ ULONG guest_r58; /* Reserved */
1080de80192f57cd132b31b233c65734de04939ce65sewardj  /*   472 */ ULONG guest_r59; /* Reserved */
1090de80192f57cd132b31b233c65734de04939ce65sewardj  /*   480 */ ULONG guest_r60; /* Reserved */
1100de80192f57cd132b31b233c65734de04939ce65sewardj  /*   488 */ ULONG guest_r61; /* Reserved */
1110de80192f57cd132b31b233c65734de04939ce65sewardj  /*   496 */ ULONG guest_r62; /* Reserved */
1120de80192f57cd132b31b233c65734de04939ce65sewardj  /*   504 */ ULONG guest_r63; /* Reserved */
1130de80192f57cd132b31b233c65734de04939ce65sewardj  /*   512 */ ULONG guest_pc;
1140de80192f57cd132b31b233c65734de04939ce65sewardj  /*   520 */ ULONG guest_spare; /* Reserved */
1150de80192f57cd132b31b233c65734de04939ce65sewardj  /*   528 */ ULONG guest_EMNOTE;
1160de80192f57cd132b31b233c65734de04939ce65sewardj  /*   536 */ ULONG guest_CMSTART;
1170de80192f57cd132b31b233c65734de04939ce65sewardj  /*   544 */ ULONG guest_CMLEN;
1180de80192f57cd132b31b233c65734de04939ce65sewardj  /*   552 */ ULONG guest_NRADDR;
1190de80192f57cd132b31b233c65734de04939ce65sewardj  /*   560 */ ULong guest_cmpexch;
1200de80192f57cd132b31b233c65734de04939ce65sewardj  /*   568 */ ULong guest_zero;
1210de80192f57cd132b31b233c65734de04939ce65sewardj  /*   576 */ ULong guest_ex_context_0;
1220de80192f57cd132b31b233c65734de04939ce65sewardj  /*   584 */ ULong guest_ex_context_1;
1230de80192f57cd132b31b233c65734de04939ce65sewardj  /*   592 */ ULong host_EvC_FAILADDR;
1240de80192f57cd132b31b233c65734de04939ce65sewardj  /*   600 */ ULong host_EvC_COUNTER;
1250de80192f57cd132b31b233c65734de04939ce65sewardj  /*   608 */ ULong guest_COND;
1260de80192f57cd132b31b233c65734de04939ce65sewardj  /*   616 */ ULong PAD;
1270de80192f57cd132b31b233c65734de04939ce65sewardj
1280de80192f57cd132b31b233c65734de04939ce65sewardj} VexGuestTILEGXState;
1290de80192f57cd132b31b233c65734de04939ce65sewardj
1300de80192f57cd132b31b233c65734de04939ce65sewardj#define OFFSET_tilegx_r(_N)  (8 * (_N))
1310de80192f57cd132b31b233c65734de04939ce65sewardj
1320de80192f57cd132b31b233c65734de04939ce65sewardj/*---------------------------------------------------------------*/
1330de80192f57cd132b31b233c65734de04939ce65sewardj/*--- Utility functions for TILEGX guest stuff.               ---*/
1340de80192f57cd132b31b233c65734de04939ce65sewardj/*---------------------------------------------------------------*/
1350de80192f57cd132b31b233c65734de04939ce65sewardj
1360de80192f57cd132b31b233c65734de04939ce65sewardj/* ALL THE FOLLOWING ARE VISIBLE TO LIBRARY CLIENT */
1370de80192f57cd132b31b233c65734de04939ce65sewardj
1380de80192f57cd132b31b233c65734de04939ce65sewardj/* Initialise all guest TILEGX state. */
1390de80192f57cd132b31b233c65734de04939ce65sewardj
1400de80192f57cd132b31b233c65734de04939ce65sewardjextern
1410de80192f57cd132b31b233c65734de04939ce65sewardjvoid LibVEX_GuestTILEGX_initialise ( /*OUT*/VexGuestTILEGXState* vex_state );
1420de80192f57cd132b31b233c65734de04939ce65sewardj
1430de80192f57cd132b31b233c65734de04939ce65sewardj
1440de80192f57cd132b31b233c65734de04939ce65sewardj#endif /* __LIBVEX_PUB_GUEST_TILEGX_H */
1450de80192f57cd132b31b233c65734de04939ce65sewardj
1460de80192f57cd132b31b233c65734de04939ce65sewardj
1470de80192f57cd132b31b233c65734de04939ce65sewardj/*---------------------------------------------------------------*/
1480de80192f57cd132b31b233c65734de04939ce65sewardj/*---                                   libvex_guest_tilegx.h ---*/
1490de80192f57cd132b31b233c65734de04939ce65sewardj/*---------------------------------------------------------------*/
150