* Makefile.in (clean): Remove new files.

(powerpc-32.o, powerpc-32.c, powerpc-e500.o, powerpc-e500.c)
	(powerpc-64.o, powerpc-64.c): New rules.
	* configure.srv: Use alternate register sets for powerpc64-*-linux*
	with AltiVec, powerpc-*-linux* with AltiVec, and powerpc-*-linux*
	with SPE.
	* linux-ppc-low.c (ppc_regmap): Do not fetch the FP registers for
	SPE targets.
	(ppc_cannot_store_register): Do not check for FPSCR for SPE targets.
	(PTRACE_GETVRREGS, PTRACE_SETVRREGS, SIZEOF_VRREGS, ppc_fill_vrregset)
	(ppc_store_vrregset, PTRACE_GETEVRREGS, PTRACE_SETEVRREGS)
	(struct gdb_evrregset_t, ppc_fill_evrregset, ppc_store_evrregset): New.
	(target_regsets): Add AltiVec and SPE register sets.
	* configure.ac: Check for AltiVec and SPE.
	* linux-ppc64-low.c (PTRACE_GETVRREGS, PTRACE_SETVRREGS, SIZEOF_VRREGS)
	(ppc_fill_vrregset, ppc_store_vrregset): New.
	(target_regsets): Add AltiVec register set.
	* configure: Regenerated.

	* features/Makefile (WHICH): Add PowerPC register definitions.
	(rs6000/powerpc-32-expedite, rs6000/powerpc-e500-expedite)
	(rs6000/powerpc-64-expedite): New macros.
	($(outdir)/%.dat): Handle subdirectories.
	* regformats/rs6000/powerpc-32.dat, regformats/rs6000/powerpc-64.dat,
	regformats/rs6000/powerpc-e500.dat: New generated files.
This commit is contained in:
Daniel Jacobowitz 2007-10-15 19:58:17 +00:00
parent 310a98e102
commit 30ed0a8f0b
12 changed files with 610 additions and 8 deletions

View File

@ -1,3 +1,12 @@
2007-10-15 Daniel Jacobowitz <dan@codesourcery.com>
* features/Makefile (WHICH): Add PowerPC register definitions.
(rs6000/powerpc-32-expedite, rs6000/powerpc-e500-expedite)
(rs6000/powerpc-64-expedite): New macros.
($(outdir)/%.dat): Handle subdirectories.
* regformats/rs6000/powerpc-32.dat, regformats/rs6000/powerpc-64.dat,
regformats/rs6000/powerpc-e500.dat: New generated files.
2007-10-15 Daniel Jacobowitz <dan@codesourcery.com>
* ppc-linux-nat.c (ppc_linux_read_description): New.

View File

@ -31,12 +31,16 @@
# in the GDB repository. To generate C files:
# make GDB=/path/to/gdb XMLTOC="xml files" cfiles
WHICH = arm-with-iwmmxt mips-linux mips64-linux
WHICH = arm-with-iwmmxt mips-linux mips64-linux \
rs6000/powerpc-32 rs6000/powerpc-e500 rs6000/powerpc-64
# Record which registers should be sent to GDB by default after stop.
arm-with-iwmmxt-expedite = r11,sp,pc
mips-linux-expedite = r29,pc
mips64-linux-expedite = r29,pc
rs6000/powerpc-32-expedite = r1,pc
rs6000/powerpc-e500-expedite = r1,pc
rs6000/powerpc-64-expedite = r1,pc
XSLTPROC = xsltproc
outdir = ../regformats
@ -50,9 +54,9 @@ all: $(OUTPUTS)
$(outdir)/%.dat: %.xml number-regs.xsl sort-regs.xsl gdbserver-regs.xsl
echo "# DO NOT EDIT: generated from $<" > $(outdir)/$*.tmp
echo "name:`echo $* | sed 's/-/_/g'`" >> $(outdir)/$*.tmp
echo "name:`echo $(notdir $*) | sed 's/-/_/g'`" >> $(outdir)/$*.tmp
echo "expedite:$($*-expedite)" >> $(outdir)/$*.tmp
$(XSLTPROC) --xinclude number-regs.xsl $< | \
$(XSLTPROC) --path "$(PWD)" --xinclude number-regs.xsl $< | \
$(XSLTPROC) sort-regs.xsl - | \
$(XSLTPROC) gdbserver-regs.xsl - >> $(outdir)/$*.tmp
sh ../../move-if-change $(outdir)/$*.tmp $(outdir)/$*.dat

