guest_ppc_helpers.c revision ed07e00d438c74b7a23c01bfffde77e3968305e4
1ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*---------------------------------------------------------------*/
3ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*--- begin                               guest_ppc_helpers.c ---*/
4ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*---------------------------------------------------------------*/
5ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
6ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*
7ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   This file is part of Valgrind, a dynamic binary instrumentation
8ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   framework.
9ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
10ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Copyright (C) 2004-2010 OpenWorks LLP
11ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      info@open-works.net
12ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
13ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   This program is free software; you can redistribute it and/or
14ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   modify it under the terms of the GNU General Public License as
15ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   published by the Free Software Foundation; either version 2 of the
16ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   License, or (at your option) any later version.
17ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
18ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   This program is distributed in the hope that it will be useful, but
19ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   WITHOUT ANY WARRANTY; without even the implied warranty of
20ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
21ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   General Public License for more details.
22ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
23ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   You should have received a copy of the GNU General Public License
24ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   along with this program; if not, write to the Free Software
25ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
26ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   02110-1301, USA.
27ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
28ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   The GNU General Public License is contained in the file COPYING.
29ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
30ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Neither the names of the U.S. Department of Energy nor the
31ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   University of California nor the names of its contributors may be
32ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   used to endorse or promote products derived from this software
33ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   without prior written permission.
34ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown*/
35ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
36ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "libvex_basictypes.h"
37ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "libvex_emwarn.h"
38ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "libvex_guest_ppc32.h"
39ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "libvex_guest_ppc64.h"
40ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "libvex_ir.h"
41ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "libvex.h"
42ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
43ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "main_util.h"
44ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "guest_generic_bb_to_IR.h"
45ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "guest_ppc_defs.h"
46ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
47ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
48ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* This file contains helper functions for ppc32 and ppc64 guest code.
49ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Calls to these functions are generated by the back end.  These
50ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   calls are of course in the host machine code and this file will be
51ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   compiled to host machine code, so that all makes sense.
52ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
53ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Only change the signatures of these helper functions very
54ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   carefully.  If you change the signature here, you'll have to change
55ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   the parameters passed to it in the IR calls constructed by
56ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   guest-ppc/toIR.c.
57ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown*/
58ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
59ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
60ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*---------------------------------------------------------------*/
61ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*--- Misc integer helpers.                                   ---*/
62ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*---------------------------------------------------------------*/
63ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
64ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* CALLED FROM GENERATED CODE */
65ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* DIRTY HELPER (non-referentially-transparent) */
66ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* Horrible hack.  On non-ppc platforms, return 1. */
67ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* Reads a complete, consistent 64-bit TB value. */
68ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownULong ppcg_dirtyhelper_MFTB ( void )
69ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
70ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#  if defined(__powerpc__) || defined(_AIX)
71ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   ULong res;
72ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   UInt  lo, hi1, hi2;
73ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   while (1) {
74ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      __asm__ __volatile__ ("\n"
75ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         "\tmftbu %0\n"
76ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         "\tmftb %1\n"
77ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         "\tmftbu %2\n"
78ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         : "=r" (hi1), "=r" (lo), "=r" (hi2)
79ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      );
80ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (hi1 == hi2) break;
81ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
82ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   res = ((ULong)hi1) << 32;
83ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   res |= (ULong)lo;
84ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   return res;
85ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#  else
86ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   return 1ULL;
87ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#  endif
88ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
89ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
90ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
91ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* CALLED FROM GENERATED CODE */
92ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* DIRTY HELPER (non-referentially transparent) */
93ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownUInt ppc32g_dirtyhelper_MFSPR_268_269 ( UInt r269 )
94ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
95ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#  if defined(__powerpc__) || defined(_AIX)
96ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   UInt spr;
97ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (r269) {
98ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      __asm__ __volatile__("mfspr %0,269" : "=b"(spr));
99ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   } else {
100ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      __asm__ __volatile__("mfspr %0,268" : "=b"(spr));
101ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
102ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   return spr;
103ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#  else
104ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   return 0;
105ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#  endif
106ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
107ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
108ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
109ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* CALLED FROM GENERATED CODE */
110ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* DIRTY HELPER (I'm not really sure what the side effects are) */
111ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownUInt ppc32g_dirtyhelper_MFSPR_287 ( void )
112ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
113ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#  if defined(__powerpc__) || defined(_AIX)
114ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   UInt spr;
115ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   __asm__ __volatile__("mfspr %0,287" : "=b"(spr));
116ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   return spr;
117ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#  else
118ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   return 0;
119ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#  endif
120ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
121ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
122ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
123ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* CALLED FROM GENERATED CODE */
124ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* DIRTY HELPER (reads guest state, writes guest mem) */
125ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid ppc32g_dirtyhelper_LVS ( VexGuestPPC32State* gst,
126ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                              UInt vD_off, UInt sh, UInt shift_right )
127ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
128ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  static
129ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  UChar ref[32] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
130ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                    0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
131ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                    0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
132ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                    0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F };
133ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  U128* pU128_src;
134ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  U128* pU128_dst;
135ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
136ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  vassert( vD_off       <= sizeof(VexGuestPPC32State)-8 );
137ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  vassert( sh           <= 15 );
138ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  vassert( shift_right  <=  1 );
139ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  if (shift_right)
140ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     sh = 16-sh;
141ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  /* else shift left  */
142ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
143ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  pU128_src = (U128*)&ref[sh];
144ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  pU128_dst = (U128*)( ((UChar*)gst) + vD_off );
145ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
146ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  (*pU128_dst)[0] = (*pU128_src)[0];
147ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  (*pU128_dst)[1] = (*pU128_src)[1];
148ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  (*pU128_dst)[2] = (*pU128_src)[2];
149ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  (*pU128_dst)[3] = (*pU128_src)[3];
150ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
151ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
152ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* CALLED FROM GENERATED CODE */
153ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* DIRTY HELPER (reads guest state, writes guest mem) */
154ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid ppc64g_dirtyhelper_LVS ( VexGuestPPC64State* gst,
155ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                              UInt vD_off, UInt sh, UInt shift_right )
156ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
157ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  static
158ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  UChar ref[32] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
159ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                    0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
160ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                    0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
161ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                    0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F };
162ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  U128* pU128_src;
163ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  U128* pU128_dst;
164ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
165ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  vassert( vD_off       <= sizeof(VexGuestPPC64State)-8 );
166ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  vassert( sh           <= 15 );
167ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  vassert( shift_right  <=  1 );
168ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  if (shift_right)
169ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     sh = 16-sh;
170ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  /* else shift left  */
171ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
172ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  pU128_src = (U128*)&ref[sh];
173ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  pU128_dst = (U128*)( ((UChar*)gst) + vD_off );
174ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
175ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  (*pU128_dst)[0] = (*pU128_src)[0];
176ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  (*pU128_dst)[1] = (*pU128_src)[1];
177ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  (*pU128_dst)[2] = (*pU128_src)[2];
178ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  (*pU128_dst)[3] = (*pU128_src)[3];
179ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
180ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
181ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
182ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* Helper-function specialiser. */
183ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
184ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownIRExpr* guest_ppc32_spechelper ( HChar* function_name,
185ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                                 IRExpr** args,
186ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                                 IRStmt** precedingStmts,
187ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                                 Int      n_precedingStmts )
188ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
189ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   return NULL;
190ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
191ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
192ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownIRExpr* guest_ppc64_spechelper ( HChar* function_name,
193ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                                 IRExpr** args,
194ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                                 IRStmt** precedingStmts,
195ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                                 Int      n_precedingStmts )
196ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
197ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   return NULL;
198ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
199ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
200ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
201ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*----------------------------------------------*/
202ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*--- The exported fns ..                    ---*/
203ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*----------------------------------------------*/
204ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
205ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* VISIBLE TO LIBVEX CLIENT */
206ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownUInt LibVEX_GuestPPC32_get_CR ( /*IN*/VexGuestPPC32State* vex_state )
207ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
208ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#  define FIELD(_n)                                    \
209ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      ( ( (UInt)                                       \
210ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown           ( (vex_state->guest_CR##_n##_321 & (7<<1))  \
211ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown             | (vex_state->guest_CR##_n##_0 & 1)       \
212ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown           )                                           \
213ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        )                                              \
214ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        << (4 * (7-(_n)))                              \
215ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      )
216ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
217ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   return
218ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      FIELD(0) | FIELD(1) | FIELD(2) | FIELD(3)
219ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      | FIELD(4) | FIELD(5) | FIELD(6) | FIELD(7);
220ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
221ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#  undef FIELD
222ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
223ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
224ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
225ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* VISIBLE TO LIBVEX CLIENT */
226ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* Note: %CR is 32 bits even for ppc64 */
227ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownUInt LibVEX_GuestPPC64_get_CR ( /*IN*/VexGuestPPC64State* vex_state )
228ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
229ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#  define FIELD(_n)                                    \
230ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      ( ( (UInt)                                       \
231ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown           ( (vex_state->guest_CR##_n##_321 & (7<<1))  \
232ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown             | (vex_state->guest_CR##_n##_0 & 1)       \
233ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown           )                                           \
234ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        )                                              \
235ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        << (4 * (7-(_n)))                              \
236ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      )
237ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
238ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   return
239ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      FIELD(0) | FIELD(1) | FIELD(2) | FIELD(3)
240ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      | FIELD(4) | FIELD(5) | FIELD(6) | FIELD(7);
241ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
242ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#  undef FIELD
243ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
244ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
245ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
246ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* VISIBLE TO LIBVEX CLIENT */
247ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid LibVEX_GuestPPC32_put_CR ( UInt cr_native,
248ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                                /*OUT*/VexGuestPPC32State* vex_state )
249ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
250ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   UInt t;
251ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
252ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#  define FIELD(_n)                                           \
253ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      do {                                                    \
254ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         t = cr_native >> (4*(7-(_n)));                       \
255ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         vex_state->guest_CR##_n##_0 = toUChar(t & 1);        \
256ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         vex_state->guest_CR##_n##_321 = toUChar(t & (7<<1)); \
257ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      } while (0)
258ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
259ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   FIELD(0);
260ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   FIELD(1);
261ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   FIELD(2);
262ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   FIELD(3);
263ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   FIELD(4);
264ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   FIELD(5);
265ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   FIELD(6);
266ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   FIELD(7);
267ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
268ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#  undef FIELD
269ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
270ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
271ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
272ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* VISIBLE TO LIBVEX CLIENT */
273ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* Note: %CR is 32 bits even for ppc64 */
274ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid LibVEX_GuestPPC64_put_CR ( UInt cr_native,
275ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                                /*OUT*/VexGuestPPC64State* vex_state )
276ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
277ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   UInt t;
278ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
279ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#  define FIELD(_n)                                           \
280ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      do {                                                    \
281ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         t = cr_native >> (4*(7-(_n)));                       \
282ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         vex_state->guest_CR##_n##_0 = toUChar(t & 1);        \
283ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         vex_state->guest_CR##_n##_321 = toUChar(t & (7<<1)); \
284ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      } while (0)
285ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
286ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   FIELD(0);
287ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   FIELD(1);
288ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   FIELD(2);
289ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   FIELD(3);
290ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   FIELD(4);
291ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   FIELD(5);
292ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   FIELD(6);
293ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   FIELD(7);
294ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
295ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#  undef FIELD
296ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
297ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
298ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
299ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* VISIBLE TO LIBVEX CLIENT */
300ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownUInt LibVEX_GuestPPC32_get_XER ( /*IN*/VexGuestPPC32State* vex_state )
301ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
302ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   UInt w = 0;
303ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   w |= ( ((UInt)vex_state->guest_XER_BC) & 0xFF );
304ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   w |= ( (((UInt)vex_state->guest_XER_SO) & 0x1) << 31 );
305ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   w |= ( (((UInt)vex_state->guest_XER_OV) & 0x1) << 30 );
306ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   w |= ( (((UInt)vex_state->guest_XER_CA) & 0x1) << 29 );
307ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   return w;
308ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
309ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
310ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
311ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* VISIBLE TO LIBVEX CLIENT */
312ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* Note: %XER is 32 bits even for ppc64 */
313ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownUInt LibVEX_GuestPPC64_get_XER ( /*IN*/VexGuestPPC64State* vex_state )
314ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
315ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   UInt w = 0;
316ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   w |= ( ((UInt)vex_state->guest_XER_BC) & 0xFF );
317ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   w |= ( (((UInt)vex_state->guest_XER_SO) & 0x1) << 31 );
318ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   w |= ( (((UInt)vex_state->guest_XER_OV) & 0x1) << 30 );
319ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   w |= ( (((UInt)vex_state->guest_XER_CA) & 0x1) << 29 );
320ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   return w;
321ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
322ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
323ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
324ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* VISIBLE TO LIBVEX CLIENT */
325ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid LibVEX_GuestPPC32_put_XER ( UInt xer_native,
326ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                                 /*OUT*/VexGuestPPC32State* vex_state )
327ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
328ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_XER_BC = toUChar(xer_native & 0xFF);
329ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_XER_SO = toUChar((xer_native >> 31) & 0x1);
330ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_XER_OV = toUChar((xer_native >> 30) & 0x1);
331ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_XER_CA = toUChar((xer_native >> 29) & 0x1);
332ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
333ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
334ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* VISIBLE TO LIBVEX CLIENT */
335ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* Note: %XER is 32 bits even for ppc64 */
336ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid LibVEX_GuestPPC64_put_XER ( UInt xer_native,
337ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                                 /*OUT*/VexGuestPPC64State* vex_state )
338ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
339ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_XER_BC = toUChar(xer_native & 0xFF);
340ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_XER_SO = toUChar((xer_native >> 31) & 0x1);
341ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_XER_OV = toUChar((xer_native >> 30) & 0x1);
342ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_XER_CA = toUChar((xer_native >> 29) & 0x1);
343ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
344ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
345ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* VISIBLE TO LIBVEX CLIENT */
346ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid LibVEX_GuestPPC32_initialise ( /*OUT*/VexGuestPPC32State* vex_state )
347ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
348ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int i;
349ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR0  = 0;
350ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR1  = 0;
351ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR2  = 0;
352ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR3  = 0;
353ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR4  = 0;
354ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR5  = 0;
355ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR6  = 0;
356ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR7  = 0;
357ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR8  = 0;
358ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR9  = 0;
359ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR10 = 0;
360ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR11 = 0;
361ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR12 = 0;
362ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR13 = 0;
363ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR14 = 0;
364ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR15 = 0;
365ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR16 = 0;
366ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR17 = 0;
367ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR18 = 0;
368ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR19 = 0;
369ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR20 = 0;
370ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR21 = 0;
371ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR22 = 0;
372ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR23 = 0;
373ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR24 = 0;
374ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR25 = 0;
375ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR26 = 0;
376ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR27 = 0;
377ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR28 = 0;
378ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR29 = 0;
379ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR30 = 0;
380ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR31 = 0;
381ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
382ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR0  = 0;
383ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR1  = 0;
384ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR2  = 0;
385ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR3  = 0;
386ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR4  = 0;
387ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR5  = 0;
388ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR6  = 0;
389ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR7  = 0;
390ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR8  = 0;
391ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR9  = 0;
392ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR10 = 0;
393ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR11 = 0;
394ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR12 = 0;
395ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR13 = 0;
396ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR14 = 0;
397ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR15 = 0;
398ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR16 = 0;
399ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR17 = 0;
400ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR18 = 0;
401ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR19 = 0;
402ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR20 = 0;
403ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR21 = 0;
404ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR22 = 0;
405ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR23 = 0;
406ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR24 = 0;
407ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR25 = 0;
408ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR26 = 0;
409ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR27 = 0;
410ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR28 = 0;
411ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR29 = 0;
412ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR30 = 0;
413ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR31 = 0;
414ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
415ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   /* Initialise the vector state. */
416ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#  define VECZERO(_vr) _vr[0]=_vr[1]=_vr[2]=_vr[3] = 0;
417ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
418ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR0 );
419ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR1 );
420ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR2 );
421ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR3 );
422ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR4 );
423ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR5 );
424ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR6 );
425ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR7 );
426ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR8 );
427ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR9 );
428ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR10);
429ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR11);
430ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR12);
431ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR13);
432ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR14);
433ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR15);
434ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR16);
435ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR17);
436ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR18);
437ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR19);
438ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR20);
439ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR21);
440ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR22);
441ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR23);
442ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR24);
443ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR25);
444ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR26);
445ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR27);
446ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR28);
447ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR29);
448ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR30);
449ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR31);
450ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
451ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#  undef VECZERO
452ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
453ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_CIA  = 0;
454ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_LR   = 0;
455ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_CTR  = 0;
456ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
457ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_XER_SO = 0;
458ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_XER_OV = 0;
459ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_XER_CA = 0;
460ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_XER_BC = 0;
461ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
462ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_CR0_321 = 0;
463ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_CR0_0   = 0;
464ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_CR1_321 = 0;
465ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_CR1_0   = 0;
466ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_CR2_321 = 0;
467ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_CR2_0   = 0;
468ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_CR3_321 = 0;
469ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_CR3_0   = 0;
470ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_CR4_321 = 0;
471ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_CR4_0   = 0;
472ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_CR5_321 = 0;
473ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_CR5_0   = 0;
474ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_CR6_321 = 0;
475ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_CR6_0   = 0;
476ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_CR7_321 = 0;
477ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_CR7_0   = 0;
478ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
479ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPROUND = (UInt)PPCrm_NEAREST;
480ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
481ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_VRSAVE = 0;
482ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
483ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_VSCR = 0x0;  // Non-Java mode = 0
484ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
485ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_EMWARN = EmWarn_NONE;
486ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
487ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_TISTART = 0;
488ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_TILEN   = 0;
489ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
490ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_NRADDR = 0;
491ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_NRADDR_GPR2 = 0;
492ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
493ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_REDIR_SP = -1;
494ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   for (i = 0; i < VEX_GUEST_PPC32_REDIR_STACK_SIZE; i++)
495ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      vex_state->guest_REDIR_STACK[i] = 0;
496ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
497ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_IP_AT_SYSCALL = 0;
498ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_SPRG3_RO = 0;
499ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
500ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
501ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
502ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* VISIBLE TO LIBVEX CLIENT */
503ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid LibVEX_GuestPPC64_initialise ( /*OUT*/VexGuestPPC64State* vex_state )
504ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
505ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int i;
506ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR0  = 0;
507ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR1  = 0;
508ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR2  = 0;
509ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR3  = 0;
510ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR4  = 0;
511ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR5  = 0;
512ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR6  = 0;
513ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR7  = 0;
514ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR8  = 0;
515ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR9  = 0;
516ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR10 = 0;
517ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR11 = 0;
518ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR12 = 0;
519ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR13 = 0;
520ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR14 = 0;
521ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR15 = 0;
522ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR16 = 0;
523ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR17 = 0;
524ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR18 = 0;
525ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR19 = 0;
526ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR20 = 0;
527ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR21 = 0;
528ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR22 = 0;
529ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR23 = 0;
530ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR24 = 0;
531ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR25 = 0;
532ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR26 = 0;
533ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR27 = 0;
534ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR28 = 0;
535ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR29 = 0;
536ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR30 = 0;
537ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_GPR31 = 0;
538ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
539ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR0  = 0;
540ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR1  = 0;
541ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR2  = 0;
542ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR3  = 0;
543ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR4  = 0;
544ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR5  = 0;
545ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR6  = 0;
546ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR7  = 0;
547ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR8  = 0;
548ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR9  = 0;
549ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR10 = 0;
550ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR11 = 0;
551ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR12 = 0;
552ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR13 = 0;
553ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR14 = 0;
554ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR15 = 0;
555ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR16 = 0;
556ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR17 = 0;
557ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR18 = 0;
558ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR19 = 0;
559ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR20 = 0;
560ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR21 = 0;
561ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR22 = 0;
562ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR23 = 0;
563ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR24 = 0;
564ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR25 = 0;
565ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR26 = 0;
566ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR27 = 0;
567ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR28 = 0;
568ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR29 = 0;
569ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR30 = 0;
570ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPR31 = 0;
571ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
572ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   /* Initialise the vector state. */
573ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#  define VECZERO(_vr) _vr[0]=_vr[1]=_vr[2]=_vr[3] = 0;
574ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
575ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR0 );
576ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR1 );
577ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR2 );
578ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR3 );
579ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR4 );
580ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR5 );
581ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR6 );
582ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR7 );
583ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR8 );
584ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR9 );
585ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR10);
586ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR11);
587ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR12);
588ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR13);
589ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR14);
590ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR15);
591ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR16);
592ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR17);
593ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR18);
594ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR19);
595ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR20);
596ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR21);
597ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR22);
598ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR23);
599ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR24);
600ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR25);
601ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR26);
602ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR27);
603ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR28);
604ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR29);
605ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR30);
606ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VECZERO(vex_state->guest_VR31);
607ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
608ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#  undef VECZERO
609ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
610ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_CIA  = 0;
611ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_LR   = 0;
612ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_CTR  = 0;
613ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
614ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_XER_SO = 0;
615ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_XER_OV = 0;
616ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_XER_CA = 0;
617ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_XER_BC = 0;
618ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
619ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_CR0_321 = 0;
620ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_CR0_0   = 0;
621ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_CR1_321 = 0;
622ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_CR1_0   = 0;
623ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_CR2_321 = 0;
624ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_CR2_0   = 0;
625ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_CR3_321 = 0;
626ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_CR3_0   = 0;
627ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_CR4_321 = 0;
628ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_CR4_0   = 0;
629ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_CR5_321 = 0;
630ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_CR5_0   = 0;
631ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_CR6_321 = 0;
632ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_CR6_0   = 0;
633ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_CR7_321 = 0;
634ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_CR7_0   = 0;
635ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
636ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_FPROUND = (UInt)PPCrm_NEAREST;
637ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
638ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_VRSAVE = 0;
639ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
640ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_VSCR = 0x0;  // Non-Java mode = 0
641ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
642ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_EMWARN = EmWarn_NONE;
643ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
644ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->padding = 0;
645ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
646ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_TISTART = 0;
647ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_TILEN   = 0;
648ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
649ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_NRADDR = 0;
650ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_NRADDR_GPR2 = 0;
651ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
652ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_REDIR_SP = -1;
653ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   for (i = 0; i < VEX_GUEST_PPC64_REDIR_STACK_SIZE; i++)
654ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      vex_state->guest_REDIR_STACK[i] = 0;
655ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
656ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_IP_AT_SYSCALL = 0;
657ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->guest_SPRG3_RO = 0;
658ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
659ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   vex_state->padding2 = 0;
660ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
661ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
662ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
663ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*-----------------------------------------------------------*/
664ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*--- Describing the ppc guest state, for the benefit     ---*/
665ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*--- of iropt and instrumenters.                         ---*/
666ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*-----------------------------------------------------------*/
667ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
668ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* Figure out if any part of the guest state contained in minoff
669ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   .. maxoff requires precise memory exceptions.  If in doubt return
670ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   True (but this is generates significantly slower code).
671ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
672ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   By default we enforce precise exns for guest R1 (stack pointer),
673ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   CIA (current insn address) and LR (link register).  These are the
674ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   minimum needed to extract correct stack backtraces from ppc
675ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   code. [[NB: not sure if keeping LR up to date is actually
676ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   necessary.]]
677ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown*/
678ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownBool guest_ppc32_state_requires_precise_mem_exns ( Int minoff,
679ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                                                   Int maxoff )
680ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
681ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int lr_min  = offsetof(VexGuestPPC32State, guest_LR);
682ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int lr_max  = lr_min + 4 - 1;
683ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int r1_min  = offsetof(VexGuestPPC32State, guest_GPR1);
684ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int r1_max  = r1_min + 4 - 1;
685ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int cia_min = offsetof(VexGuestPPC32State, guest_CIA);
686ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int cia_max = cia_min + 4 - 1;
687ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
688ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (maxoff < lr_min || minoff > lr_max) {
689ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      /* no overlap with LR */
690ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   } else {
691ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      return True;
692ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
693ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
694ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (maxoff < r1_min || minoff > r1_max) {
695ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      /* no overlap with R1 */
696ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   } else {
697ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      return True;
698ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
699ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
700ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (maxoff < cia_min || minoff > cia_max) {
701ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      /* no overlap with CIA */
702ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   } else {
703ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      return True;
704ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
705ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
706ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   return False;
707ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
708ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
709ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownBool guest_ppc64_state_requires_precise_mem_exns ( Int minoff,
710ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                                                   Int maxoff )
711ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
712ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   /* Given that R2 is a Big Deal in the ELF ppc64 ABI, it seems
713ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      prudent to be conservative with it, even though thus far there
714ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      is no evidence to suggest that it actually needs to be kept up
715ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      to date wrt possible exceptions. */
716ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int lr_min  = offsetof(VexGuestPPC64State, guest_LR);
717ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int lr_max  = lr_min + 8 - 1;
718ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int r1_min  = offsetof(VexGuestPPC64State, guest_GPR1);
719ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int r1_max  = r1_min + 8 - 1;
720ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int r2_min  = offsetof(VexGuestPPC64State, guest_GPR2);
721ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int r2_max  = r2_min + 8 - 1;
722ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int cia_min = offsetof(VexGuestPPC64State, guest_CIA);
723ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Int cia_max = cia_min + 8 - 1;
724ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
725ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (maxoff < lr_min || minoff > lr_max) {
726ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      /* no overlap with LR */
727ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   } else {
728ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      return True;
729ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
730ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
731ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (maxoff < r1_min || minoff > r1_max) {
732ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      /* no overlap with R1 */
733ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   } else {
734ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      return True;
735ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
736ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
737ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (maxoff < r2_min || minoff > r2_max) {
738ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      /* no overlap with R2 */
739ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   } else {
740ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      return True;
741ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
742ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
743ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   if (maxoff < cia_min || minoff > cia_max) {
744ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      /* no overlap with CIA */
745ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   } else {
746ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      return True;
747ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
748ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
749ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   return False;
750ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
751ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
752ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
753ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define ALWAYSDEFD32(field)                           \
754ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    { offsetof(VexGuestPPC32State, field),            \
755ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      (sizeof ((VexGuestPPC32State*)0)->field) }
756ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
757ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownVexGuestLayout
758ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   ppc32Guest_layout
759ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      = {
760ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown          /* Total size of the guest state, in bytes. */
761ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown          .total_sizeB = sizeof(VexGuestPPC32State),
762ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
763ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown          /* Describe the stack pointer. */
764ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown          .offset_SP = offsetof(VexGuestPPC32State,guest_GPR1),
765ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown          .sizeof_SP = 4,
766ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
767ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown          /* Describe the frame pointer. */
768ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown          .offset_FP = offsetof(VexGuestPPC32State,guest_GPR1),
769ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown          .sizeof_FP = 4,
770ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
771ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown          /* Describe the instruction pointer. */
772ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown          .offset_IP = offsetof(VexGuestPPC32State,guest_CIA),
773ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown          .sizeof_IP = 4,
774ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
775ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown          /* Describe any sections to be regarded by Memcheck as
776ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown             'always-defined'. */
777ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown          .n_alwaysDefd = 11,
778ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
779ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown          .alwaysDefd
780ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	  = { /*  0 */ ALWAYSDEFD32(guest_CIA),
781ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	      /*  1 */ ALWAYSDEFD32(guest_EMWARN),
782ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	      /*  2 */ ALWAYSDEFD32(guest_TISTART),
783ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	      /*  3 */ ALWAYSDEFD32(guest_TILEN),
784ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	      /*  4 */ ALWAYSDEFD32(guest_VSCR),
785ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	      /*  5 */ ALWAYSDEFD32(guest_FPROUND),
786ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown              /*  6 */ ALWAYSDEFD32(guest_NRADDR),
787ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	      /*  7 */ ALWAYSDEFD32(guest_NRADDR_GPR2),
788ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	      /*  8 */ ALWAYSDEFD32(guest_REDIR_SP),
789ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	      /*  9 */ ALWAYSDEFD32(guest_REDIR_STACK),
790ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	      /* 10 */ ALWAYSDEFD32(guest_IP_AT_SYSCALL)
791ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            }
792ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        };
793ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
794ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define ALWAYSDEFD64(field)                           \
795ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    { offsetof(VexGuestPPC64State, field),            \
796ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      (sizeof ((VexGuestPPC64State*)0)->field) }
797ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
798ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownVexGuestLayout
799ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   ppc64Guest_layout
800ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      = {
801ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown          /* Total size of the guest state, in bytes. */
802ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown          .total_sizeB = sizeof(VexGuestPPC64State),
803ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
804ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown          /* Describe the stack pointer. */
805ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown          .offset_SP = offsetof(VexGuestPPC64State,guest_GPR1),
806ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown          .sizeof_SP = 8,
807ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
808ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown          /* Describe the frame pointer. */
809ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown          .offset_FP = offsetof(VexGuestPPC64State,guest_GPR1),
810ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown          .sizeof_FP = 8,
811ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
812ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown          /* Describe the instruction pointer. */
813ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown          .offset_IP = offsetof(VexGuestPPC64State,guest_CIA),
814ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown          .sizeof_IP = 8,
815ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
816ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown          /* Describe any sections to be regarded by Memcheck as
817ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown             'always-defined'. */
818ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown          .n_alwaysDefd = 11,
819ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
820ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown          .alwaysDefd
821ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	  = { /*  0 */ ALWAYSDEFD64(guest_CIA),
822ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	      /*  1 */ ALWAYSDEFD64(guest_EMWARN),
823ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	      /*  2 */ ALWAYSDEFD64(guest_TISTART),
824ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	      /*  3 */ ALWAYSDEFD64(guest_TILEN),
825ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	      /*  4 */ ALWAYSDEFD64(guest_VSCR),
826ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	      /*  5 */ ALWAYSDEFD64(guest_FPROUND),
827ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	      /*  6 */ ALWAYSDEFD64(guest_NRADDR),
828ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	      /*  7 */ ALWAYSDEFD64(guest_NRADDR_GPR2),
829ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	      /*  8 */ ALWAYSDEFD64(guest_REDIR_SP),
830ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	      /*  9 */ ALWAYSDEFD64(guest_REDIR_STACK),
831ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	      /* 10 */ ALWAYSDEFD64(guest_IP_AT_SYSCALL)
832ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown            }
833ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        };
834ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
835ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*---------------------------------------------------------------*/
836ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*--- end                                 guest_ppc_helpers.c ---*/
837ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*---------------------------------------------------------------*/
838