Lines Matching full:ac

88 static floatx80 do_fldt(X86Access *ac, target_ulong ptr)  in do_fldt()  argument
92 temp.l.lower = access_ldq(ac, ptr); in do_fldt()
93 temp.l.upper = access_ldw(ac, ptr + 8); in do_fldt()
97 static void do_fstt(X86Access *ac, target_ulong ptr, floatx80 f) in do_fstt() argument
102 access_stq(ac, ptr, temp.l.lower); in do_fstt()
103 access_stw(ac, ptr + 8, temp.l.upper); in do_fstt()
448 X86Access ac; in helper_fldt_ST0() local
450 access_prepare(&ac, env, ptr, 10, MMU_DATA_LOAD, GETPC()); in helper_fldt_ST0()
453 env->fpregs[new_fpstt].d = do_fldt(&ac, ptr); in helper_fldt_ST0()
460 X86Access ac; in helper_fstt_ST0() local
462 access_prepare(&ac, env, ptr, 10, MMU_DATA_STORE, GETPC()); in helper_fstt_ST0()
463 do_fstt(&ac, ptr, ST0); in helper_fstt_ST0()
841 X86Access ac; in helper_fbld_ST0() local
847 access_prepare(&ac, env, ptr, 10, MMU_DATA_LOAD, GETPC()); in helper_fbld_ST0()
851 v = access_ldb(&ac, ptr + i); in helper_fbld_ST0()
855 if (access_ldb(&ac, ptr + 9) & 0x80) { in helper_fbld_ST0()
869 X86Access ac; in helper_fbst_ST0() local
871 access_prepare(&ac, env, ptr, 10, MMU_DATA_STORE, GETPC()); in helper_fbst_ST0()
879 access_stb(&ac, mem_ref++, 0); in helper_fbst_ST0()
881 access_stb(&ac, mem_ref++, 0xc0); in helper_fbst_ST0()
882 access_stb(&ac, mem_ref++, 0xff); in helper_fbst_ST0()
883 access_stb(&ac, mem_ref++, 0xff); in helper_fbst_ST0()
889 access_stb(&ac, mem_end, 0x80); in helper_fbst_ST0()
892 access_stb(&ac, mem_end, 0x00); in helper_fbst_ST0()
901 access_stb(&ac, mem_ref++, v); in helper_fbst_ST0()
904 access_stb(&ac, mem_ref++, 0); in helper_fbst_ST0()
2444 static void do_fstenv(X86Access *ac, target_ulong ptr, int data32) in do_fstenv() argument
2446 CPUX86State *env = ac->env; in do_fstenv()
2473 access_stl(ac, ptr, env->fpuc); in do_fstenv()
2474 access_stl(ac, ptr + 4, fpus); in do_fstenv()
2475 access_stl(ac, ptr + 8, fptag); in do_fstenv()
2476 access_stl(ac, ptr + 12, env->fpip); /* fpip */ in do_fstenv()
2477 access_stl(ac, ptr + 16, env->fpcs); /* fpcs */ in do_fstenv()
2478 access_stl(ac, ptr + 20, env->fpdp); /* fpoo */ in do_fstenv()
2479 access_stl(ac, ptr + 24, env->fpds); /* fpos */ in do_fstenv()
2482 access_stw(ac, ptr, env->fpuc); in do_fstenv()
2483 access_stw(ac, ptr + 2, fpus); in do_fstenv()
2484 access_stw(ac, ptr + 4, fptag); in do_fstenv()
2485 access_stw(ac, ptr + 6, env->fpip); in do_fstenv()
2486 access_stw(ac, ptr + 8, env->fpcs); in do_fstenv()
2487 access_stw(ac, ptr + 10, env->fpdp); in do_fstenv()
2488 access_stw(ac, ptr + 12, env->fpds); in do_fstenv()
2494 X86Access ac; in helper_fstenv() local
2496 access_prepare(&ac, env, ptr, 14 << data32, MMU_DATA_STORE, GETPC()); in helper_fstenv()
2497 do_fstenv(&ac, ptr, data32); in helper_fstenv()
2516 static void do_fldenv(X86Access *ac, target_ulong ptr, int data32) in do_fldenv() argument
2519 CPUX86State *env = ac->env; in do_fldenv()
2521 cpu_set_fpuc(env, access_ldw(ac, ptr)); in do_fldenv()
2522 fpus = access_ldw(ac, ptr + (2 << data32)); in do_fldenv()
2523 fptag = access_ldw(ac, ptr + (4 << data32)); in do_fldenv()
2534 X86Access ac; in helper_fldenv() local
2536 access_prepare(&ac, env, ptr, 14 << data32, MMU_DATA_STORE, GETPC()); in helper_fldenv()
2537 do_fldenv(&ac, ptr, data32); in helper_fldenv()
2540 static void do_fsave(X86Access *ac, target_ulong ptr, int data32) in do_fsave() argument
2542 CPUX86State *env = ac->env; in do_fsave()
2544 do_fstenv(ac, ptr, data32); in do_fsave()
2549 do_fstt(ac, ptr, tmp); in do_fsave()
2559 X86Access ac; in helper_fsave() local
2561 access_prepare(&ac, env, ptr, size, MMU_DATA_STORE, GETPC()); in helper_fsave()
2562 do_fsave(&ac, ptr, data32); in helper_fsave()
2565 static void do_frstor(X86Access *ac, target_ulong ptr, int data32) in do_frstor() argument
2567 CPUX86State *env = ac->env; in do_frstor()
2569 do_fldenv(ac, ptr, data32); in do_frstor()
2573 floatx80 tmp = do_fldt(ac, ptr); in do_frstor()
2582 X86Access ac; in helper_frstor() local
2584 access_prepare(&ac, env, ptr, size, MMU_DATA_LOAD, GETPC()); in helper_frstor()
2585 do_frstor(&ac, ptr, data32); in helper_frstor()
2590 static void do_xsave_fpu(X86Access *ac, target_ulong ptr) in do_xsave_fpu() argument
2592 CPUX86State *env = ac->env; in do_xsave_fpu()
2602 access_stw(ac, ptr + XO(legacy.fcw), env->fpuc); in do_xsave_fpu()
2603 access_stw(ac, ptr + XO(legacy.fsw), fpus); in do_xsave_fpu()
2604 access_stw(ac, ptr + XO(legacy.ftw), fptag ^ 0xff); in do_xsave_fpu()
2609 access_stq(ac, ptr + XO(legacy.fpip), 0); /* eip+sel; rip */ in do_xsave_fpu()
2610 access_stq(ac, ptr + XO(legacy.fpdp), 0); /* edp+sel; rdp */ in do_xsave_fpu()
2616 do_fstt(ac, addr, tmp); in do_xsave_fpu()
2621 static void do_xsave_mxcsr(X86Access *ac, target_ulong ptr) in do_xsave_mxcsr() argument
2623 CPUX86State *env = ac->env; in do_xsave_mxcsr()
2626 access_stl(ac, ptr + XO(legacy.mxcsr), env->mxcsr); in do_xsave_mxcsr()
2627 access_stl(ac, ptr + XO(legacy.mxcsr_mask), 0x0000ffff); in do_xsave_mxcsr()
2630 static void do_xsave_sse(X86Access *ac, target_ulong ptr) in do_xsave_sse() argument
2632 CPUX86State *env = ac->env; in do_xsave_sse()
2644 access_stq(ac, addr, env->xmm_regs[i].ZMM_Q(0)); in do_xsave_sse()
2645 access_stq(ac, addr + 8, env->xmm_regs[i].ZMM_Q(1)); in do_xsave_sse()
2650 static void do_xsave_ymmh(X86Access *ac, target_ulong ptr) in do_xsave_ymmh() argument
2652 CPUX86State *env = ac->env; in do_xsave_ymmh()
2662 access_stq(ac, ptr, env->xmm_regs[i].ZMM_Q(2)); in do_xsave_ymmh()
2663 access_stq(ac, ptr + 8, env->xmm_regs[i].ZMM_Q(3)); in do_xsave_ymmh()
2667 static void do_xsave_bndregs(X86Access *ac, target_ulong ptr) in do_xsave_bndregs() argument
2669 CPUX86State *env = ac->env; in do_xsave_bndregs()
2674 access_stq(ac, addr, env->bnd_regs[i].lb); in do_xsave_bndregs()
2675 access_stq(ac, addr + 8, env->bnd_regs[i].ub); in do_xsave_bndregs()
2679 static void do_xsave_bndcsr(X86Access *ac, target_ulong ptr) in do_xsave_bndcsr() argument
2681 CPUX86State *env = ac->env; in do_xsave_bndcsr()
2683 access_stq(ac, ptr + offsetof(XSaveBNDCSR, bndcsr.cfgu), in do_xsave_bndcsr()
2685 access_stq(ac, ptr + offsetof(XSaveBNDCSR, bndcsr.sts), in do_xsave_bndcsr()
2689 static void do_xsave_pkru(X86Access *ac, target_ulong ptr) in do_xsave_pkru() argument
2691 access_stq(ac, ptr, ac->env->pkru); in do_xsave_pkru()
2694 static void do_fxsave(X86Access *ac, target_ulong ptr) in do_fxsave() argument
2696 CPUX86State *env = ac->env; in do_fxsave()
2698 do_xsave_fpu(ac, ptr); in do_fxsave()
2700 do_xsave_mxcsr(ac, ptr); in do_fxsave()
2705 do_xsave_sse(ac, ptr); in do_fxsave()
2713 X86Access ac; in helper_fxsave() local
2720 access_prepare(&ac, env, ptr, sizeof(X86LegacyXSaveArea), in helper_fxsave()
2722 do_fxsave(&ac, ptr); in helper_fxsave()
2739 static void do_xsave_access(X86Access *ac, target_ulong ptr, uint64_t rfbm, in do_xsave_access() argument
2745 do_xsave_fpu(ac, ptr); in do_xsave_access()
2749 do_xsave_mxcsr(ac, ptr); in do_xsave_access()
2752 do_xsave_sse(ac, ptr); in do_xsave_access()
2755 do_xsave_ymmh(ac, ptr + XO(avx_state)); in do_xsave_access()
2758 do_xsave_bndregs(ac, ptr + XO(bndreg_state)); in do_xsave_access()
2761 do_xsave_bndcsr(ac, ptr + XO(bndcsr_state)); in do_xsave_access()
2764 do_xsave_pkru(ac, ptr + XO(pkru_state)); in do_xsave_access()
2768 old_bv = access_ldq(ac, ptr + XO(header.xstate_bv)); in do_xsave_access()
2770 access_stq(ac, ptr + XO(header.xstate_bv), new_bv); in do_xsave_access()
2789 X86Access ac; in do_xsave() local
2799 access_prepare(&ac, env, ptr, size, MMU_DATA_STORE, ra); in do_xsave()
2800 do_xsave_access(&ac, ptr, rfbm, inuse, opt); in do_xsave()
2814 static void do_xrstor_fpu(X86Access *ac, target_ulong ptr) in do_xrstor_fpu() argument
2816 CPUX86State *env = ac->env; in do_xrstor_fpu()
2820 fpuc = access_ldw(ac, ptr + XO(legacy.fcw)); in do_xrstor_fpu()
2821 fpus = access_ldw(ac, ptr + XO(legacy.fsw)); in do_xrstor_fpu()
2822 fptag = access_ldw(ac, ptr + XO(legacy.ftw)); in do_xrstor_fpu()
2834 floatx80 tmp = do_fldt(ac, addr); in do_xrstor_fpu()
2840 static void do_xrstor_mxcsr(X86Access *ac, target_ulong ptr) in do_xrstor_mxcsr() argument
2842 CPUX86State *env = ac->env; in do_xrstor_mxcsr()
2843 cpu_set_mxcsr(env, access_ldl(ac, ptr + XO(legacy.mxcsr))); in do_xrstor_mxcsr()
2846 static void do_xrstor_sse(X86Access *ac, target_ulong ptr) in do_xrstor_sse() argument
2848 CPUX86State *env = ac->env; in do_xrstor_sse()
2860 env->xmm_regs[i].ZMM_Q(0) = access_ldq(ac, addr); in do_xrstor_sse()
2861 env->xmm_regs[i].ZMM_Q(1) = access_ldq(ac, addr + 8); in do_xrstor_sse()
2882 static void do_xrstor_ymmh(X86Access *ac, target_ulong ptr) in do_xrstor_ymmh() argument
2884 CPUX86State *env = ac->env; in do_xrstor_ymmh()
2894 env->xmm_regs[i].ZMM_Q(2) = access_ldq(ac, ptr); in do_xrstor_ymmh()
2895 env->xmm_regs[i].ZMM_Q(3) = access_ldq(ac, ptr + 8); in do_xrstor_ymmh()
2915 static void do_xrstor_bndregs(X86Access *ac, target_ulong ptr) in do_xrstor_bndregs() argument
2917 CPUX86State *env = ac->env; in do_xrstor_bndregs()
2922 env->bnd_regs[i].lb = access_ldq(ac, addr); in do_xrstor_bndregs()
2923 env->bnd_regs[i].ub = access_ldq(ac, addr + 8); in do_xrstor_bndregs()
2927 static void do_xrstor_bndcsr(X86Access *ac, target_ulong ptr) in do_xrstor_bndcsr() argument
2929 CPUX86State *env = ac->env; in do_xrstor_bndcsr()
2933 = access_ldq(ac, ptr + offsetof(XSaveBNDCSR, bndcsr.cfgu)); in do_xrstor_bndcsr()
2935 = access_ldq(ac, ptr + offsetof(XSaveBNDCSR, bndcsr.sts)); in do_xrstor_bndcsr()
2938 static void do_xrstor_pkru(X86Access *ac, target_ulong ptr) in do_xrstor_pkru() argument
2940 ac->env->pkru = access_ldq(ac, ptr); in do_xrstor_pkru()
2943 static void do_fxrstor(X86Access *ac, target_ulong ptr) in do_fxrstor() argument
2945 CPUX86State *env = ac->env; in do_fxrstor()
2947 do_xrstor_fpu(ac, ptr); in do_fxrstor()
2949 do_xrstor_mxcsr(ac, ptr); in do_fxrstor()
2954 do_xrstor_sse(ac, ptr); in do_fxrstor()
2962 X86Access ac; in helper_fxrstor() local
2969 access_prepare(&ac, env, ptr, sizeof(X86LegacyXSaveArea), in helper_fxrstor()
2971 do_fxrstor(&ac, ptr); in helper_fxrstor()
2974 static bool valid_xrstor_header(X86Access *ac, uint64_t *pxsbv, in valid_xrstor_header() argument
2979 xstate_bv = access_ldq(ac, ptr + XO(header.xstate_bv)); in valid_xrstor_header()
2980 xcomp_bv = access_ldq(ac, ptr + XO(header.xcomp_bv)); in valid_xrstor_header()
2981 reserve0 = access_ldq(ac, ptr + XO(header.reserve0)); in valid_xrstor_header()
2995 return (xstate_bv & ~ac->env->xcr0) == 0; in valid_xrstor_header()
2998 static void do_xrstor(X86Access *ac, target_ulong ptr, in do_xrstor() argument
3001 CPUX86State *env = ac->env; in do_xrstor()
3005 do_xrstor_fpu(ac, ptr); in do_xrstor()
3014 do_xrstor_mxcsr(ac, ptr); in do_xrstor()
3016 do_xrstor_sse(ac, ptr); in do_xrstor()
3023 do_xrstor_ymmh(ac, ptr + XO(avx_state)); in do_xrstor()
3030 do_xrstor_bndregs(ac, ptr + XO(bndreg_state)); in do_xrstor()
3039 do_xrstor_bndcsr(ac, ptr + XO(bndcsr_state)); in do_xrstor()
3048 do_xrstor_pkru(ac, ptr + XO(pkru_state)); in do_xrstor()
3064 X86Access ac; in helper_xrstor() local
3072 access_prepare(&ac, env, ptr, size, MMU_DATA_LOAD, ra); in helper_xrstor()
3073 if (!valid_xrstor_header(&ac, &xstate_bv, ptr)) { in helper_xrstor()
3081 access_prepare(&ac, env, ptr, size_ext, MMU_DATA_LOAD, ra); in helper_xrstor()
3084 do_xrstor(&ac, ptr, rfbm, xstate_bv); in helper_xrstor()
3090 X86Access ac = { in cpu_x86_fsave() local
3096 assert(ac.size <= len); in cpu_x86_fsave()
3097 do_fsave(&ac, 0, true); in cpu_x86_fsave()
3102 X86Access ac = { in cpu_x86_frstor() local
3108 assert(ac.size <= len); in cpu_x86_frstor()
3109 do_frstor(&ac, 0, true); in cpu_x86_frstor()
3114 X86Access ac = { in cpu_x86_fxsave() local
3120 assert(ac.size <= len); in cpu_x86_fxsave()
3121 do_fxsave(&ac, 0); in cpu_x86_fxsave()
3126 X86Access ac = { in cpu_x86_fxrstor() local
3132 assert(ac.size <= len); in cpu_x86_fxrstor()
3133 do_fxrstor(&ac, 0); in cpu_x86_fxrstor()
3138 X86Access ac = { in cpu_x86_xsave() local
3148 ac.size = xsave_area_size(rfbm, false); in cpu_x86_xsave()
3149 assert(ac.size <= len); in cpu_x86_xsave()
3150 do_xsave_access(&ac, 0, rfbm, get_xinuse(env), rfbm); in cpu_x86_xsave()
3155 X86Access ac = { in cpu_x86_xrstor() local
3166 ac.size = xsave_area_size(rfbm, false); in cpu_x86_xrstor()
3167 assert(ac.size <= len); in cpu_x86_xrstor()
3169 if (!valid_xrstor_header(&ac, &xstate_bv, 0)) { in cpu_x86_xrstor()
3172 do_xrstor(&ac, 0, rfbm, xstate_bv); in cpu_x86_xrstor()