View File

@ -1,3 +1,24 @@
2007-10-15 Daniel Jacobowitz <dan@codesourcery.com>
* Makefile.in (clean): Remove new files.
(powerpc-32.o, powerpc-32.c, powerpc-e500.o, powerpc-e500.c)
(powerpc-64.o, powerpc-64.c): New rules.
* configure.srv: Use alternate register sets for powerpc64-*-linux*
with AltiVec, powerpc-*-linux* with AltiVec, and powerpc-*-linux*
with SPE.
* linux-ppc-low.c (ppc_regmap): Do not fetch the FP registers for
SPE targets.
(ppc_cannot_store_register): Do not check for FPSCR for SPE targets.
(PTRACE_GETVRREGS, PTRACE_SETVRREGS, SIZEOF_VRREGS, ppc_fill_vrregset)
(ppc_store_vrregset, PTRACE_GETEVRREGS, PTRACE_SETEVRREGS)
(struct gdb_evrregset_t, ppc_fill_evrregset, ppc_store_evrregset): New.
(target_regsets): Add AltiVec and SPE register sets.
* configure.ac: Check for AltiVec and SPE.
* linux-ppc64-low.c (PTRACE_GETVRREGS, PTRACE_SETVRREGS, SIZEOF_VRREGS)
(ppc_fill_vrregset, ppc_store_vrregset): New.
(target_regsets): Add AltiVec register set.
* configure: Regenerated.
2007-09-19 Daniel Jacobowitz <dan@codesourcery.com>
* linux-low.c (O_LARGEFILE): Define.

View File

@ -219,6 +219,7 @@ clean:
rm -f reg-ppc.c reg-sh.c reg-spu.c reg-x86-64.c reg-i386-linux.c
rm -f reg-cris.c reg-crisv32.c reg-x86-64-linux.c
rm -f arm-with-iwmmxt.c mips-linux.c mips64-linux.c
rm -f powerpc-32.c powerpc-64.c powerpc-e500.c
rm -f xml-builtin.c stamp-xml target.xml
maintainer-clean realclean distclean: clean
@ -356,6 +357,15 @@ reg-ppc.c : $(srcdir)/../regformats/reg-ppc.dat $(regdat_sh)
reg-ppc64.o : reg-ppc64.c $(regdef_h)
reg-ppc64.c : $(srcdir)/../regformats/reg-ppc64.dat $(regdat_sh)
sh $(regdat_sh) $(srcdir)/../regformats/reg-ppc64.dat reg-ppc64.c
powerpc-32.o : powerpc-32.c $(regdef_h)
powerpc-32.c : $(srcdir)/../regformats/rs6000/powerpc-32.dat $(regdat_sh)
sh $(regdat_sh) $(srcdir)/../regformats/rs6000/powerpc-32.dat powerpc-32.c
powerpc-e500.o : powerpc-e500.c $(regdef_h)
powerpc-e500.c : $(srcdir)/../regformats/rs6000/powerpc-e500.dat $(regdat_sh)
sh $(regdat_sh) $(srcdir)/../regformats/rs6000/powerpc-e500.dat powerpc-e500.c
powerpc-64.o : powerpc-64.c $(regdef_h)
powerpc-64.c : $(srcdir)/../regformats/rs6000/powerpc-64.dat $(regdat_sh)
sh $(regdat_sh) $(srcdir)/../regformats/rs6000/powerpc-64.dat powerpc-64.c
reg-s390.o : reg-s390.c $(regdef_h)
reg-s390.c : $(srcdir)/../regformats/reg-s390.dat $(regdat_sh)
sh $(regdat_sh) $(srcdir)/../regformats/reg-s390.dat reg-s390.c

View File

