[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v5 01/17] x86emul: support most memory accessing MMX/SSE{, 2, 3} insns
>>> On 03.03.17 at 15:58, <JBeulich@xxxxxxxx> wrote: > @@ -6183,6 +6579,76 @@ x86_emulate( > goto cannot_emulate; > } > > + if ( state->simd_size ) > + { > +#ifdef __XEN__ > + uint8_t *buf = stub.ptr; > +#else > + uint8_t *buf = get_stub(stub); > +#endif > + > + generate_exception_if(!op_bytes, EXC_UD); > + generate_exception_if(vex.opcx && (d & TwoOp) && vex.reg != 0xf, > + EXC_UD); > + > + if ( !buf ) > + BUG(); > + if ( vex.opcx == vex_none ) > + SET_SSE_PREFIX(buf[0], vex.pfx); > + > + buf[fic.insn_bytes] = 0xc3; > + copy_REX_VEX(buf, rex_prefix, vex); > + > + if ( ea.type == OP_MEM ) > + { > + uint32_t mxcsr = 0; > + > + if ( op_bytes < 16 || > + (vex.opcx > + ? /* vmov{a,nt}p{s,d} are exceptions. */ > + ext != ext_0f || ((b | 1) != 0x29 && b != 0x2b) > + : /* movup{s,d} and lddqu are exceptions. */ > + ext == ext_0f && ((b | 1) == 0x11 || b == 0xf0)) ) > + mxcsr = MXCSR_MM; > + else if ( vcpu_has_misalignsse() ) > + asm ( "stmxcsr %0" : "=m" (mxcsr) ); > + generate_exception_if(!(mxcsr & MXCSR_MM) && > + !is_aligned(ea.mem.seg, ea.mem.off, > op_bytes, > + ctxt, ops), > + EXC_GP, 0); > + if ( (d & SrcMask) == SrcMem ) > + { > + rc = ops->read(ea.mem.seg, ea.mem.off, mmvalp, op_bytes, > ctxt); > + if ( rc != X86EMUL_OKAY ) > + goto done; > + dst.type = OP_NONE; > + } > + else if ( (d & DstMask) == DstMem ) > + { > + fail_if(!ops->write); /* Check before running the stub. */ > + ASSERT(d & Mov); > + dst.type = OP_MEM; > + dst.bytes = op_bytes; > + dst.mem = ea.mem; > + } > + else if ( (d & SrcMask) == SrcMem16 ) > + dst.type = OP_NONE; > + else > + { > + ASSERT_UNREACHABLE(); > + return X86EMUL_UNHANDLEABLE; I've changed this to "goto cannot_emulate" to be on the safe side on production builds (to avoid bypassing put_fpu() / put_stub()). Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |