/*------------------------------------------------------------*/
/*--- Helper functions. ---*/
/*------------------------------------------------------------*/
-void s390x_dirtyhelper_00(VexGuestS390XState *guest_state);
void s390x_dirtyhelper_EX(ULong torun);
ULong s390x_dirtyhelper_STCK(ULong *addr);
ULong s390x_dirtyhelper_STCKF(ULong *addr);
}
};
-/*------------------------------------------------------------*/
-/*--- Dirty helper for invalid opcode 00 ---*/
-/*------------------------------------------------------------*/
-#if defined(VGA_s390x)
-void
-s390x_dirtyhelper_00(VexGuestS390XState *guest_state)
-{
- /* Avoid infinite loop in case SIGILL is caught. See also
- none/tests/s390x/op_exception.c */
- guest_state->guest_IA += 2;
-
- asm volatile(".hword 0\n");
-}
-#else
-void s390x_dirtyhelper_00(VexGuestS390XState *guest_state) { }
-#endif
-
/*------------------------------------------------------------*/
/*--- Dirty helper for EXecute ---*/
/*------------------------------------------------------------*/
/*--- Build IR for opcodes ---*/
/*------------------------------------------------------------*/
-static HChar *
-s390_irgen_00(UChar r1 __attribute__((unused)),
- UChar r2 __attribute__((unused)))
-{
- IRDirty *d;
-
- d = unsafeIRDirty_0_N (0, "s390x_dirtyhelper_00", &s390x_dirtyhelper_00,
- mkIRExprVec_0());
- d->needsBBP = 1; /* Need to pass pointer to guest state to helper */
-
- d->nFxState = 1;
- vex_bzero(&d->fxState, sizeof(d->fxState));
-
- d->fxState[0].fx = Ifx_Modify; /* read then write */
- d->fxState[0].offset = S390X_GUEST_OFFSET(guest_IA);
- d->fxState[0].size = sizeof(ULong);
-
- stmt(IRStmt_Dirty(d));
-
- return "00";
-}
-
static HChar *
s390_irgen_AR(UChar r1, UChar r2)
{
((char *)(&ovl.value))[1] = bytes[1];
switch (ovl.value & 0xffff) {
- case 0x0000: /* invalid opcode */
- s390_format_RR_RR(s390_irgen_00, 0, 0); goto ok;
case 0x0101: /* PR */ goto unimplemented;
case 0x0102: /* UPT */ goto unimplemented;
case 0x0104: /* PTFF */ goto unimplemented;