@ -3567,6 +3567,70 @@ fi
echo "$as_me:$LINENO: result: $gdb_cv_arm_iwmmxt" >&5
echo "${ECHO_T}$gdb_cv_arm_iwmmxt" >&6
;;
powerpc*-*-*)
echo "$as_me:$LINENO: checking if Altivec is selected" >&5
echo $ECHO_N "checking if Altivec is selected... $ECHO_C" >&6
if test "${gdb_cv_ppc_altivec+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
save_CPPFLAGS="$CPPFLAGS"
CPPFLAGS="$CPPFLAGS $CFLAGS"
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
#ifdef __ALTIVEC__
got it
#endif
_ACEOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
$EGREP "got it" >/dev/null 2>&1; then
gdb_cv_ppc_altivec=yes
else
gdb_cv_ppc_altivec=no
fi
rm -f conftest*
CPPFLAGS="$save_CPPFLAGS"
fi
echo "$as_me:$LINENO: result: $gdb_cv_ppc_altivec" >&5
echo "${ECHO_T}$gdb_cv_ppc_altivec" >&6
echo "$as_me:$LINENO: checking if SPE is selected" >&5
echo $ECHO_N "checking if SPE is selected... $ECHO_C" >&6
if test "${gdb_cv_ppc_spe+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
save_CPPFLAGS="$CPPFLAGS"
CPPFLAGS="$CPPFLAGS $CFLAGS"
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
#ifdef __SPE__
got it
#endif
_ACEOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
$EGREP "got it" >/dev/null 2>&1; then
gdb_cv_ppc_spe=yes
else
gdb_cv_ppc_spe=no
fi
rm -f conftest*
CPPFLAGS="$save_CPPFLAGS"
fi
echo "$as_me:$LINENO: result: $gdb_cv_ppc_spe" >&5
echo "${ECHO_T}$gdb_cv_ppc_spe" >&6
;;
esac
. ${srcdir}/configure.srv

View File

@ -81,6 +81,28 @@ got it
[gdb_cv_arm_iwmmxt=no])
CPPFLAGS="$save_CPPFLAGS"])
;;
powerpc*-*-*)
AC_CACHE_CHECK([if Altivec is selected], [gdb_cv_ppc_altivec],
[save_CPPFLAGS="$CPPFLAGS"
CPPFLAGS="$CPPFLAGS $CFLAGS"
AC_EGREP_CPP([got it], [
#ifdef __ALTIVEC__
got it
#endif
], [gdb_cv_ppc_altivec=yes],
[gdb_cv_ppc_altivec=no])
CPPFLAGS="$save_CPPFLAGS"])
AC_CACHE_CHECK([if SPE is selected], [gdb_cv_ppc_spe],
[save_CPPFLAGS="$CPPFLAGS"
CPPFLAGS="$CPPFLAGS $CFLAGS"
AC_EGREP_CPP([got it], [
#ifdef __SPE__
got it
#endif
], [gdb_cv_ppc_spe=yes],
[gdb_cv_ppc_spe=no])
CPPFLAGS="$save_CPPFLAGS"])
;;
esac
. ${srcdir}/configure.srv

View File

@ -99,17 +99,38 @@ case "${target}" in
srv_linux_usrregs=yes
srv_linux_thread_db=yes
;;
powerpc64-*-linux*) srv_regobj=reg-ppc64.o
srv_tgtobj="linux-low.o linux-ppc64-low.o"
powerpc64-*-linux*) srv_tgtobj="linux-low.o linux-ppc64-low.o"
srv_linux_usrregs=yes
srv_linux_regsets=yes
srv_linux_thread_db=yes
if test $gdb_cv_ppc_altivec = yes; then
srv_regobj=powerpc-64.o
srv_xmltarget=rs6000/powerpc-64.xml
srv_xmlfiles="rs6000/power-altivec.xml"
srv_xmlfiles="$srv_xmlfiles rs6000/power64-core.xml"
srv_xmlfiles="$srv_xmlfiles rs6000/power-fpu.xml"
else
srv_regobj=reg-ppc64.o
fi
;;
powerpc-*-linux*) srv_regobj=reg-ppc.o
srv_tgtobj="linux-low.o linux-ppc-low.o"
powerpc-*-linux*) srv_tgtobj="linux-low.o linux-ppc-low.o"
srv_linux_usrregs=yes
srv_linux_regsets=yes
srv_linux_thread_db=yes
if test $gdb_cv_ppc_altivec = yes; then
srv_regobj=powerpc-32.o
srv_xmltarget=rs6000/powerpc-32.xml
srv_xmlfiles="rs6000/power-altivec.xml"
srv_xmlfiles="$srv_xmlfiles rs6000/power-core.xml"
srv_xmlfiles="$srv_xmlfiles rs6000/power-fpu.xml"
elif test $gdb_cv_ppc_spe = yes; then
srv_regobj=powerpc-e500.o
srv_xmltarget=rs6000/powerpc-e500.xml
srv_xmlfiles="rs6000/power-spe.xml"
srv_xmlfiles="$srv_xmlfiles rs6000/power-core.xml"
else
srv_regobj=reg-ppc.o
fi
;;
s390-*-linux*) srv_regobj=reg-s390.o
srv_tgtobj="linux-low.o linux-s390-low.o"

