1896a1373cfdbaa25f4ab73ed4f27554016defecccerion
2896a1373cfdbaa25f4ab73ed4f27554016defecccerion/*---------------------------------------------------------------*/
3752f90673ebbb6b2f55fc5e46606dea371313713sewardj/*--- begin                               guest_ppc_helpers.c ---*/
4896a1373cfdbaa25f4ab73ed4f27554016defecccerion/*---------------------------------------------------------------*/
5896a1373cfdbaa25f4ab73ed4f27554016defecccerion
6896a1373cfdbaa25f4ab73ed4f27554016defecccerion/*
7752f90673ebbb6b2f55fc5e46606dea371313713sewardj   This file is part of Valgrind, a dynamic binary instrumentation
8752f90673ebbb6b2f55fc5e46606dea371313713sewardj   framework.
9896a1373cfdbaa25f4ab73ed4f27554016defecccerion
1089ae8477745fd2a15453557d729a50e627325ee2sewardj   Copyright (C) 2004-2013 OpenWorks LLP
11752f90673ebbb6b2f55fc5e46606dea371313713sewardj      info@open-works.net
127bd6ffe203f3aa9e7b25f7eae40a9b9cf48710cfsewardj
13752f90673ebbb6b2f55fc5e46606dea371313713sewardj   This program is free software; you can redistribute it and/or
14752f90673ebbb6b2f55fc5e46606dea371313713sewardj   modify it under the terms of the GNU General Public License as
15752f90673ebbb6b2f55fc5e46606dea371313713sewardj   published by the Free Software Foundation; either version 2 of the
16752f90673ebbb6b2f55fc5e46606dea371313713sewardj   License, or (at your option) any later version.
177bd6ffe203f3aa9e7b25f7eae40a9b9cf48710cfsewardj
18752f90673ebbb6b2f55fc5e46606dea371313713sewardj   This program is distributed in the hope that it will be useful, but
19752f90673ebbb6b2f55fc5e46606dea371313713sewardj   WITHOUT ANY WARRANTY; without even the implied warranty of
20752f90673ebbb6b2f55fc5e46606dea371313713sewardj   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
21752f90673ebbb6b2f55fc5e46606dea371313713sewardj   General Public License for more details.
22752f90673ebbb6b2f55fc5e46606dea371313713sewardj
23752f90673ebbb6b2f55fc5e46606dea371313713sewardj   You should have received a copy of the GNU General Public License
24752f90673ebbb6b2f55fc5e46606dea371313713sewardj   along with this program; if not, write to the Free Software
25752f90673ebbb6b2f55fc5e46606dea371313713sewardj   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
267bd6ffe203f3aa9e7b25f7eae40a9b9cf48710cfsewardj   02110-1301, USA.
277bd6ffe203f3aa9e7b25f7eae40a9b9cf48710cfsewardj
28752f90673ebbb6b2f55fc5e46606dea371313713sewardj   The GNU General Public License is contained in the file COPYING.
29896a1373cfdbaa25f4ab73ed4f27554016defecccerion
30896a1373cfdbaa25f4ab73ed4f27554016defecccerion   Neither the names of the U.S. Department of Energy nor the
31896a1373cfdbaa25f4ab73ed4f27554016defecccerion   University of California nor the names of its contributors may be
32896a1373cfdbaa25f4ab73ed4f27554016defecccerion   used to endorse or promote products derived from this software
33896a1373cfdbaa25f4ab73ed4f27554016defecccerion   without prior written permission.
34896a1373cfdbaa25f4ab73ed4f27554016defecccerion*/
35896a1373cfdbaa25f4ab73ed4f27554016defecccerion
36896a1373cfdbaa25f4ab73ed4f27554016defecccerion#include "libvex_basictypes.h"
3733b024301d2311965cc68dc4cc900f3d0fdd8085florian#include "libvex_emnote.h"
381515db99ce1abcd2147ac54aea1a7090c7895a43cerion#include "libvex_guest_ppc32.h"
39d953ebb9b04cbad6891676df597bf0c542b1ec89cerion#include "libvex_guest_ppc64.h"
40896a1373cfdbaa25f4ab73ed4f27554016defecccerion#include "libvex_ir.h"
41896a1373cfdbaa25f4ab73ed4f27554016defecccerion#include "libvex.h"
42896a1373cfdbaa25f4ab73ed4f27554016defecccerion
43cef7d3e3df4796e35b4521158d9dc058f034aa87sewardj#include "main_util.h"
446c46befd9eb90c1b6e739926c1fa335cba75bf46philippe#include "main_globals.h"
45cef7d3e3df4796e35b4521158d9dc058f034aa87sewardj#include "guest_generic_bb_to_IR.h"
46cef7d3e3df4796e35b4521158d9dc058f034aa87sewardj#include "guest_ppc_defs.h"
47896a1373cfdbaa25f4ab73ed4f27554016defecccerion
48896a1373cfdbaa25f4ab73ed4f27554016defecccerion
49d953ebb9b04cbad6891676df597bf0c542b1ec89cerion/* This file contains helper functions for ppc32 and ppc64 guest code.
50d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   Calls to these functions are generated by the back end.  These
51d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   calls are of course in the host machine code and this file will be
52d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   compiled to host machine code, so that all makes sense.
53896a1373cfdbaa25f4ab73ed4f27554016defecccerion
54896a1373cfdbaa25f4ab73ed4f27554016defecccerion   Only change the signatures of these helper functions very
55896a1373cfdbaa25f4ab73ed4f27554016defecccerion   carefully.  If you change the signature here, you'll have to change
56896a1373cfdbaa25f4ab73ed4f27554016defecccerion   the parameters passed to it in the IR calls constructed by
57d0eae2d5b6d8224bf1f075098e044b23ecffd9aecerion   guest-ppc/toIR.c.
58896a1373cfdbaa25f4ab73ed4f27554016defecccerion*/
59896a1373cfdbaa25f4ab73ed4f27554016defecccerion
60896a1373cfdbaa25f4ab73ed4f27554016defecccerion
6173a9197285975856fd3cc577216237afb3612b09sewardj/*---------------------------------------------------------------*/
6273a9197285975856fd3cc577216237afb3612b09sewardj/*--- Misc integer helpers.                                   ---*/
6373a9197285975856fd3cc577216237afb3612b09sewardj/*---------------------------------------------------------------*/
6473a9197285975856fd3cc577216237afb3612b09sewardj
6573a9197285975856fd3cc577216237afb3612b09sewardj/* CALLED FROM GENERATED CODE */
6673a9197285975856fd3cc577216237afb3612b09sewardj/* DIRTY HELPER (non-referentially-transparent) */
67d0eae2d5b6d8224bf1f075098e044b23ecffd9aecerion/* Horrible hack.  On non-ppc platforms, return 1. */
6873a9197285975856fd3cc577216237afb3612b09sewardj/* Reads a complete, consistent 64-bit TB value. */
695b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerionULong ppcg_dirtyhelper_MFTB ( void )
7073a9197285975856fd3cc577216237afb3612b09sewardj{
712322360949754bdcaa87e5ea704480e0b267b09aflorian#  if defined(__powerpc__)
7273a9197285975856fd3cc577216237afb3612b09sewardj   ULong res;
7373a9197285975856fd3cc577216237afb3612b09sewardj   UInt  lo, hi1, hi2;
7473a9197285975856fd3cc577216237afb3612b09sewardj   while (1) {
7573a9197285975856fd3cc577216237afb3612b09sewardj      __asm__ __volatile__ ("\n"
7673a9197285975856fd3cc577216237afb3612b09sewardj         "\tmftbu %0\n"
7773a9197285975856fd3cc577216237afb3612b09sewardj         "\tmftb %1\n"
7873a9197285975856fd3cc577216237afb3612b09sewardj         "\tmftbu %2\n"
7973a9197285975856fd3cc577216237afb3612b09sewardj         : "=r" (hi1), "=r" (lo), "=r" (hi2)
8073a9197285975856fd3cc577216237afb3612b09sewardj      );
8173a9197285975856fd3cc577216237afb3612b09sewardj      if (hi1 == hi2) break;
8273a9197285975856fd3cc577216237afb3612b09sewardj   }
8373a9197285975856fd3cc577216237afb3612b09sewardj   res = ((ULong)hi1) << 32;
8473a9197285975856fd3cc577216237afb3612b09sewardj   res |= (ULong)lo;
8573a9197285975856fd3cc577216237afb3612b09sewardj   return res;
8673a9197285975856fd3cc577216237afb3612b09sewardj#  else
8773a9197285975856fd3cc577216237afb3612b09sewardj   return 1ULL;
8873a9197285975856fd3cc577216237afb3612b09sewardj#  endif
8973a9197285975856fd3cc577216237afb3612b09sewardj}
9073a9197285975856fd3cc577216237afb3612b09sewardj
9173a9197285975856fd3cc577216237afb3612b09sewardj
926f6c6a0d6a601af3137f861f5fc9d76365c48e96cerion/* CALLED FROM GENERATED CODE */
93abb321cf9ad44ad0ac445250c31128452e316547sewardj/* DIRTY HELPER (non-referentially transparent) */
94abb321cf9ad44ad0ac445250c31128452e316547sewardjUInt ppc32g_dirtyhelper_MFSPR_268_269 ( UInt r269 )
95abb321cf9ad44ad0ac445250c31128452e316547sewardj{
962322360949754bdcaa87e5ea704480e0b267b09aflorian#  if defined(__powerpc__)
97abb321cf9ad44ad0ac445250c31128452e316547sewardj   UInt spr;
98abb321cf9ad44ad0ac445250c31128452e316547sewardj   if (r269) {
99abb321cf9ad44ad0ac445250c31128452e316547sewardj      __asm__ __volatile__("mfspr %0,269" : "=b"(spr));
100abb321cf9ad44ad0ac445250c31128452e316547sewardj   } else {
101abb321cf9ad44ad0ac445250c31128452e316547sewardj      __asm__ __volatile__("mfspr %0,268" : "=b"(spr));
102abb321cf9ad44ad0ac445250c31128452e316547sewardj   }
103abb321cf9ad44ad0ac445250c31128452e316547sewardj   return spr;
104abb321cf9ad44ad0ac445250c31128452e316547sewardj#  else
105abb321cf9ad44ad0ac445250c31128452e316547sewardj   return 0;
106abb321cf9ad44ad0ac445250c31128452e316547sewardj#  endif
107abb321cf9ad44ad0ac445250c31128452e316547sewardj}
108abb321cf9ad44ad0ac445250c31128452e316547sewardj
109abb321cf9ad44ad0ac445250c31128452e316547sewardj
110abb321cf9ad44ad0ac445250c31128452e316547sewardj/* CALLED FROM GENERATED CODE */
11137b2ee8724691d97860726ea2c59005b6b654892sewardj/* DIRTY HELPER (I'm not really sure what the side effects are) */
11237b2ee8724691d97860726ea2c59005b6b654892sewardjUInt ppc32g_dirtyhelper_MFSPR_287 ( void )
11337b2ee8724691d97860726ea2c59005b6b654892sewardj{
1142322360949754bdcaa87e5ea704480e0b267b09aflorian#  if defined(__powerpc__)
11537b2ee8724691d97860726ea2c59005b6b654892sewardj   UInt spr;
11637b2ee8724691d97860726ea2c59005b6b654892sewardj   __asm__ __volatile__("mfspr %0,287" : "=b"(spr));
11737b2ee8724691d97860726ea2c59005b6b654892sewardj   return spr;
11837b2ee8724691d97860726ea2c59005b6b654892sewardj#  else
11937b2ee8724691d97860726ea2c59005b6b654892sewardj   return 0;
12037b2ee8724691d97860726ea2c59005b6b654892sewardj#  endif
12137b2ee8724691d97860726ea2c59005b6b654892sewardj}
12237b2ee8724691d97860726ea2c59005b6b654892sewardj
12337b2ee8724691d97860726ea2c59005b6b654892sewardj
12437b2ee8724691d97860726ea2c59005b6b654892sewardj/* CALLED FROM GENERATED CODE */
1256f6c6a0d6a601af3137f861f5fc9d76365c48e96cerion/* DIRTY HELPER (reads guest state, writes guest mem) */
1266f6c6a0d6a601af3137f861f5fc9d76365c48e96cerionvoid ppc32g_dirtyhelper_LVS ( VexGuestPPC32State* gst,
127d14709407df9363767aa888b03f95f08df169dcesewardj                              UInt vD_off, UInt sh, UInt shift_right )
1286f6c6a0d6a601af3137f861f5fc9d76365c48e96cerion{
129197bd17d3ba8ac5204cd5c9ba5fab571249eb791sewardj  static
1306f6c6a0d6a601af3137f861f5fc9d76365c48e96cerion  UChar ref[32] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
1316f6c6a0d6a601af3137f861f5fc9d76365c48e96cerion                    0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
1326f6c6a0d6a601af3137f861f5fc9d76365c48e96cerion                    0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
1336f6c6a0d6a601af3137f861f5fc9d76365c48e96cerion                    0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F };
134197bd17d3ba8ac5204cd5c9ba5fab571249eb791sewardj  U128* pU128_src;
135197bd17d3ba8ac5204cd5c9ba5fab571249eb791sewardj  U128* pU128_dst;
136197bd17d3ba8ac5204cd5c9ba5fab571249eb791sewardj
137d14709407df9363767aa888b03f95f08df169dcesewardj  vassert( vD_off       <= sizeof(VexGuestPPC32State)-8 );
138d14709407df9363767aa888b03f95f08df169dcesewardj  vassert( sh           <= 15 );
139d14709407df9363767aa888b03f95f08df169dcesewardj  vassert( shift_right  <=  1 );
140d14709407df9363767aa888b03f95f08df169dcesewardj  if (shift_right)
141197bd17d3ba8ac5204cd5c9ba5fab571249eb791sewardj     sh = 16-sh;
1426f6c6a0d6a601af3137f861f5fc9d76365c48e96cerion  /* else shift left  */
1436f6c6a0d6a601af3137f861f5fc9d76365c48e96cerion
144197bd17d3ba8ac5204cd5c9ba5fab571249eb791sewardj  pU128_src = (U128*)&ref[sh];
145d14709407df9363767aa888b03f95f08df169dcesewardj  pU128_dst = (U128*)( ((UChar*)gst) + vD_off );
1466f6c6a0d6a601af3137f861f5fc9d76365c48e96cerion
1476f6c6a0d6a601af3137f861f5fc9d76365c48e96cerion  (*pU128_dst)[0] = (*pU128_src)[0];
1486f6c6a0d6a601af3137f861f5fc9d76365c48e96cerion  (*pU128_dst)[1] = (*pU128_src)[1];
1496f6c6a0d6a601af3137f861f5fc9d76365c48e96cerion  (*pU128_dst)[2] = (*pU128_src)[2];
1506f6c6a0d6a601af3137f861f5fc9d76365c48e96cerion  (*pU128_dst)[3] = (*pU128_src)[3];
1516f6c6a0d6a601af3137f861f5fc9d76365c48e96cerion}
1526f6c6a0d6a601af3137f861f5fc9d76365c48e96cerion
1535b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion/* CALLED FROM GENERATED CODE */
1545b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion/* DIRTY HELPER (reads guest state, writes guest mem) */
1555b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerionvoid ppc64g_dirtyhelper_LVS ( VexGuestPPC64State* gst,
1561f5fe1fc3a37ca729925e8eec25aa1025b4a6cdbcarll                              UInt vD_off, UInt sh, UInt shift_right,
1571f5fe1fc3a37ca729925e8eec25aa1025b4a6cdbcarll                              UInt endness )
1585b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion{
15928d672a3a56bbb049e7fd7cb383ba52c4cfd954asewardj  UChar ref[32];
16028d672a3a56bbb049e7fd7cb383ba52c4cfd954asewardj  ULong i;
1611f5fe1fc3a37ca729925e8eec25aa1025b4a6cdbcarll  Int k;
16228d672a3a56bbb049e7fd7cb383ba52c4cfd954asewardj  /* ref[] used to be a static const array, but this doesn't work on
16328d672a3a56bbb049e7fd7cb383ba52c4cfd954asewardj     ppc64 because VEX doesn't load the TOC pointer for the call here,
16428d672a3a56bbb049e7fd7cb383ba52c4cfd954asewardj     and so we wind up picking up some totally random other data.
16528d672a3a56bbb049e7fd7cb383ba52c4cfd954asewardj     (It's a wonder we don't segfault.)  So, just to be clear, this
16628d672a3a56bbb049e7fd7cb383ba52c4cfd954asewardj     "fix" (vex r2073) is really a kludgearound for the fact that
16728d672a3a56bbb049e7fd7cb383ba52c4cfd954asewardj     VEX's 64-bit ppc code generation doesn't provide a valid TOC
16828d672a3a56bbb049e7fd7cb383ba52c4cfd954asewardj     pointer for helper function calls.  Ick.  (Bug 250038) */
16928d672a3a56bbb049e7fd7cb383ba52c4cfd954asewardj  for (i = 0; i < 32; i++) ref[i] = i;
17028d672a3a56bbb049e7fd7cb383ba52c4cfd954asewardj
1715b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion  U128* pU128_src;
1725b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion  U128* pU128_dst;
1735b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion
1745b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion  vassert( vD_off       <= sizeof(VexGuestPPC64State)-8 );
1755b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion  vassert( sh           <= 15 );
1765b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion  vassert( shift_right  <=  1 );
1775b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion  if (shift_right)
1785b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion     sh = 16-sh;
1795b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion  /* else shift left  */
1805b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion
1815b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion  pU128_src = (U128*)&ref[sh];
1825b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion  pU128_dst = (U128*)( ((UChar*)gst) + vD_off );
1835b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion
1841f5fe1fc3a37ca729925e8eec25aa1025b4a6cdbcarll  if ((0x1 & endness) == 0x0) {
1851f5fe1fc3a37ca729925e8eec25aa1025b4a6cdbcarll     /* Little endian */
1861f5fe1fc3a37ca729925e8eec25aa1025b4a6cdbcarll     unsigned char *srcp, *dstp;
1871f5fe1fc3a37ca729925e8eec25aa1025b4a6cdbcarll     srcp = (unsigned char *)pU128_src;
1881f5fe1fc3a37ca729925e8eec25aa1025b4a6cdbcarll     dstp = (unsigned char *)pU128_dst;
1891f5fe1fc3a37ca729925e8eec25aa1025b4a6cdbcarll     for (k = 15; k >= 0; k--, srcp++)
1901f5fe1fc3a37ca729925e8eec25aa1025b4a6cdbcarll        dstp[k] = *srcp;
1911f5fe1fc3a37ca729925e8eec25aa1025b4a6cdbcarll  } else {
1921f5fe1fc3a37ca729925e8eec25aa1025b4a6cdbcarll     (*pU128_dst)[0] = (*pU128_src)[0];
1931f5fe1fc3a37ca729925e8eec25aa1025b4a6cdbcarll     (*pU128_dst)[1] = (*pU128_src)[1];
1941f5fe1fc3a37ca729925e8eec25aa1025b4a6cdbcarll     (*pU128_dst)[2] = (*pU128_src)[2];
1951f5fe1fc3a37ca729925e8eec25aa1025b4a6cdbcarll     (*pU128_dst)[3] = (*pU128_src)[3];
1961f5fe1fc3a37ca729925e8eec25aa1025b4a6cdbcarll  }
1975b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion}
1985b2325f209f6d3c7ab9c4e819d15060f8d1f09efcerion
1996f6c6a0d6a601af3137f861f5fc9d76365c48e96cerion
20073a9197285975856fd3cc577216237afb3612b09sewardj/* Helper-function specialiser. */
201896a1373cfdbaa25f4ab73ed4f27554016defecccerion
2021ff4756e1731485e6bf3cd96717cd8398daec1f2florianIRExpr* guest_ppc32_spechelper ( const HChar* function_name,
203be9179130bdfb61d0e03ecb32eced8dd5c7bfc74sewardj                                 IRExpr** args,
204be9179130bdfb61d0e03ecb32eced8dd5c7bfc74sewardj                                 IRStmt** precedingStmts,
205be9179130bdfb61d0e03ecb32eced8dd5c7bfc74sewardj                                 Int      n_precedingStmts )
206896a1373cfdbaa25f4ab73ed4f27554016defecccerion{
207896a1373cfdbaa25f4ab73ed4f27554016defecccerion   return NULL;
208896a1373cfdbaa25f4ab73ed4f27554016defecccerion}
209896a1373cfdbaa25f4ab73ed4f27554016defecccerion
2101ff4756e1731485e6bf3cd96717cd8398daec1f2florianIRExpr* guest_ppc64_spechelper ( const HChar* function_name,
211be9179130bdfb61d0e03ecb32eced8dd5c7bfc74sewardj                                 IRExpr** args,
212be9179130bdfb61d0e03ecb32eced8dd5c7bfc74sewardj                                 IRStmt** precedingStmts,
213be9179130bdfb61d0e03ecb32eced8dd5c7bfc74sewardj                                 Int      n_precedingStmts )
214f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion{
215f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion   return NULL;
216f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion}
217f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion
218896a1373cfdbaa25f4ab73ed4f27554016defecccerion
219896a1373cfdbaa25f4ab73ed4f27554016defecccerion/*----------------------------------------------*/
220896a1373cfdbaa25f4ab73ed4f27554016defecccerion/*--- The exported fns ..                    ---*/
221896a1373cfdbaa25f4ab73ed4f27554016defecccerion/*----------------------------------------------*/
222896a1373cfdbaa25f4ab73ed4f27554016defecccerion
223896a1373cfdbaa25f4ab73ed4f27554016defecccerion/* VISIBLE TO LIBVEX CLIENT */
224efa834abaded25c8aff2f3923e476ef7cc1d0396florianUInt LibVEX_GuestPPC32_get_CR ( /*IN*/const VexGuestPPC32State* vex_state )
225896a1373cfdbaa25f4ab73ed4f27554016defecccerion{
226b51f0f4f33256638ed953156a2635aa739b232f1sewardj#  define FIELD(_n)                                    \
227b51f0f4f33256638ed953156a2635aa739b232f1sewardj      ( ( (UInt)                                       \
228b51f0f4f33256638ed953156a2635aa739b232f1sewardj           ( (vex_state->guest_CR##_n##_321 & (7<<1))  \
229b51f0f4f33256638ed953156a2635aa739b232f1sewardj             | (vex_state->guest_CR##_n##_0 & 1)       \
230b51f0f4f33256638ed953156a2635aa739b232f1sewardj           )                                           \
231b51f0f4f33256638ed953156a2635aa739b232f1sewardj        )                                              \
232b51f0f4f33256638ed953156a2635aa739b232f1sewardj        << (4 * (7-(_n)))                              \
233b51f0f4f33256638ed953156a2635aa739b232f1sewardj      )
234b51f0f4f33256638ed953156a2635aa739b232f1sewardj
235b51f0f4f33256638ed953156a2635aa739b232f1sewardj   return
236b51f0f4f33256638ed953156a2635aa739b232f1sewardj      FIELD(0) | FIELD(1) | FIELD(2) | FIELD(3)
237b51f0f4f33256638ed953156a2635aa739b232f1sewardj      | FIELD(4) | FIELD(5) | FIELD(6) | FIELD(7);
238b51f0f4f33256638ed953156a2635aa739b232f1sewardj
239b51f0f4f33256638ed953156a2635aa739b232f1sewardj#  undef FIELD
240900f6b52087bf8a46de43a446eb24e4425c24130cerion}
241900f6b52087bf8a46de43a446eb24e4425c24130cerion
242b51f0f4f33256638ed953156a2635aa739b232f1sewardj
243900f6b52087bf8a46de43a446eb24e4425c24130cerion/* VISIBLE TO LIBVEX CLIENT */
244d953ebb9b04cbad6891676df597bf0c542b1ec89cerion/* Note: %CR is 32 bits even for ppc64 */
245efa834abaded25c8aff2f3923e476ef7cc1d0396florianUInt LibVEX_GuestPPC64_get_CR ( /*IN*/const VexGuestPPC64State* vex_state )
246d953ebb9b04cbad6891676df597bf0c542b1ec89cerion{
247d953ebb9b04cbad6891676df597bf0c542b1ec89cerion#  define FIELD(_n)                                    \
248d953ebb9b04cbad6891676df597bf0c542b1ec89cerion      ( ( (UInt)                                       \
249d953ebb9b04cbad6891676df597bf0c542b1ec89cerion           ( (vex_state->guest_CR##_n##_321 & (7<<1))  \
250d953ebb9b04cbad6891676df597bf0c542b1ec89cerion             | (vex_state->guest_CR##_n##_0 & 1)       \
251d953ebb9b04cbad6891676df597bf0c542b1ec89cerion           )                                           \
252d953ebb9b04cbad6891676df597bf0c542b1ec89cerion        )                                              \
253d953ebb9b04cbad6891676df597bf0c542b1ec89cerion        << (4 * (7-(_n)))                              \
254d953ebb9b04cbad6891676df597bf0c542b1ec89cerion      )
255d953ebb9b04cbad6891676df597bf0c542b1ec89cerion
256d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   return
257d953ebb9b04cbad6891676df597bf0c542b1ec89cerion      FIELD(0) | FIELD(1) | FIELD(2) | FIELD(3)
258d953ebb9b04cbad6891676df597bf0c542b1ec89cerion      | FIELD(4) | FIELD(5) | FIELD(6) | FIELD(7);
259d953ebb9b04cbad6891676df597bf0c542b1ec89cerion
260d953ebb9b04cbad6891676df597bf0c542b1ec89cerion#  undef FIELD
261d953ebb9b04cbad6891676df597bf0c542b1ec89cerion}
262d953ebb9b04cbad6891676df597bf0c542b1ec89cerion
263d953ebb9b04cbad6891676df597bf0c542b1ec89cerion
264d953ebb9b04cbad6891676df597bf0c542b1ec89cerion/* VISIBLE TO LIBVEX CLIENT */
265b51f0f4f33256638ed953156a2635aa739b232f1sewardjvoid LibVEX_GuestPPC32_put_CR ( UInt cr_native,
266900f6b52087bf8a46de43a446eb24e4425c24130cerion                                /*OUT*/VexGuestPPC32State* vex_state )
267900f6b52087bf8a46de43a446eb24e4425c24130cerion{
268b51f0f4f33256638ed953156a2635aa739b232f1sewardj   UInt t;
269b51f0f4f33256638ed953156a2635aa739b232f1sewardj
270b51f0f4f33256638ed953156a2635aa739b232f1sewardj#  define FIELD(_n)                                           \
271b51f0f4f33256638ed953156a2635aa739b232f1sewardj      do {                                                    \
272b51f0f4f33256638ed953156a2635aa739b232f1sewardj         t = cr_native >> (4*(7-(_n)));                       \
273c7cd2142ff0172bd3702d0607426a8014d8842e5sewardj         vex_state->guest_CR##_n##_0 = toUChar(t & 1);        \
274c7cd2142ff0172bd3702d0607426a8014d8842e5sewardj         vex_state->guest_CR##_n##_321 = toUChar(t & (7<<1)); \
275b51f0f4f33256638ed953156a2635aa739b232f1sewardj      } while (0)
276b51f0f4f33256638ed953156a2635aa739b232f1sewardj
277b51f0f4f33256638ed953156a2635aa739b232f1sewardj   FIELD(0);
278b51f0f4f33256638ed953156a2635aa739b232f1sewardj   FIELD(1);
279b51f0f4f33256638ed953156a2635aa739b232f1sewardj   FIELD(2);
280b51f0f4f33256638ed953156a2635aa739b232f1sewardj   FIELD(3);
281b51f0f4f33256638ed953156a2635aa739b232f1sewardj   FIELD(4);
282b51f0f4f33256638ed953156a2635aa739b232f1sewardj   FIELD(5);
283b51f0f4f33256638ed953156a2635aa739b232f1sewardj   FIELD(6);
284b51f0f4f33256638ed953156a2635aa739b232f1sewardj   FIELD(7);
285b51f0f4f33256638ed953156a2635aa739b232f1sewardj
286b51f0f4f33256638ed953156a2635aa739b232f1sewardj#  undef FIELD
287896a1373cfdbaa25f4ab73ed4f27554016defecccerion}
288896a1373cfdbaa25f4ab73ed4f27554016defecccerion
289b51f0f4f33256638ed953156a2635aa739b232f1sewardj
290896a1373cfdbaa25f4ab73ed4f27554016defecccerion/* VISIBLE TO LIBVEX CLIENT */
291d953ebb9b04cbad6891676df597bf0c542b1ec89cerion/* Note: %CR is 32 bits even for ppc64 */
292d953ebb9b04cbad6891676df597bf0c542b1ec89cerionvoid LibVEX_GuestPPC64_put_CR ( UInt cr_native,
293d953ebb9b04cbad6891676df597bf0c542b1ec89cerion                                /*OUT*/VexGuestPPC64State* vex_state )
294d953ebb9b04cbad6891676df597bf0c542b1ec89cerion{
295d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   UInt t;
296d953ebb9b04cbad6891676df597bf0c542b1ec89cerion
297d953ebb9b04cbad6891676df597bf0c542b1ec89cerion#  define FIELD(_n)                                           \
298d953ebb9b04cbad6891676df597bf0c542b1ec89cerion      do {                                                    \
299d953ebb9b04cbad6891676df597bf0c542b1ec89cerion         t = cr_native >> (4*(7-(_n)));                       \
300d953ebb9b04cbad6891676df597bf0c542b1ec89cerion         vex_state->guest_CR##_n##_0 = toUChar(t & 1);        \
301d953ebb9b04cbad6891676df597bf0c542b1ec89cerion         vex_state->guest_CR##_n##_321 = toUChar(t & (7<<1)); \
302d953ebb9b04cbad6891676df597bf0c542b1ec89cerion      } while (0)
303d953ebb9b04cbad6891676df597bf0c542b1ec89cerion
304d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   FIELD(0);
305d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   FIELD(1);
306d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   FIELD(2);
307d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   FIELD(3);
308d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   FIELD(4);
309d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   FIELD(5);
310d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   FIELD(6);
311d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   FIELD(7);
312d953ebb9b04cbad6891676df597bf0c542b1ec89cerion
313d953ebb9b04cbad6891676df597bf0c542b1ec89cerion#  undef FIELD
314d953ebb9b04cbad6891676df597bf0c542b1ec89cerion}
315d953ebb9b04cbad6891676df597bf0c542b1ec89cerion
316d953ebb9b04cbad6891676df597bf0c542b1ec89cerion
317d953ebb9b04cbad6891676df597bf0c542b1ec89cerion/* VISIBLE TO LIBVEX CLIENT */
318efa834abaded25c8aff2f3923e476ef7cc1d0396florianUInt LibVEX_GuestPPC32_get_XER ( /*IN*/const VexGuestPPC32State* vex_state )
319896a1373cfdbaa25f4ab73ed4f27554016defecccerion{
320b51f0f4f33256638ed953156a2635aa739b232f1sewardj   UInt w = 0;
321b51f0f4f33256638ed953156a2635aa739b232f1sewardj   w |= ( ((UInt)vex_state->guest_XER_BC) & 0xFF );
322b51f0f4f33256638ed953156a2635aa739b232f1sewardj   w |= ( (((UInt)vex_state->guest_XER_SO) & 0x1) << 31 );
323b51f0f4f33256638ed953156a2635aa739b232f1sewardj   w |= ( (((UInt)vex_state->guest_XER_OV) & 0x1) << 30 );
324b51f0f4f33256638ed953156a2635aa739b232f1sewardj   w |= ( (((UInt)vex_state->guest_XER_CA) & 0x1) << 29 );
325b51f0f4f33256638ed953156a2635aa739b232f1sewardj   return w;
326896a1373cfdbaa25f4ab73ed4f27554016defecccerion}
327896a1373cfdbaa25f4ab73ed4f27554016defecccerion
328b51f0f4f33256638ed953156a2635aa739b232f1sewardj
329896a1373cfdbaa25f4ab73ed4f27554016defecccerion/* VISIBLE TO LIBVEX CLIENT */
330d953ebb9b04cbad6891676df597bf0c542b1ec89cerion/* Note: %XER is 32 bits even for ppc64 */
331efa834abaded25c8aff2f3923e476ef7cc1d0396florianUInt LibVEX_GuestPPC64_get_XER ( /*IN*/const VexGuestPPC64State* vex_state )
332d953ebb9b04cbad6891676df597bf0c542b1ec89cerion{
333d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   UInt w = 0;
334d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   w |= ( ((UInt)vex_state->guest_XER_BC) & 0xFF );
335d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   w |= ( (((UInt)vex_state->guest_XER_SO) & 0x1) << 31 );
336d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   w |= ( (((UInt)vex_state->guest_XER_OV) & 0x1) << 30 );
337d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   w |= ( (((UInt)vex_state->guest_XER_CA) & 0x1) << 29 );
338d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   return w;
339d953ebb9b04cbad6891676df597bf0c542b1ec89cerion}
340d953ebb9b04cbad6891676df597bf0c542b1ec89cerion
341d953ebb9b04cbad6891676df597bf0c542b1ec89cerion
342d953ebb9b04cbad6891676df597bf0c542b1ec89cerion/* VISIBLE TO LIBVEX CLIENT */
343b51f0f4f33256638ed953156a2635aa739b232f1sewardjvoid LibVEX_GuestPPC32_put_XER ( UInt xer_native,
344b51f0f4f33256638ed953156a2635aa739b232f1sewardj                                 /*OUT*/VexGuestPPC32State* vex_state )
34551900a2deba4c16728d2b5ab40477def5362a4f0cerion{
346c7cd2142ff0172bd3702d0607426a8014d8842e5sewardj   vex_state->guest_XER_BC = toUChar(xer_native & 0xFF);
347c7cd2142ff0172bd3702d0607426a8014d8842e5sewardj   vex_state->guest_XER_SO = toUChar((xer_native >> 31) & 0x1);
348c7cd2142ff0172bd3702d0607426a8014d8842e5sewardj   vex_state->guest_XER_OV = toUChar((xer_native >> 30) & 0x1);
349c7cd2142ff0172bd3702d0607426a8014d8842e5sewardj   vex_state->guest_XER_CA = toUChar((xer_native >> 29) & 0x1);
35051900a2deba4c16728d2b5ab40477def5362a4f0cerion}
35151900a2deba4c16728d2b5ab40477def5362a4f0cerion
35220f4061cdd9ad51f68134126d1e5e116f0430edfsewardj/* VISIBLE TO LIBVEX CLIENT */
35320f4061cdd9ad51f68134126d1e5e116f0430edfsewardj/* Note: %XER is 32 bits even for ppc64 */
35420f4061cdd9ad51f68134126d1e5e116f0430edfsewardjvoid LibVEX_GuestPPC64_put_XER ( UInt xer_native,
35520f4061cdd9ad51f68134126d1e5e116f0430edfsewardj                                 /*OUT*/VexGuestPPC64State* vex_state )
35620f4061cdd9ad51f68134126d1e5e116f0430edfsewardj{
35720f4061cdd9ad51f68134126d1e5e116f0430edfsewardj   vex_state->guest_XER_BC = toUChar(xer_native & 0xFF);
35820f4061cdd9ad51f68134126d1e5e116f0430edfsewardj   vex_state->guest_XER_SO = toUChar((xer_native >> 31) & 0x1);
35920f4061cdd9ad51f68134126d1e5e116f0430edfsewardj   vex_state->guest_XER_OV = toUChar((xer_native >> 30) & 0x1);
36020f4061cdd9ad51f68134126d1e5e116f0430edfsewardj   vex_state->guest_XER_CA = toUChar((xer_native >> 29) & 0x1);
36120f4061cdd9ad51f68134126d1e5e116f0430edfsewardj}
362b51f0f4f33256638ed953156a2635aa739b232f1sewardj
36351900a2deba4c16728d2b5ab40477def5362a4f0cerion/* VISIBLE TO LIBVEX CLIENT */
3641515db99ce1abcd2147ac54aea1a7090c7895a43cerionvoid LibVEX_GuestPPC32_initialise ( /*OUT*/VexGuestPPC32State* vex_state )
365896a1373cfdbaa25f4ab73ed4f27554016defecccerion{
366aca070a5b3418a6a9b01e3c57a7eb0fbb5050908sewardj   Int i;
3673dee849ec7c38746749065e67dc53b75daa7617dsewardj   vex_state->host_EvC_FAILADDR = 0;
3683dee849ec7c38746749065e67dc53b75daa7617dsewardj   vex_state->host_EvC_COUNTER  = 0;
3693dee849ec7c38746749065e67dc53b75daa7617dsewardj   vex_state->pad3 = 0;
3703dee849ec7c38746749065e67dc53b75daa7617dsewardj   vex_state->pad4 = 0;
3713dee849ec7c38746749065e67dc53b75daa7617dsewardj
372896a1373cfdbaa25f4ab73ed4f27554016defecccerion   vex_state->guest_GPR0  = 0;
373896a1373cfdbaa25f4ab73ed4f27554016defecccerion   vex_state->guest_GPR1  = 0;
374896a1373cfdbaa25f4ab73ed4f27554016defecccerion   vex_state->guest_GPR2  = 0;
375896a1373cfdbaa25f4ab73ed4f27554016defecccerion   vex_state->guest_GPR3  = 0;
376896a1373cfdbaa25f4ab73ed4f27554016defecccerion   vex_state->guest_GPR4  = 0;
377896a1373cfdbaa25f4ab73ed4f27554016defecccerion   vex_state->guest_GPR5  = 0;
378896a1373cfdbaa25f4ab73ed4f27554016defecccerion   vex_state->guest_GPR6  = 0;
379896a1373cfdbaa25f4ab73ed4f27554016defecccerion   vex_state->guest_GPR7  = 0;
380896a1373cfdbaa25f4ab73ed4f27554016defecccerion   vex_state->guest_GPR8  = 0;
381896a1373cfdbaa25f4ab73ed4f27554016defecccerion   vex_state->guest_GPR9  = 0;
382896a1373cfdbaa25f4ab73ed4f27554016defecccerion   vex_state->guest_GPR10 = 0;
383896a1373cfdbaa25f4ab73ed4f27554016defecccerion   vex_state->guest_GPR11 = 0;
384896a1373cfdbaa25f4ab73ed4f27554016defecccerion   vex_state->guest_GPR12 = 0;
385896a1373cfdbaa25f4ab73ed4f27554016defecccerion   vex_state->guest_GPR13 = 0;
386896a1373cfdbaa25f4ab73ed4f27554016defecccerion   vex_state->guest_GPR14 = 0;
387896a1373cfdbaa25f4ab73ed4f27554016defecccerion   vex_state->guest_GPR15 = 0;
388896a1373cfdbaa25f4ab73ed4f27554016defecccerion   vex_state->guest_GPR16 = 0;
389896a1373cfdbaa25f4ab73ed4f27554016defecccerion   vex_state->guest_GPR17 = 0;
390896a1373cfdbaa25f4ab73ed4f27554016defecccerion   vex_state->guest_GPR18 = 0;
391896a1373cfdbaa25f4ab73ed4f27554016defecccerion   vex_state->guest_GPR19 = 0;
392896a1373cfdbaa25f4ab73ed4f27554016defecccerion   vex_state->guest_GPR20 = 0;
393896a1373cfdbaa25f4ab73ed4f27554016defecccerion   vex_state->guest_GPR21 = 0;
394896a1373cfdbaa25f4ab73ed4f27554016defecccerion   vex_state->guest_GPR22 = 0;
395896a1373cfdbaa25f4ab73ed4f27554016defecccerion   vex_state->guest_GPR23 = 0;
396896a1373cfdbaa25f4ab73ed4f27554016defecccerion   vex_state->guest_GPR24 = 0;
397896a1373cfdbaa25f4ab73ed4f27554016defecccerion   vex_state->guest_GPR25 = 0;
398896a1373cfdbaa25f4ab73ed4f27554016defecccerion   vex_state->guest_GPR26 = 0;
399896a1373cfdbaa25f4ab73ed4f27554016defecccerion   vex_state->guest_GPR27 = 0;
400896a1373cfdbaa25f4ab73ed4f27554016defecccerion   vex_state->guest_GPR28 = 0;
401d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   vex_state->guest_GPR29 = 0;
402d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   vex_state->guest_GPR30 = 0;
403d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   vex_state->guest_GPR31 = 0;
404d953ebb9b04cbad6891676df597bf0c542b1ec89cerion
405d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   /* Initialise the vector state. */
406d953ebb9b04cbad6891676df597bf0c542b1ec89cerion#  define VECZERO(_vr) _vr[0]=_vr[1]=_vr[2]=_vr[3] = 0;
407d953ebb9b04cbad6891676df597bf0c542b1ec89cerion
40866d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR0 );
40966d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR1 );
41066d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR2 );
41166d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR3 );
41266d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR4 );
41366d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR5 );
41466d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR6 );
41566d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR7 );
41666d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR8 );
41766d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR9 );
41866d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR10);
41966d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR11);
42066d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR12);
42166d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR13);
42266d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR14);
42366d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR15);
42466d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR16);
42566d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR17);
42666d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR18);
42766d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR19);
42866d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR20);
42966d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR21);
43066d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR22);
43166d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR23);
43266d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR24);
43366d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR25);
43466d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR26);
43566d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR27);
43666d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR28);
43766d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR29);
43866d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR30);
43966d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR31);
44066d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR32);
44166d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR33);
44266d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR34);
44366d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR35);
44466d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR36);
44566d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR37);
44666d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR38);
44766d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR39);
44866d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR40);
44966d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR41);
45066d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR42);
45166d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR43);
45266d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR44);
45366d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR45);
45466d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR46);
45566d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR47);
45666d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR48);
45766d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR49);
45866d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR50);
45966d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR51);
46066d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR52);
46166d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR53);
46266d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR54);
46366d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR55);
46466d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR56);
46566d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR57);
46666d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR58);
46766d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR59);
46866d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR60);
46966d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR61);
47066d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR62);
47166d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR63);
472d953ebb9b04cbad6891676df597bf0c542b1ec89cerion
473d953ebb9b04cbad6891676df597bf0c542b1ec89cerion#  undef VECZERO
474d953ebb9b04cbad6891676df597bf0c542b1ec89cerion
475d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   vex_state->guest_CIA  = 0;
476d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   vex_state->guest_LR   = 0;
477d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   vex_state->guest_CTR  = 0;
478d953ebb9b04cbad6891676df597bf0c542b1ec89cerion
479d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   vex_state->guest_XER_SO = 0;
480d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   vex_state->guest_XER_OV = 0;
481d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   vex_state->guest_XER_CA = 0;
482d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   vex_state->guest_XER_BC = 0;
483d953ebb9b04cbad6891676df597bf0c542b1ec89cerion
484d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   vex_state->guest_CR0_321 = 0;
485d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   vex_state->guest_CR0_0   = 0;
486d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   vex_state->guest_CR1_321 = 0;
487d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   vex_state->guest_CR1_0   = 0;
488d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   vex_state->guest_CR2_321 = 0;
489d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   vex_state->guest_CR2_0   = 0;
490d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   vex_state->guest_CR3_321 = 0;
491d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   vex_state->guest_CR3_0   = 0;
492d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   vex_state->guest_CR4_321 = 0;
493d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   vex_state->guest_CR4_0   = 0;
494d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   vex_state->guest_CR5_321 = 0;
495d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   vex_state->guest_CR5_0   = 0;
496d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   vex_state->guest_CR6_321 = 0;
497d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   vex_state->guest_CR6_0   = 0;
498d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   vex_state->guest_CR7_321 = 0;
499d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   vex_state->guest_CR7_0   = 0;
500d953ebb9b04cbad6891676df597bf0c542b1ec89cerion
501c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj   vex_state->guest_FPROUND  = PPCrm_NEAREST;
502c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj   vex_state->guest_DFPROUND = PPCrm_NEAREST;
5033dee849ec7c38746749065e67dc53b75daa7617dsewardj   vex_state->pad1 = 0;
5043dee849ec7c38746749065e67dc53b75daa7617dsewardj   vex_state->pad2 = 0;
505d953ebb9b04cbad6891676df597bf0c542b1ec89cerion
506d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   vex_state->guest_VRSAVE = 0;
507d953ebb9b04cbad6891676df597bf0c542b1ec89cerion
508d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   vex_state->guest_VSCR = 0x0;  // Non-Java mode = 0
509d953ebb9b04cbad6891676df597bf0c542b1ec89cerion
5106ef84bed9bb3af22060eb1759788034602bbcc88florian   vex_state->guest_EMNOTE = EmNote_NONE;
511d953ebb9b04cbad6891676df597bf0c542b1ec89cerion
51205f5e0172384dd2983fb16fbb7deebd74d71cd35sewardj   vex_state->guest_CMSTART = 0;
51305f5e0172384dd2983fb16fbb7deebd74d71cd35sewardj   vex_state->guest_CMLEN   = 0;
514d953ebb9b04cbad6891676df597bf0c542b1ec89cerion
515ce02aa77bc02dbe225a068df0fb6b31faddedcdfsewardj   vex_state->guest_NRADDR = 0;
516aca070a5b3418a6a9b01e3c57a7eb0fbb5050908sewardj   vex_state->guest_NRADDR_GPR2 = 0;
517aca070a5b3418a6a9b01e3c57a7eb0fbb5050908sewardj
518aca070a5b3418a6a9b01e3c57a7eb0fbb5050908sewardj   vex_state->guest_REDIR_SP = -1;
519aca070a5b3418a6a9b01e3c57a7eb0fbb5050908sewardj   for (i = 0; i < VEX_GUEST_PPC32_REDIR_STACK_SIZE; i++)
520aca070a5b3418a6a9b01e3c57a7eb0fbb5050908sewardj      vex_state->guest_REDIR_STACK[i] = 0;
521aca070a5b3418a6a9b01e3c57a7eb0fbb5050908sewardj
522e86310f555a233cc2ca02e1a5d0adb555f12bdcdsewardj   vex_state->guest_IP_AT_SYSCALL = 0;
523aca070a5b3418a6a9b01e3c57a7eb0fbb5050908sewardj   vex_state->guest_SPRG3_RO = 0;
5243dee849ec7c38746749065e67dc53b75daa7617dsewardj
5258943d02aa373f45c6e5fdcbe5947620285d442b1carll   vex_state->padding1 = 0;
5268943d02aa373f45c6e5fdcbe5947620285d442b1carll   vex_state->padding2 = 0;
527d953ebb9b04cbad6891676df597bf0c542b1ec89cerion}
528d953ebb9b04cbad6891676df597bf0c542b1ec89cerion
529d953ebb9b04cbad6891676df597bf0c542b1ec89cerion
530d953ebb9b04cbad6891676df597bf0c542b1ec89cerion/* VISIBLE TO LIBVEX CLIENT */
531d953ebb9b04cbad6891676df597bf0c542b1ec89cerionvoid LibVEX_GuestPPC64_initialise ( /*OUT*/VexGuestPPC64State* vex_state )
532d953ebb9b04cbad6891676df597bf0c542b1ec89cerion{
533be482aed27a2a57c2009eb0a68e42d1b19fdfdf6sewardj   Int i;
5343dee849ec7c38746749065e67dc53b75daa7617dsewardj   vex_state->host_EvC_FAILADDR = 0;
5353dee849ec7c38746749065e67dc53b75daa7617dsewardj   vex_state->host_EvC_COUNTER = 0;
5363dee849ec7c38746749065e67dc53b75daa7617dsewardj   vex_state->pad0 = 0;
537d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   vex_state->guest_GPR0  = 0;
538d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   vex_state->guest_GPR1  = 0;
539d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   vex_state->guest_GPR2  = 0;
540d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   vex_state->guest_GPR3  = 0;
541d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   vex_state->guest_GPR4  = 0;
542d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   vex_state->guest_GPR5  = 0;
543d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   vex_state->guest_GPR6  = 0;
544d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   vex_state->guest_GPR7  = 0;
545d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   vex_state->guest_GPR8  = 0;
546d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   vex_state->guest_GPR9  = 0;
547d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   vex_state->guest_GPR10 = 0;
548d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   vex_state->guest_GPR11 = 0;
549d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   vex_state->guest_GPR12 = 0;
550d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   vex_state->guest_GPR13 = 0;
551d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   vex_state->guest_GPR14 = 0;
552d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   vex_state->guest_GPR15 = 0;
553d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   vex_state->guest_GPR16 = 0;
554d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   vex_state->guest_GPR17 = 0;
555d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   vex_state->guest_GPR18 = 0;
556d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   vex_state->guest_GPR19 = 0;
557d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   vex_state->guest_GPR20 = 0;
558d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   vex_state->guest_GPR21 = 0;
559d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   vex_state->guest_GPR22 = 0;
560d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   vex_state->guest_GPR23 = 0;
561d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   vex_state->guest_GPR24 = 0;
562d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   vex_state->guest_GPR25 = 0;
563d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   vex_state->guest_GPR26 = 0;
564d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   vex_state->guest_GPR27 = 0;
565d953ebb9b04cbad6891676df597bf0c542b1ec89cerion   vex_state->guest_GPR28 = 0;
566896a1373cfdbaa25f4ab73ed4f27554016defecccerion   vex_state->guest_GPR29 = 0;
567896a1373cfdbaa25f4ab73ed4f27554016defecccerion   vex_state->guest_GPR30 = 0;
568896a1373cfdbaa25f4ab73ed4f27554016defecccerion   vex_state->guest_GPR31 = 0;
569896a1373cfdbaa25f4ab73ed4f27554016defecccerion
57051900a2deba4c16728d2b5ab40477def5362a4f0cerion   /* Initialise the vector state. */
571b51f0f4f33256638ed953156a2635aa739b232f1sewardj#  define VECZERO(_vr) _vr[0]=_vr[1]=_vr[2]=_vr[3] = 0;
572b51f0f4f33256638ed953156a2635aa739b232f1sewardj
57366d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR0 );
57466d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR1 );
57566d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR2 );
57666d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR3 );
57766d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR4 );
57866d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR5 );
57966d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR6 );
58066d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR7 );
58166d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR8 );
58266d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR9 );
58366d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR10);
58466d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR11);
58566d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR12);
58666d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR13);
58766d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR14);
58866d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR15);
58966d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR16);
59066d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR17);
59166d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR18);
59266d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR19);
59366d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR20);
59466d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR21);
59566d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR22);
59666d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR23);
59766d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR24);
59866d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR25);
59966d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR26);
60066d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR27);
60166d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR28);
60266d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR29);
60366d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR30);
60466d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR31);
60566d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR32);
60666d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR33);
60766d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR34);
60866d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR35);
60966d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR36);
61066d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR37);
61166d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR38);
61266d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR39);
61366d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR40);
61466d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR41);
61566d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR42);
61666d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR43);
61766d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR44);
61866d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR45);
61966d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR46);
62066d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR47);
62166d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR48);
62266d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR49);
62366d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR50);
62466d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR51);
62566d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR52);
62666d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR53);
62766d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR54);
62866d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR55);
62966d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR56);
63066d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR57);
63166d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR58);
63266d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR59);
63366d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR60);
63466d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR61);
63566d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR62);
63666d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj   VECZERO(vex_state->guest_VSR63);
637b51f0f4f33256638ed953156a2635aa739b232f1sewardj
638b51f0f4f33256638ed953156a2635aa739b232f1sewardj#  undef VECZERO
63951900a2deba4c16728d2b5ab40477def5362a4f0cerion
640db1941aff78d331d5eed56091a9dc861414654ebcerion   vex_state->guest_CIA  = 0;
64191ad5368eb6354ad4fabc86f2b2e641736997a38cerion   vex_state->guest_LR   = 0;
64291ad5368eb6354ad4fabc86f2b2e641736997a38cerion   vex_state->guest_CTR  = 0;
643896a1373cfdbaa25f4ab73ed4f27554016defecccerion
644b51f0f4f33256638ed953156a2635aa739b232f1sewardj   vex_state->guest_XER_SO = 0;
645b51f0f4f33256638ed953156a2635aa739b232f1sewardj   vex_state->guest_XER_OV = 0;
646b51f0f4f33256638ed953156a2635aa739b232f1sewardj   vex_state->guest_XER_CA = 0;
647b51f0f4f33256638ed953156a2635aa739b232f1sewardj   vex_state->guest_XER_BC = 0;
648b51f0f4f33256638ed953156a2635aa739b232f1sewardj
649b51f0f4f33256638ed953156a2635aa739b232f1sewardj   vex_state->guest_CR0_321 = 0;
650b51f0f4f33256638ed953156a2635aa739b232f1sewardj   vex_state->guest_CR0_0   = 0;
651b51f0f4f33256638ed953156a2635aa739b232f1sewardj   vex_state->guest_CR1_321 = 0;
652b51f0f4f33256638ed953156a2635aa739b232f1sewardj   vex_state->guest_CR1_0   = 0;
653b51f0f4f33256638ed953156a2635aa739b232f1sewardj   vex_state->guest_CR2_321 = 0;
654b51f0f4f33256638ed953156a2635aa739b232f1sewardj   vex_state->guest_CR2_0   = 0;
655b51f0f4f33256638ed953156a2635aa739b232f1sewardj   vex_state->guest_CR3_321 = 0;
656b51f0f4f33256638ed953156a2635aa739b232f1sewardj   vex_state->guest_CR3_0   = 0;
657b51f0f4f33256638ed953156a2635aa739b232f1sewardj   vex_state->guest_CR4_321 = 0;
658b51f0f4f33256638ed953156a2635aa739b232f1sewardj   vex_state->guest_CR4_0   = 0;
659b51f0f4f33256638ed953156a2635aa739b232f1sewardj   vex_state->guest_CR5_321 = 0;
660b51f0f4f33256638ed953156a2635aa739b232f1sewardj   vex_state->guest_CR5_0   = 0;
661b51f0f4f33256638ed953156a2635aa739b232f1sewardj   vex_state->guest_CR6_321 = 0;
662b51f0f4f33256638ed953156a2635aa739b232f1sewardj   vex_state->guest_CR6_0   = 0;
663b51f0f4f33256638ed953156a2635aa739b232f1sewardj   vex_state->guest_CR7_321 = 0;
664b51f0f4f33256638ed953156a2635aa739b232f1sewardj   vex_state->guest_CR7_0   = 0;
665db1941aff78d331d5eed56091a9dc861414654ebcerion
666c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj   vex_state->guest_FPROUND  = PPCrm_NEAREST;
667c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj   vex_state->guest_DFPROUND = PPCrm_NEAREST;
6683dee849ec7c38746749065e67dc53b75daa7617dsewardj   vex_state->pad1 = 0;
6693dee849ec7c38746749065e67dc53b75daa7617dsewardj   vex_state->pad2 = 0;
670094d1397b3f69b1a538e80ab509ea8cd75f4be3bcerion
67151900a2deba4c16728d2b5ab40477def5362a4f0cerion   vex_state->guest_VRSAVE = 0;
67251900a2deba4c16728d2b5ab40477def5362a4f0cerion
6738f3bc90e00591116b81ee5deb626266eeb3bc492cerion   vex_state->guest_VSCR = 0x0;  // Non-Java mode = 0
67451900a2deba4c16728d2b5ab40477def5362a4f0cerion
6756ef84bed9bb3af22060eb1759788034602bbcc88florian   vex_state->guest_EMNOTE = EmNote_NONE;
676094d1397b3f69b1a538e80ab509ea8cd75f4be3bcerion
677e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj   vex_state->padding = 0;
678ce02aa77bc02dbe225a068df0fb6b31faddedcdfsewardj
67905f5e0172384dd2983fb16fbb7deebd74d71cd35sewardj   vex_state->guest_CMSTART = 0;
68005f5e0172384dd2983fb16fbb7deebd74d71cd35sewardj   vex_state->guest_CMLEN   = 0;
6817787af415a9104b601c2f0ce5b56749e4fd86691sewardj
682ce02aa77bc02dbe225a068df0fb6b31faddedcdfsewardj   vex_state->guest_NRADDR = 0;
6835ff11ddafe3e0080711657a1cf581e1a64dbf117sewardj   vex_state->guest_NRADDR_GPR2 = 0;
684be482aed27a2a57c2009eb0a68e42d1b19fdfdf6sewardj
685be482aed27a2a57c2009eb0a68e42d1b19fdfdf6sewardj   vex_state->guest_REDIR_SP = -1;
686be482aed27a2a57c2009eb0a68e42d1b19fdfdf6sewardj   for (i = 0; i < VEX_GUEST_PPC64_REDIR_STACK_SIZE; i++)
687be482aed27a2a57c2009eb0a68e42d1b19fdfdf6sewardj      vex_state->guest_REDIR_STACK[i] = 0;
688aca070a5b3418a6a9b01e3c57a7eb0fbb5050908sewardj
689e86310f555a233cc2ca02e1a5d0adb555f12bdcdsewardj   vex_state->guest_IP_AT_SYSCALL = 0;
690aca070a5b3418a6a9b01e3c57a7eb0fbb5050908sewardj   vex_state->guest_SPRG3_RO = 0;
6918943d02aa373f45c6e5fdcbe5947620285d442b1carll   vex_state->guest_TFHAR  = 0;
6928943d02aa373f45c6e5fdcbe5947620285d442b1carll   vex_state->guest_TFIAR  = 0;
6938943d02aa373f45c6e5fdcbe5947620285d442b1carll   vex_state->guest_TEXASR = 0;
694896a1373cfdbaa25f4ab73ed4f27554016defecccerion}
695896a1373cfdbaa25f4ab73ed4f27554016defecccerion
696896a1373cfdbaa25f4ab73ed4f27554016defecccerion
697896a1373cfdbaa25f4ab73ed4f27554016defecccerion/*-----------------------------------------------------------*/
6987594920259781fa292dd6a3b27beb63f5875c308cerion/*--- Describing the ppc guest state, for the benefit     ---*/
699896a1373cfdbaa25f4ab73ed4f27554016defecccerion/*--- of iropt and instrumenters.                         ---*/
700896a1373cfdbaa25f4ab73ed4f27554016defecccerion/*-----------------------------------------------------------*/
701896a1373cfdbaa25f4ab73ed4f27554016defecccerion
702896a1373cfdbaa25f4ab73ed4f27554016defecccerion/* Figure out if any part of the guest state contained in minoff
703896a1373cfdbaa25f4ab73ed4f27554016defecccerion   .. maxoff requires precise memory exceptions.  If in doubt return
704896a1373cfdbaa25f4ab73ed4f27554016defecccerion   True (but this is generates significantly slower code).
705e523a4bfe8e515b9223fc0a1a40d434963d60850sewardj
706e523a4bfe8e515b9223fc0a1a40d434963d60850sewardj   By default we enforce precise exns for guest R1 (stack pointer),
707e523a4bfe8e515b9223fc0a1a40d434963d60850sewardj   CIA (current insn address) and LR (link register).  These are the
7087594920259781fa292dd6a3b27beb63f5875c308cerion   minimum needed to extract correct stack backtraces from ppc
709e523a4bfe8e515b9223fc0a1a40d434963d60850sewardj   code. [[NB: not sure if keeping LR up to date is actually
710e523a4bfe8e515b9223fc0a1a40d434963d60850sewardj   necessary.]]
7116c46befd9eb90c1b6e739926c1fa335cba75bf46philippe
7126c46befd9eb90c1b6e739926c1fa335cba75bf46philippe   Only R1 is needed in mode VexRegUpdSpAtMemAccess.
713896a1373cfdbaa25f4ab73ed4f27554016defecccerion*/
714ca2c3c75784d35d136fc7c952717cdee5063c193sewardjBool guest_ppc32_state_requires_precise_mem_exns (
715ca2c3c75784d35d136fc7c952717cdee5063c193sewardj        Int minoff, Int maxoff, VexRegisterUpdates pxControl
716ca2c3c75784d35d136fc7c952717cdee5063c193sewardj     )
717896a1373cfdbaa25f4ab73ed4f27554016defecccerion{
718e523a4bfe8e515b9223fc0a1a40d434963d60850sewardj   Int lr_min  = offsetof(VexGuestPPC32State, guest_LR);
719e523a4bfe8e515b9223fc0a1a40d434963d60850sewardj   Int lr_max  = lr_min + 4 - 1;
720e523a4bfe8e515b9223fc0a1a40d434963d60850sewardj   Int r1_min  = offsetof(VexGuestPPC32State, guest_GPR1);
721e523a4bfe8e515b9223fc0a1a40d434963d60850sewardj   Int r1_max  = r1_min + 4 - 1;
722e523a4bfe8e515b9223fc0a1a40d434963d60850sewardj   Int cia_min = offsetof(VexGuestPPC32State, guest_CIA);
723e523a4bfe8e515b9223fc0a1a40d434963d60850sewardj   Int cia_max = cia_min + 4 - 1;
724e523a4bfe8e515b9223fc0a1a40d434963d60850sewardj
7256c46befd9eb90c1b6e739926c1fa335cba75bf46philippe   if (maxoff < r1_min || minoff > r1_max) {
7266c46befd9eb90c1b6e739926c1fa335cba75bf46philippe      /* no overlap with R1 */
727ca2c3c75784d35d136fc7c952717cdee5063c193sewardj      if (pxControl == VexRegUpdSpAtMemAccess)
7286c46befd9eb90c1b6e739926c1fa335cba75bf46philippe         return False; // We only need to check stack pointer.
729e523a4bfe8e515b9223fc0a1a40d434963d60850sewardj   } else {
730e523a4bfe8e515b9223fc0a1a40d434963d60850sewardj      return True;
731e523a4bfe8e515b9223fc0a1a40d434963d60850sewardj   }
732e523a4bfe8e515b9223fc0a1a40d434963d60850sewardj
7336c46befd9eb90c1b6e739926c1fa335cba75bf46philippe   if (maxoff < lr_min || minoff > lr_max) {
7346c46befd9eb90c1b6e739926c1fa335cba75bf46philippe      /* no overlap with LR */
735e523a4bfe8e515b9223fc0a1a40d434963d60850sewardj   } else {
736e523a4bfe8e515b9223fc0a1a40d434963d60850sewardj      return True;
737e523a4bfe8e515b9223fc0a1a40d434963d60850sewardj   }
738e523a4bfe8e515b9223fc0a1a40d434963d60850sewardj
739e523a4bfe8e515b9223fc0a1a40d434963d60850sewardj   if (maxoff < cia_min || minoff > cia_max) {
740e523a4bfe8e515b9223fc0a1a40d434963d60850sewardj      /* no overlap with CIA */
741e523a4bfe8e515b9223fc0a1a40d434963d60850sewardj   } else {
742e523a4bfe8e515b9223fc0a1a40d434963d60850sewardj      return True;
743e523a4bfe8e515b9223fc0a1a40d434963d60850sewardj   }
744896a1373cfdbaa25f4ab73ed4f27554016defecccerion
745e523a4bfe8e515b9223fc0a1a40d434963d60850sewardj   return False;
746e523a4bfe8e515b9223fc0a1a40d434963d60850sewardj}
747896a1373cfdbaa25f4ab73ed4f27554016defecccerion
748ca2c3c75784d35d136fc7c952717cdee5063c193sewardjBool guest_ppc64_state_requires_precise_mem_exns (
749ca2c3c75784d35d136fc7c952717cdee5063c193sewardj        Int minoff, Int maxoff, VexRegisterUpdates pxControl
750ca2c3c75784d35d136fc7c952717cdee5063c193sewardj     )
751f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion{
7525ff11ddafe3e0080711657a1cf581e1a64dbf117sewardj   /* Given that R2 is a Big Deal in the ELF ppc64 ABI, it seems
7535ff11ddafe3e0080711657a1cf581e1a64dbf117sewardj      prudent to be conservative with it, even though thus far there
7545ff11ddafe3e0080711657a1cf581e1a64dbf117sewardj      is no evidence to suggest that it actually needs to be kept up
7555ff11ddafe3e0080711657a1cf581e1a64dbf117sewardj      to date wrt possible exceptions. */
756f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion   Int lr_min  = offsetof(VexGuestPPC64State, guest_LR);
75709bbf50cddb05bc35d646bf8b422c807696b8fd1sewardj   Int lr_max  = lr_min + 8 - 1;
758f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion   Int r1_min  = offsetof(VexGuestPPC64State, guest_GPR1);
75909bbf50cddb05bc35d646bf8b422c807696b8fd1sewardj   Int r1_max  = r1_min + 8 - 1;
7605ff11ddafe3e0080711657a1cf581e1a64dbf117sewardj   Int r2_min  = offsetof(VexGuestPPC64State, guest_GPR2);
7615ff11ddafe3e0080711657a1cf581e1a64dbf117sewardj   Int r2_max  = r2_min + 8 - 1;
762f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion   Int cia_min = offsetof(VexGuestPPC64State, guest_CIA);
76309bbf50cddb05bc35d646bf8b422c807696b8fd1sewardj   Int cia_max = cia_min + 8 - 1;
764f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion
7656c46befd9eb90c1b6e739926c1fa335cba75bf46philippe   if (maxoff < r1_min || minoff > r1_max) {
7666c46befd9eb90c1b6e739926c1fa335cba75bf46philippe      /* no overlap with R1 */
767ca2c3c75784d35d136fc7c952717cdee5063c193sewardj      if (pxControl == VexRegUpdSpAtMemAccess)
7686c46befd9eb90c1b6e739926c1fa335cba75bf46philippe         return False; // We only need to check stack pointer.
769f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion   } else {
770f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion      return True;
771f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion   }
772f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion
7736c46befd9eb90c1b6e739926c1fa335cba75bf46philippe   if (maxoff < lr_min || minoff > lr_max) {
7746c46befd9eb90c1b6e739926c1fa335cba75bf46philippe      /* no overlap with LR */
775f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion   } else {
776f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion      return True;
777f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion   }
778f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion
7795ff11ddafe3e0080711657a1cf581e1a64dbf117sewardj   if (maxoff < r2_min || minoff > r2_max) {
7805ff11ddafe3e0080711657a1cf581e1a64dbf117sewardj      /* no overlap with R2 */
7815ff11ddafe3e0080711657a1cf581e1a64dbf117sewardj   } else {
7825ff11ddafe3e0080711657a1cf581e1a64dbf117sewardj      return True;
7835ff11ddafe3e0080711657a1cf581e1a64dbf117sewardj   }
7845ff11ddafe3e0080711657a1cf581e1a64dbf117sewardj
785f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion   if (maxoff < cia_min || minoff > cia_max) {
786f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion      /* no overlap with CIA */
787f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion   } else {
788f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion      return True;
789f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion   }
790f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion
791f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion   return False;
792f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion}
793f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion
794896a1373cfdbaa25f4ab73ed4f27554016defecccerion
795f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion#define ALWAYSDEFD32(field)                           \
7961515db99ce1abcd2147ac54aea1a7090c7895a43cerion    { offsetof(VexGuestPPC32State, field),            \
7971515db99ce1abcd2147ac54aea1a7090c7895a43cerion      (sizeof ((VexGuestPPC32State*)0)->field) }
798896a1373cfdbaa25f4ab73ed4f27554016defecccerion
799896a1373cfdbaa25f4ab73ed4f27554016defecccerionVexGuestLayout
8001515db99ce1abcd2147ac54aea1a7090c7895a43cerion   ppc32Guest_layout
801896a1373cfdbaa25f4ab73ed4f27554016defecccerion      = {
802896a1373cfdbaa25f4ab73ed4f27554016defecccerion          /* Total size of the guest state, in bytes. */
8031515db99ce1abcd2147ac54aea1a7090c7895a43cerion          .total_sizeB = sizeof(VexGuestPPC32State),
804896a1373cfdbaa25f4ab73ed4f27554016defecccerion
805896a1373cfdbaa25f4ab73ed4f27554016defecccerion          /* Describe the stack pointer. */
8061515db99ce1abcd2147ac54aea1a7090c7895a43cerion          .offset_SP = offsetof(VexGuestPPC32State,guest_GPR1),
807896a1373cfdbaa25f4ab73ed4f27554016defecccerion          .sizeof_SP = 4,
808896a1373cfdbaa25f4ab73ed4f27554016defecccerion
809a203330aad67bc3e52ca1395a55e94ef9a091223sewardj          /* Describe the frame pointer. */
810a203330aad67bc3e52ca1395a55e94ef9a091223sewardj          .offset_FP = offsetof(VexGuestPPC32State,guest_GPR1),
811a203330aad67bc3e52ca1395a55e94ef9a091223sewardj          .sizeof_FP = 4,
812a203330aad67bc3e52ca1395a55e94ef9a091223sewardj
813896a1373cfdbaa25f4ab73ed4f27554016defecccerion          /* Describe the instruction pointer. */
8141515db99ce1abcd2147ac54aea1a7090c7895a43cerion          .offset_IP = offsetof(VexGuestPPC32State,guest_CIA),
815db1941aff78d331d5eed56091a9dc861414654ebcerion          .sizeof_IP = 4,
816896a1373cfdbaa25f4ab73ed4f27554016defecccerion
817896a1373cfdbaa25f4ab73ed4f27554016defecccerion          /* Describe any sections to be regarded by Memcheck as
818896a1373cfdbaa25f4ab73ed4f27554016defecccerion             'always-defined'. */
819e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj          .n_alwaysDefd = 11,
820896a1373cfdbaa25f4ab73ed4f27554016defecccerion
821896a1373cfdbaa25f4ab73ed4f27554016defecccerion          .alwaysDefd
822f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion	  = { /*  0 */ ALWAYSDEFD32(guest_CIA),
8236ef84bed9bb3af22060eb1759788034602bbcc88florian	      /*  1 */ ALWAYSDEFD32(guest_EMNOTE),
82405f5e0172384dd2983fb16fbb7deebd74d71cd35sewardj	      /*  2 */ ALWAYSDEFD32(guest_CMSTART),
82505f5e0172384dd2983fb16fbb7deebd74d71cd35sewardj	      /*  3 */ ALWAYSDEFD32(guest_CMLEN),
826f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion	      /*  4 */ ALWAYSDEFD32(guest_VSCR),
827f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion	      /*  5 */ ALWAYSDEFD32(guest_FPROUND),
828e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj              /*  6 */ ALWAYSDEFD32(guest_NRADDR),
829e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj	      /*  7 */ ALWAYSDEFD32(guest_NRADDR_GPR2),
830e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj	      /*  8 */ ALWAYSDEFD32(guest_REDIR_SP),
831e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj	      /*  9 */ ALWAYSDEFD32(guest_REDIR_STACK),
832e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj	      /* 10 */ ALWAYSDEFD32(guest_IP_AT_SYSCALL)
8339759a81d44beb5b565b2e038d63e2f0c7b51933csewardj            }
834896a1373cfdbaa25f4ab73ed4f27554016defecccerion        };
835896a1373cfdbaa25f4ab73ed4f27554016defecccerion
836f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion#define ALWAYSDEFD64(field)                           \
837f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion    { offsetof(VexGuestPPC64State, field),            \
838f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion      (sizeof ((VexGuestPPC64State*)0)->field) }
839f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion
840f0de28cf1a762b0d6f74c93d3532c89a230673bbcerionVexGuestLayout
841f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion   ppc64Guest_layout
842f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion      = {
843f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion          /* Total size of the guest state, in bytes. */
844f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion          .total_sizeB = sizeof(VexGuestPPC64State),
845f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion
846f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion          /* Describe the stack pointer. */
847f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion          .offset_SP = offsetof(VexGuestPPC64State,guest_GPR1),
84809bbf50cddb05bc35d646bf8b422c807696b8fd1sewardj          .sizeof_SP = 8,
849f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion
850a203330aad67bc3e52ca1395a55e94ef9a091223sewardj          /* Describe the frame pointer. */
851a203330aad67bc3e52ca1395a55e94ef9a091223sewardj          .offset_FP = offsetof(VexGuestPPC64State,guest_GPR1),
852a203330aad67bc3e52ca1395a55e94ef9a091223sewardj          .sizeof_FP = 8,
853a203330aad67bc3e52ca1395a55e94ef9a091223sewardj
854f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion          /* Describe the instruction pointer. */
855f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion          .offset_IP = offsetof(VexGuestPPC64State,guest_CIA),
85609bbf50cddb05bc35d646bf8b422c807696b8fd1sewardj          .sizeof_IP = 8,
857f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion
858f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion          /* Describe any sections to be regarded by Memcheck as
859f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion             'always-defined'. */
8609c2f13d0d9730eb8134c09e6684fdc9796c137b7sewardj          .n_alwaysDefd = 11,
861f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion
862f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion          .alwaysDefd
863f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion	  = { /*  0 */ ALWAYSDEFD64(guest_CIA),
8646ef84bed9bb3af22060eb1759788034602bbcc88florian	      /*  1 */ ALWAYSDEFD64(guest_EMNOTE),
86505f5e0172384dd2983fb16fbb7deebd74d71cd35sewardj	      /*  2 */ ALWAYSDEFD64(guest_CMSTART),
86605f5e0172384dd2983fb16fbb7deebd74d71cd35sewardj	      /*  3 */ ALWAYSDEFD64(guest_CMLEN),
867f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion	      /*  4 */ ALWAYSDEFD64(guest_VSCR),
868f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion	      /*  5 */ ALWAYSDEFD64(guest_FPROUND),
869e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj	      /*  6 */ ALWAYSDEFD64(guest_NRADDR),
870e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj	      /*  7 */ ALWAYSDEFD64(guest_NRADDR_GPR2),
871e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj	      /*  8 */ ALWAYSDEFD64(guest_REDIR_SP),
872e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj	      /*  9 */ ALWAYSDEFD64(guest_REDIR_STACK),
873e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj	      /* 10 */ ALWAYSDEFD64(guest_IP_AT_SYSCALL)
874f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion            }
875f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion        };
876896a1373cfdbaa25f4ab73ed4f27554016defecccerion
877896a1373cfdbaa25f4ab73ed4f27554016defecccerion/*---------------------------------------------------------------*/
878cef7d3e3df4796e35b4521158d9dc058f034aa87sewardj/*--- end                                 guest_ppc_helpers.c ---*/
879896a1373cfdbaa25f4ab73ed4f27554016defecccerion/*---------------------------------------------------------------*/
880