blob: a49c646d522931342e610027d2252b7de094cd83 [file] [log] [blame]
/*---------------------------------------------------------------*/
/*--- begin libvex_guest_mips32.h ---*/
/*---------------------------------------------------------------*/
/*
This file is part of Valgrind, a dynamic binary instrumentation
framework.
Copyright (C) 2010-2013 RT-RK
mips-valgrind@rt-rk.com
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., 59 Temple Place, Suite 330, Boston, MA
02111-1307, USA.
The GNU General Public License is contained in the file COPYING.
*/
#ifndef __LIBVEX_PUB_GUEST_MIPS32_H
#define __LIBVEX_PUB_GUEST_MIPS32_H
#include "libvex_basictypes.h"
/*---------------------------------------------------------------*/
/*--- Vex's representation of the MIPS32 CPU state. ---*/
/*---------------------------------------------------------------*/
typedef
struct {
/* CPU Registers */
/* 0 */ UInt guest_r0; /* Hardwired to 0 */
/* 4 */ UInt guest_r1; /* Assembler temporary */
/* 8 */ UInt guest_r2; /* Values for function returns ...*/
/* 12 */ UInt guest_r3; /* ...and expression evaluation */
/* 16 */ UInt guest_r4; /* Function arguments */
/* 20 */ UInt guest_r5;
/* 24 */ UInt guest_r6;
/* 28 */ UInt guest_r7;
/* 32 */ UInt guest_r8; /* Temporaries */
/* 36 */ UInt guest_r9;
/* 40 */ UInt guest_r10;
/* 44 */ UInt guest_r11;
/* 48 */ UInt guest_r12;
/* 52 */ UInt guest_r13;
/* 56 */ UInt guest_r14;
/* 60 */ UInt guest_r15;
/* 64 */ UInt guest_r16; /* Saved temporaries */
/* 68 */ UInt guest_r17;
/* 72 */ UInt guest_r18;
/* 76 */ UInt guest_r19;
/* 80 */ UInt guest_r20;
/* 84 */ UInt guest_r21;
/* 88 */ UInt guest_r22;
/* 92 */ UInt guest_r23;
/* 96 */ UInt guest_r24; /* Temporaries */
/* 100 */ UInt guest_r25;
/* 104 */ UInt guest_r26; /* Reserved for OS kernel */
/* 108 */ UInt guest_r27;
/* 112 */ UInt guest_r28; /* Global pointer */
/* 116 */ UInt guest_r29; /* Stack pointer */
/* 120 */ UInt guest_r30; /* Frame pointer */
/* 124 */ UInt guest_r31; /* Return address */
/* 128 */ UInt guest_PC; /* Program counter */
/* 132 */ UInt guest_HI;/* Multiply and divide register higher result */
/* 136 */ UInt guest_LO;/* Multiply and divide register lower result */
/* FPU Registers */
/* 140 */ UInt guest_f0; /* Floting point general purpose registers */
/* 144 */ UInt guest_f1;
/* 148 */ UInt guest_f2;
/* 152 */ UInt guest_f3;
/* 156 */ UInt guest_f4;
/* 160 */ UInt guest_f5;
/* 164 */ UInt guest_f6;
/* 168 */ UInt guest_f7;
/* 172 */ UInt guest_f8;
/* 176 */ UInt guest_f9;
/* 180 */ UInt guest_f10;
/* 184 */ UInt guest_f11;
/* 188 */ UInt guest_f12;
/* 192 */ UInt guest_f13;
/* 196 */ UInt guest_f14;
/* 200 */ UInt guest_f15;
/* 204 */ UInt guest_f16;
/* 208 */ UInt guest_f17;
/* 212 */ UInt guest_f18;
/* 216 */ UInt guest_f19;
/* 220 */ UInt guest_f20;
/* 224 */ UInt guest_f21;
/* 228 */ UInt guest_f22;
/* 232 */ UInt guest_f23;
/* 236 */ UInt guest_f24;
/* 240 */ UInt guest_f25;
/* 244 */ UInt guest_f26;
/* 248 */ UInt guest_f27;
/* 252 */ UInt guest_f28;
/* 256 */ UInt guest_f29;
/* 260 */ UInt guest_f30;
/* 264 */ UInt guest_f31;
/* 268 */ UInt guest_FIR;
/* 272 */ UInt guest_FCCR;
/* 276 */ UInt guest_FEXR;
/* 280 */ UInt guest_FENR;
/* 284 */ UInt guest_FCSR;
/* TLS pointer for the thread. It's read-only in user space.
On Linux it is set in user space by various thread-related
syscalls.
User Local Register.
This register provides read access to the coprocessor 0
UserLocal register, if it is implemented. In some operating
environments, the UserLocal register is a pointer to a
thread-specific storage block.
*/
/* 288 */ UInt guest_ULR;
/* Emulation notes */
UInt guest_EMNOTE; /* 292 */
/* For clflush: record start and length of area to invalidate */
UInt guest_TISTART; /* 296 */
UInt guest_TILEN; /* 300 */
UInt guest_NRADDR; /* 304 */
UInt host_EvC_FAILADDR; /* 308 */
UInt host_EvC_COUNTER; /* 312 */
UInt guest_COND; /* 316 */
UInt padding1;
/* MIPS32 DSP ASE(r2) specific registers. */
UInt guest_DSPControl; /* 324 */
ULong guest_ac0; /* 328 */
ULong guest_ac1; /* 336 */
ULong guest_ac2; /* 344 */
ULong guest_ac3; /* 352 */
UInt padding[6];
} VexGuestMIPS32State;
/*---------------------------------------------------------------*/
/*--- Utility functions for MIPS32 guest stuff. ---*/
/*---------------------------------------------------------------*/
/* ALL THE FOLLOWING ARE VISIBLE TO LIBRARY CLIENT */
/* Initialise all guest MIPS32 state. */
extern
void LibVEX_GuestMIPS32_initialise ( /*OUT*/VexGuestMIPS32State* vex_state );
#endif /* ndef __LIBVEX_PUB_GUEST_MIPS32_H */
/*---------------------------------------------------------------*/
/*--- libvex_guest_mips32.h ---*/
/*---------------------------------------------------------------*/