View File

@ -35,6 +35,16 @@ static int ppc_regmap[] =
PT_R20 * 4, PT_R21 * 4, PT_R22 * 4, PT_R23 * 4,
PT_R24 * 4, PT_R25 * 4, PT_R26 * 4, PT_R27 * 4,
PT_R28 * 4, PT_R29 * 4, PT_R30 * 4, PT_R31 * 4,
#ifdef __SPE__
-1, -1, -1, -1,
-1, -1, -1, -1,
-1, -1, -1, -1,
-1, -1, -1, -1,
-1, -1, -1, -1,
-1, -1, -1, -1,
-1, -1, -1, -1,
-1, -1, -1, -1,
#else
PT_FPR0*4, PT_FPR0*4 + 8, PT_FPR0*4+16, PT_FPR0*4+24,
PT_FPR0*4+32, PT_FPR0*4+40, PT_FPR0*4+48, PT_FPR0*4+56,
PT_FPR0*4+64, PT_FPR0*4+72, PT_FPR0*4+80, PT_FPR0*4+88,
@ -43,15 +53,23 @@ static int ppc_regmap[] =
PT_FPR0*4+160, PT_FPR0*4+168, PT_FPR0*4+176, PT_FPR0*4+184,
PT_FPR0*4+192, PT_FPR0*4+200, PT_FPR0*4+208, PT_FPR0*4+216,
PT_FPR0*4+224, PT_FPR0*4+232, PT_FPR0*4+240, PT_FPR0*4+248,
#endif
PT_NIP * 4, PT_MSR * 4, PT_CCR * 4, PT_LNK * 4,
PT_CTR * 4, PT_XER * 4, PT_FPSCR * 4, };
#ifdef __SPE__
PT_CTR * 4, PT_XER * 4, -1
#else
PT_CTR * 4, PT_XER * 4, PT_FPSCR * 4
#endif
};
static int
ppc_cannot_store_register (int regno)
{
#ifndef __SPE__
/* Some kernels do not allow us to store fpscr. */
if (regno == find_regno ("fpscr"))
return 2;
#endif
return 0;
}
@ -113,7 +131,101 @@ static void ppc_fill_gregset (void *buf)
collect_register (i, (char *) buf + ppc_regmap[i]);
}
#ifdef __ALTIVEC__
#ifndef PTRACE_GETVRREGS
#define PTRACE_GETVRREGS 18
#define PTRACE_SETVRREGS 19
#endif
#define SIZEOF_VRREGS 33*16+4
static void
ppc_fill_vrregset (void *buf)
{
int i, base;
char *regset = buf;
base = find_regno ("vr0");
for (i = 0; i < 32; i++)
collect_register (base + i, &regset[i * 16]);
collect_register_by_name ("vscr", &regset[32 * 16 + 12]);
collect_register_by_name ("vrsave", &regset[33 * 16]);
}
static void
ppc_store_vrregset (const void *buf)
{
int i, base;
const char *regset = buf;
base = find_regno ("vr0");
for (i = 0; i < 32; i++)
supply_register (base + i, &regset[i * 16]);
supply_register_by_name ("vscr", &regset[32 * 16 + 12]);
supply_register_by_name ("vrsave", &regset[33 * 16]);
}
#endif /* __ALTIVEC__ */
#ifdef __SPE__
#ifndef PTRACE_GETEVRREGS
#define PTRACE_GETEVRREGS 20
#define PTRACE_SETEVRREGS 21
#endif
struct gdb_evrregset_t
{
unsigned long evr[32];
unsigned long long acc;
unsigned long spefscr;
};
static void
ppc_fill_evrregset (void *buf)
{
int i, ev0;
struct gdb_evrregset_t *regset = buf;
ev0 = find_regno ("ev0h");
for (i = 0; i < 32; i++)
collect_register (ev0 + i, &regset->evr[i]);
collect_register_by_name ("acc", &regset->acc);
collect_register_by_name ("spefscr", &regset->spefscr);
}
static void
ppc_store_evrregset (const void *buf)
{
int i, ev0;
const struct gdb_evrregset_t *regset = buf;
ev0 = find_regno ("ev0h");
for (i = 0; i < 32; i++)
supply_register (ev0 + i, &regset->evr[i]);
supply_register_by_name ("acc", &regset->acc);
supply_register_by_name ("spefscr", &regset->spefscr);
}
#endif /* __SPE__ */
struct regset_info target_regsets[] = {
/* List the extra register sets before GENERAL_REGS. That way we will
fetch them every time, but still fall back to PTRACE_PEEKUSER for the
general registers. Some kernels support these, but not the newer
PPC_PTRACE_GETREGS. */
#ifdef __ALTIVEC__
{ PTRACE_GETVRREGS, PTRACE_SETVRREGS, SIZEOF_VRREGS, EXTENDED_REGS,
ppc_fill_vrregset, ppc_store_vrregset },
#endif
#ifdef __SPE__
{ PTRACE_GETEVRREGS, PTRACE_SETEVRREGS, 32 * 4 + 8 + 4, EXTENDED_REGS,
ppc_fill_evrregset, ppc_store_evrregset },
#endif
{ 0, 0, 0, GENERAL_REGS, ppc_fill_gregset, NULL },
{ 0, 0, -1, -1, NULL, NULL }
};

