blob: 7d7f5c89bdac4fde25a289c91b3e5ebcd9068c84 [file] [log] [blame]
cerion896a1372005-01-25 12:24:25 +00001
2/*---------------------------------------------------------------*/
3/*--- ---*/
cerion1515db92005-01-25 17:21:23 +00004/*--- This file (libvex_guest_ppc32.h) is ---*/
cerion896a1372005-01-25 12:24:25 +00005/*--- Copyright (c) 2005 OpenWorks LLP. All rights reserved. ---*/
6/*--- ---*/
7/*---------------------------------------------------------------*/
8
9/*
10 This file is part of LibVEX, a library for dynamic binary
11 instrumentation and translation.
12
13 Copyright (C) 2005 OpenWorks, LLP.
14
15 This program is free software; you can redistribute it and/or modify
16 it under the terms of the GNU General Public License as published by
17 the Free Software Foundation; Version 2 dated June 1991 of the
18 license.
19
20 This program is distributed in the hope that it will be useful,
21 but WITHOUT ANY WARRANTY; without even the implied warranty of
22 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, or liability
23 for damages. See the GNU General Public License for more details.
24
25 Neither the names of the U.S. Department of Energy nor the
26 University of California nor the names of its contributors may be
27 used to endorse or promote products derived from this software
28 without prior written permission.
29
30 You should have received a copy of the GNU General Public License
31 along with this program; if not, write to the Free Software
32 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
33 USA.
34*/
35
cerion1515db92005-01-25 17:21:23 +000036#ifndef __LIBVEX_PUB_GUEST_PPC32_H
37#define __LIBVEX_PUB_GUEST_PPC32_H
cerion896a1372005-01-25 12:24:25 +000038
39#include "libvex_basictypes.h"
40#include "libvex_emwarn.h"
41
42
43/*---------------------------------------------------------------*/
cerion1515db92005-01-25 17:21:23 +000044/*--- Vex's representation of the PPC32 CPU state ---*/
cerion896a1372005-01-25 12:24:25 +000045/*---------------------------------------------------------------*/
46
47typedef
48 struct {
49 // General Purpose Registers
50 UInt guest_GPR0;
51 UInt guest_GPR1;
52 UInt guest_GPR2;
53 UInt guest_GPR3;
54 UInt guest_GPR4;
55 UInt guest_GPR5;
56 UInt guest_GPR6;
57 UInt guest_GPR7;
58 UInt guest_GPR8;
59 UInt guest_GPR9;
60 UInt guest_GPR10;
61 UInt guest_GPR11;
62 UInt guest_GPR12;
63 UInt guest_GPR13;
64 UInt guest_GPR14;
65 UInt guest_GPR15;
66 UInt guest_GPR16;
67 UInt guest_GPR17;
68 UInt guest_GPR18;
69 UInt guest_GPR19;
70 UInt guest_GPR20;
71 UInt guest_GPR21;
72 UInt guest_GPR22;
73 UInt guest_GPR23;
74 UInt guest_GPR24;
75 UInt guest_GPR25;
76 UInt guest_GPR26;
77 UInt guest_GPR27;
78 UInt guest_GPR28;
79 UInt guest_GPR29;
80 UInt guest_GPR30;
81 UInt guest_GPR31;
82
cerione77ce012005-01-25 16:56:18 +000083 UInt guest_CIA; // Current Instruction Address (no architecturally visible register)
cerionc19d5e12005-02-01 15:56:25 +000084 UInt guest_NIA; // Next Instruction Address (no architecturally visible register)
cerion896a1372005-01-25 12:24:25 +000085 UInt guest_LR; // Link Register
86 UInt guest_CTR; // Count Register
87
cerion91ad5362005-01-27 23:02:41 +000088 /* thunk used to calculate CR0 flags. */
89 UChar guest_CC_OP; // boolean: 0=> dep1=result 1=> dep1=flags
90 UInt guest_CC_DEP1; // Result of last op | flags
91 UInt guest_CC_DEP2; // XER_SO
cerion896a1372005-01-25 12:24:25 +000092
cerion7aa4bbc2005-01-29 09:32:07 +000093 // CR1:7: Used for 'compare' ops (bits 0:4 not used - thunk used for this)
94 UInt guest_CR1to7;
cerione77ce012005-01-25 16:56:18 +000095
96 /* XER */
97 UChar guest_XER_SO; // Summary Overflow
98 UChar guest_XER_OV; // Overflow
99 UChar guest_XER_CA; // Carry
cerionc19d5e12005-02-01 15:56:25 +0000100 UChar guest_XER_BC; // Byte Count
cerion896a1372005-01-25 12:24:25 +0000101
102 /* Emulation warnings */
103 UInt guest_EMWARN;
104
105 /* Padding to make it have an 8-aligned size */
cerion1515db92005-01-25 17:21:23 +0000106 UChar padding_1b1;
107 UChar padding_1b2;
108 UChar padding_1b3;
cerionc19d5e12005-02-01 15:56:25 +0000109// UInt padding_4b;
cerion896a1372005-01-25 12:24:25 +0000110 }
cerion1515db92005-01-25 17:21:23 +0000111 VexGuestPPC32State;
cerion896a1372005-01-25 12:24:25 +0000112
113
114/*---------------------------------------------------------------*/
cerion1515db92005-01-25 17:21:23 +0000115/*--- Utility functions for PPC32 guest stuff. ---*/
cerion896a1372005-01-25 12:24:25 +0000116/*---------------------------------------------------------------*/
117
118/* ALL THE FOLLOWING ARE VISIBLE TO LIBRARY CLIENT */
119
cerion1515db92005-01-25 17:21:23 +0000120/* Initialise all guest PPC32 state. */
cerion896a1372005-01-25 12:24:25 +0000121
122extern
cerion1515db92005-01-25 17:21:23 +0000123void LibVEX_GuestPPC32_initialise ( /*OUT*/VexGuestPPC32State* vex_state );
cerion896a1372005-01-25 12:24:25 +0000124
cerion1515db92005-01-25 17:21:23 +0000125/* Calculate the PPC32 flag state from the saved data. */
cerion896a1372005-01-25 12:24:25 +0000126
127extern
cerion1515db92005-01-25 17:21:23 +0000128UInt LibVEX_GuestPPC32_get_flags ( /*IN*/VexGuestPPC32State* vex_state );
cerion896a1372005-01-25 12:24:25 +0000129
130
cerion1515db92005-01-25 17:21:23 +0000131#endif /* ndef __LIBVEX_PUB_GUEST_PPC32_H */
cerion896a1372005-01-25 12:24:25 +0000132
133
134/*---------------------------------------------------------------*/
cerion1515db92005-01-25 17:21:23 +0000135/*--- libvex_guest_ppc32.h ---*/
cerion896a1372005-01-25 12:24:25 +0000136/*---------------------------------------------------------------*/