cerion | 896a137 | 2005-01-25 12:24:25 +0000 | [diff] [blame] | 1 | |
| 2 | /*---------------------------------------------------------------*/ |
| 3 | /*--- ---*/ |
cerion | 1515db9 | 2005-01-25 17:21:23 +0000 | [diff] [blame] | 4 | /*--- This file (libvex_guest_ppc32.h) is ---*/ |
cerion | 896a137 | 2005-01-25 12:24:25 +0000 | [diff] [blame] | 5 | /*--- 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 | |
cerion | 1515db9 | 2005-01-25 17:21:23 +0000 | [diff] [blame] | 36 | #ifndef __LIBVEX_PUB_GUEST_PPC32_H |
| 37 | #define __LIBVEX_PUB_GUEST_PPC32_H |
cerion | 896a137 | 2005-01-25 12:24:25 +0000 | [diff] [blame] | 38 | |
| 39 | #include "libvex_basictypes.h" |
| 40 | #include "libvex_emwarn.h" |
| 41 | |
| 42 | |
| 43 | /*---------------------------------------------------------------*/ |
cerion | 1515db9 | 2005-01-25 17:21:23 +0000 | [diff] [blame] | 44 | /*--- Vex's representation of the PPC32 CPU state ---*/ |
cerion | 896a137 | 2005-01-25 12:24:25 +0000 | [diff] [blame] | 45 | /*---------------------------------------------------------------*/ |
| 46 | |
| 47 | typedef |
| 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 | |
cerion | e77ce01 | 2005-01-25 16:56:18 +0000 | [diff] [blame] | 83 | UInt guest_CIA; // Current Instruction Address (no architecturally visible register) |
cerion | 896a137 | 2005-01-25 12:24:25 +0000 | [diff] [blame] | 84 | UInt guest_LR; // Link Register |
| 85 | UInt guest_CTR; // Count Register |
| 86 | |
cerion | e77ce01 | 2005-01-25 16:56:18 +0000 | [diff] [blame] | 87 | /* CR0: Use last result for delayed calc of CR0[0,1,2] (neg,pos,zero) |
| 88 | (bit3 is just a redundant copy of XER_SO) */ |
cerion | 896a137 | 2005-01-25 12:24:25 +0000 | [diff] [blame] | 89 | UInt guest_Result; // Result of last op |
| 90 | |
cerion | e77ce01 | 2005-01-25 16:56:18 +0000 | [diff] [blame] | 91 | // CR1: Used for FP - don't need yet. |
| 92 | // CR2:7: Used for 'compare' instructions |
| 93 | UChar guest_CR2; |
| 94 | UChar guest_CR3; |
| 95 | UChar guest_CR4; |
| 96 | UChar guest_CR5; |
| 97 | UChar guest_CR6; |
| 98 | UChar guest_CR7; |
| 99 | |
| 100 | /* XER */ |
| 101 | UChar guest_XER_SO; // Summary Overflow |
| 102 | UChar guest_XER_OV; // Overflow |
| 103 | UChar guest_XER_CA; // Carry |
| 104 | // UChar guest_XER_ByteCount; |
cerion | 896a137 | 2005-01-25 12:24:25 +0000 | [diff] [blame] | 105 | |
| 106 | /* Emulation warnings */ |
| 107 | UInt guest_EMWARN; |
| 108 | |
| 109 | /* Padding to make it have an 8-aligned size */ |
cerion | 1515db9 | 2005-01-25 17:21:23 +0000 | [diff] [blame] | 110 | UChar padding_1b1; |
| 111 | UChar padding_1b2; |
| 112 | UChar padding_1b3; |
cerion | 896a137 | 2005-01-25 12:24:25 +0000 | [diff] [blame] | 113 | UInt padding_4b; |
| 114 | } |
cerion | 1515db9 | 2005-01-25 17:21:23 +0000 | [diff] [blame] | 115 | VexGuestPPC32State; |
cerion | 896a137 | 2005-01-25 12:24:25 +0000 | [diff] [blame] | 116 | |
| 117 | |
| 118 | /*---------------------------------------------------------------*/ |
cerion | 1515db9 | 2005-01-25 17:21:23 +0000 | [diff] [blame] | 119 | /*--- Utility functions for PPC32 guest stuff. ---*/ |
cerion | 896a137 | 2005-01-25 12:24:25 +0000 | [diff] [blame] | 120 | /*---------------------------------------------------------------*/ |
| 121 | |
| 122 | /* ALL THE FOLLOWING ARE VISIBLE TO LIBRARY CLIENT */ |
| 123 | |
cerion | 1515db9 | 2005-01-25 17:21:23 +0000 | [diff] [blame] | 124 | /* Initialise all guest PPC32 state. */ |
cerion | 896a137 | 2005-01-25 12:24:25 +0000 | [diff] [blame] | 125 | |
| 126 | extern |
cerion | 1515db9 | 2005-01-25 17:21:23 +0000 | [diff] [blame] | 127 | void LibVEX_GuestPPC32_initialise ( /*OUT*/VexGuestPPC32State* vex_state ); |
cerion | 896a137 | 2005-01-25 12:24:25 +0000 | [diff] [blame] | 128 | |
cerion | 1515db9 | 2005-01-25 17:21:23 +0000 | [diff] [blame] | 129 | /* Calculate the PPC32 flag state from the saved data. */ |
cerion | 896a137 | 2005-01-25 12:24:25 +0000 | [diff] [blame] | 130 | |
| 131 | extern |
cerion | 1515db9 | 2005-01-25 17:21:23 +0000 | [diff] [blame] | 132 | UInt LibVEX_GuestPPC32_get_flags ( /*IN*/VexGuestPPC32State* vex_state ); |
cerion | 896a137 | 2005-01-25 12:24:25 +0000 | [diff] [blame] | 133 | |
| 134 | |
cerion | 1515db9 | 2005-01-25 17:21:23 +0000 | [diff] [blame] | 135 | #endif /* ndef __LIBVEX_PUB_GUEST_PPC32_H */ |
cerion | 896a137 | 2005-01-25 12:24:25 +0000 | [diff] [blame] | 136 | |
| 137 | |
| 138 | /*---------------------------------------------------------------*/ |
cerion | 1515db9 | 2005-01-25 17:21:23 +0000 | [diff] [blame] | 139 | /*--- libvex_guest_ppc32.h ---*/ |
cerion | 896a137 | 2005-01-25 12:24:25 +0000 | [diff] [blame] | 140 | /*---------------------------------------------------------------*/ |