View File

@ -109,7 +109,54 @@ static void ppc_fill_gregset (void *buf)
collect_register (i, (char *) buf + ppc_regmap[i]);
}
#ifdef __ALTIVEC__
#ifndef PTRACE_GETVRREGS
#define PTRACE_GETVRREGS 18
#define PTRACE_SETVRREGS 19
#endif
#define SIZEOF_VRREGS 33*16+4
static void
ppc_fill_vrregset (void *buf)
{
int i, base;
char *regset = buf;
base = find_regno ("vr0");
for (i = 0; i < 32; i++)
collect_register (base + i, &regset[i * 16]);
collect_register_by_name ("vscr", &regset[32 * 16 + 12]);
collect_register_by_name ("vrsave", &regset[33 * 16]);
}
static void
ppc_store_vrregset (const void *buf)
{
int i, base;
const char *regset = buf;
base = find_regno ("vr0");
for (i = 0; i < 32; i++)
supply_register (base + i, &regset[i * 16]);
supply_register_by_name ("vscr", &regset[32 * 16 + 12]);
supply_register_by_name ("vrsave", &regset[33 * 16]);
}
#endif /* __ALTIVEC__ */
struct regset_info target_regsets[] = {
/* List the extra register sets before GENERAL_REGS. That way we will
fetch them every time, but still fall back to PTRACE_PEEKUSER for the
general registers. Some kernels support these, but not the newer
PPC_PTRACE_GETREGS. */
#ifdef __ALTIVEC__
{ PTRACE_GETVRREGS, PTRACE_SETVRREGS, SIZEOF_VRREGS, EXTENDED_REGS,
ppc_fill_vrregset, ppc_store_vrregset },
#endif
{ 0, 0, 0, GENERAL_REGS, ppc_fill_gregset, NULL },
{ 0, 0, -1, -1, NULL, NULL }
};

View File

