On 4/9/24 07:02, Richard Henderson wrote:
Signed-off-by: Richard Henderson <richard.hender...@linaro.org>
---
  target/i386/tcg/fpu_helper.c | 44 +++++++++++++++++++++++++-----------
  1 file changed, 31 insertions(+), 13 deletions(-)

Three incorrect GETPC()s that get fixed later in the series:

do_fsave:

@@ -2459,15 +2465,18 @@ void helper_fldenv(CPUX86State *env, target_ulong ptr, 
int data32)
  static void do_fsave(CPUX86State *env, target_ulong ptr, int data32,
                       uintptr_t retaddr)
  {
+    X86Access ac;
      floatx80 tmp;
      int i;
do_fstenv(env, ptr, data32, retaddr); ptr += (target_ulong)14 << data32;
+    access_prepare(&ac, env, ptr, 80, MMU_DATA_STORE, GETPC());
+

do_xsave_fpu:

@@ -2506,6 +2518,7 @@ static void do_xsave_fpu(CPUX86State *env, target_ulong 
ptr, uintptr_t ra)
  {
      int fpus, fptag, i;
      target_ulong addr;
+    X86Access ac;
fpus = (env->fpus & ~0x3800) | (env->fpstt & 0x7) << 11;
      fptag = 0;
@@ -2524,9 +2537,11 @@ static void do_xsave_fpu(CPUX86State *env, target_ulong 
ptr, uintptr_t ra)
      cpu_stq_data_ra(env, ptr + XO(legacy.fpdp), 0, ra); /* edp+sel; rdp */
addr = ptr + XO(legacy.fpregs);
+    access_prepare(&ac, env, addr, 8 * 16, MMU_DATA_STORE, GETPC());
+
      for (i = 0; i < 8; i++) {
          floatx80 tmp = ST(i);
-        do_fstt(env, tmp, addr, ra);
+        do_fstt(&ac, addr, tmp);
          addr += 16;
      }
  }

do_xrstor_fpu:

@@ -2699,6 +2714,7 @@ static void do_xrstor_fpu(CPUX86State *env, target_ulong 
ptr, uintptr_t ra)
  {
      int i, fpuc, fpus, fptag;
      target_ulong addr;
+    X86Access ac;
fpuc = cpu_lduw_data_ra(env, ptr + XO(legacy.fcw), ra);
      fpus = cpu_lduw_data_ra(env, ptr + XO(legacy.fsw), ra);
@@ -2711,8 +2727,10 @@ static void do_xrstor_fpu(CPUX86State *env, target_ulong 
ptr, uintptr_t ra)
      }
addr = ptr + XO(legacy.fpregs);
+    access_prepare(&ac, env, addr, 8 * 16, MMU_DATA_LOAD, GETPC());
+
      for (i = 0; i < 8; i++) {
-        floatx80 tmp = do_fldt(env, addr, ra);
+        floatx80 tmp = do_fldt(&ac, addr);
          ST(i) = tmp;
          addr += 16;
      }



Reply via email to