UChar* guest_code,
Long delta,
Addr64 guest_IP,
+ VexArch guest_arch,
VexArchInfo* archinfo,
Bool host_bigendian );
UChar* guest_code_IN,
Long delta,
Addr64 guest_IP,
+ VexArch guest_arch,
VexArchInfo* archinfo,
Bool host_bigendian_IN )
{
DisResult dres;
/* Set globals (see top of this file) */
+ vassert(guest_arch == VexArchAMD64);
guest_code = guest_code_IN;
irbb = irbb_IN;
host_is_bigendian = host_bigendian_IN;
/*IN*/ Addr64 guest_IP_bbstart,
/*IN*/ Bool (*chase_into_ok)(void*,Addr64),
/*IN*/ Bool host_bigendian,
+ /*IN*/ VexArch arch_guest,
/*IN*/ VexArchInfo* archinfo_guest,
/*IN*/ IRType guest_word_type,
/*IN*/ Bool do_self_check,
guest_code,
delta,
guest_IP_curr_instr,
+ arch_guest,
archinfo_guest,
host_bigendian );
/*IN*/ Addr64 guest_IP,
/* Info about the guest architecture */
+ /*IN*/ VexArch guest_arch,
/*IN*/ VexArchInfo* archinfo,
/* Is the host bigendian? */
/*IN*/ Addr64 guest_IP_bbstart,
/*IN*/ Bool (*chase_into_ok)(void*,Addr64),
/*IN*/ Bool host_bigendian,
+ /*IN*/ VexArch arch_guest,
/*IN*/ VexArchInfo* archinfo_guest,
/*IN*/ IRType guest_word_type,
/*IN*/ Bool do_self_check,
UChar* guest_code,
Long delta,
Addr64 guest_IP,
+ VexArch guest_arch,
VexArchInfo* archinfo,
Bool host_bigendian );
UChar* guest_code_IN,
Long delta,
Addr64 guest_IP,
+ VexArch guest_arch,
VexArchInfo* archinfo,
Bool host_bigendian_IN )
{
IRType ty;
DisResult dres;
- Bool is32, is64;
UInt mask32, mask64;
UInt hwcaps_guest = archinfo->hwcaps;
+ vassert(guest_arch == VexArchPPC32 || guest_arch == VexArchPPC64);
+
/* global -- ick */
- mode64 = False;
+ mode64 = guest_arch == VexArchPPC64;
+ ty = mode64 ? Ity_I64 : Ity_I32;
- /* Figure out whether we're being ppc32 or ppc64 today. */
+ /* do some sanity checks */
mask32 = VEX_HWCAPS_PPC32_F | VEX_HWCAPS_PPC32_V
| VEX_HWCAPS_PPC32_FX | VEX_HWCAPS_PPC32_GX;
- is32 = (hwcaps_guest & mask32) > 0;
-
mask64 = VEX_HWCAPS_PPC64_V
| VEX_HWCAPS_PPC64_FX | VEX_HWCAPS_PPC64_GX;
- is64 = (hwcaps_guest & mask64) > 0;
-
- if (is32 && !is64)
- mode64 = False;
- else if (is64 && !is32)
- mode64 = True;
- else
- vpanic("distInstr_PPC: illegal subarch");
-
-
- ty = mode64 ? Ity_I64 : Ity_I32;
+ if (mode64) {
+ vassert((hwcaps_guest & mask32) == 0);
+ } else {
+ vassert((hwcaps_guest & mask64) == 0);
+ }
/* Set globals (see top of this file) */
guest_code = guest_code_IN;
UChar* guest_code,
Long delta,
Addr64 guest_IP,
+ VexArch guest_arch,
VexArchInfo* archinfo,
Bool host_bigendian );
UChar* guest_code_IN,
Long delta,
Addr64 guest_IP,
+ VexArch guest_arch,
VexArchInfo* archinfo,
Bool host_bigendian_IN )
{
DisResult dres;
/* Set globals (see top of this file) */
+ vassert(guest_arch == VexArchX86);
guest_code = guest_code_IN;
irbb = irbb_IN;
host_is_bigendian = host_bigendian_IN;
vta->guest_bytes_addr,
vta->chase_into_ok,
host_is_bigendian,
+ vta->arch_guest,
&vta->archinfo_guest,
guest_word_type,
vta->do_self_check,