@ -0,0 +1,108 @@
# DO NOT EDIT: generated from rs6000/powerpc-32.xml
name:powerpc_32
expedite:r1,pc
32:r0
32:r1
32:r2
32:r3
32:r4
32:r5
32:r6
32:r7
32:r8
32:r9
32:r10
32:r11
32:r12
32:r13
32:r14
32:r15
32:r16
32:r17
32:r18
32:r19
32:r20
32:r21
32:r22
32:r23
32:r24
32:r25
32:r26
32:r27
32:r28
32:r29
32:r30
32:r31
64:f0
64:f1
64:f2
64:f3
64:f4
64:f5
64:f6
64:f7
64:f8
64:f9
64:f10
64:f11
64:f12
64:f13
64:f14
64:f15
64:f16
64:f17
64:f18
64:f19
64:f20
64:f21
64:f22
64:f23
64:f24
64:f25
64:f26
64:f27
64:f28
64:f29
64:f30
64:f31
32:pc
32:msr
32:cr
32:lr
32:ctr
32:xer
32:fpscr
128:vr0
128:vr1
128:vr2
128:vr3
128:vr4
128:vr5
128:vr6
128:vr7
128:vr8
128:vr9
128:vr10
128:vr11
128:vr12
128:vr13
128:vr14
128:vr15
128:vr16
128:vr17
128:vr18
128:vr19
128:vr20
128:vr21
128:vr22
128:vr23
128:vr24
128:vr25
128:vr26
128:vr27
128:vr28
128:vr29
128:vr30
128:vr31
32:vscr
32:vrsave

View File

@ -0,0 +1,108 @@
# DO NOT EDIT: generated from rs6000/powerpc-64.xml
name:powerpc_64
expedite:r1,pc
64:r0
64:r1
64:r2
64:r3
64:r4
64:r5
64:r6
64:r7
64:r8
64:r9
64:r10
64:r11
64:r12
64:r13
64:r14
64:r15
64:r16
64:r17
64:r18
64:r19
64:r20
64:r21
64:r22
64:r23
64:r24
64:r25
64:r26
64:r27
64:r28
64:r29
64:r30
64:r31
64:f0
64:f1
64:f2
64:f3
64:f4
64:f5
64:f6
64:f7
64:f8
64:f9
64:f10
64:f11
64:f12
64:f13
64:f14
64:f15
64:f16
64:f17
64:f18
64:f19
64:f20
64:f21
64:f22
64:f23
64:f24
64:f25
64:f26
64:f27
64:f28
64:f29
64:f30
64:f31
64:pc
64:msr
32:cr
64:lr
64:ctr
32:xer
32:fpscr
128:vr0
128:vr1
128:vr2
128:vr3
128:vr4
128:vr5
128:vr6
128:vr7
128:vr8
128:vr9
128:vr10
128:vr11
128:vr12
128:vr13
128:vr14
128:vr15
128:vr16
128:vr17
128:vr18
128:vr19
128:vr20
128:vr21
128:vr22
128:vr23
128:vr24
128:vr25
128:vr26
128:vr27
128:vr28
128:vr29
128:vr30
128:vr31
32:vscr
32:vrsave

View File

@ -0,0 +1,76 @@
# DO NOT EDIT: generated from rs6000/powerpc-e500.xml
name:powerpc_e500
expedite:r1,pc
32:r0
32:r1
32:r2
32:r3
32:r4
32:r5
32:r6
32:r7
32:r8
32:r9
32:r10
32:r11
32:r12
32:r13
32:r14
32:r15
32:r16
32:r17
32:r18
32:r19
32:r20
32:r21
32:r22
32:r23
32:r24
32:r25
32:r26
32:r27
32:r28
32:r29
32:r30
32:r31
32:ev0h
32:ev1h
32:ev2h
32:ev3h
32:ev4h
32:ev5h
32:ev6h
32:ev7h
32:ev8h
32:ev9h
32:ev10h
32:ev11h
32:ev12h
32:ev13h
32:ev14h
32:ev15h
32:ev16h
32:ev17h
32:ev18h
32:ev19h
32:ev20h
32:ev21h
32:ev22h
32:ev23h
32:ev24h
32:ev25h
32:ev26h
32:ev27h
32:ev28h
32:ev29h
32:ev30h
32:ev31h
32:pc
32:msr
32:cr
32:lr
32:ctr
32:xer
0:
64:acc
32:spefscr