From e2d19d6cca5236d117607fcaf73b3e686d98bb67 Mon Sep 17 00:00:00 2001 From: _Neo_ Date: Tue, 12 May 2026 16:45:00 +0300 Subject: [PATCH] New errors...time to see what we can do. --- .../AppleHv/HvExecutionContextVcpu.cs | 57 +++++++++++-------- 1 file changed, 34 insertions(+), 23 deletions(-) diff --git a/src/Ryujinx.Cpu/AppleHv/HvExecutionContextVcpu.cs b/src/Ryujinx.Cpu/AppleHv/HvExecutionContextVcpu.cs index 64af94595..36be2e250 100644 --- a/src/Ryujinx.Cpu/AppleHv/HvExecutionContextVcpu.cs +++ b/src/Ryujinx.Cpu/AppleHv/HvExecutionContextVcpu.cs @@ -151,34 +151,18 @@ namespace Ryujinx.Cpu.AppleHv if (index == 31) { var result = HvApi.hv_vcpu_get_sys_reg(_vcpu, HvSysReg.SP_EL0, out ulong value); - if (result != HvResult.Success) - { - if (result == HvResult.BadArgument) - { - return 0; - } - result.ThrowOnError(); - } + if (result == HvResult.BadArgument) return 0; + result.ThrowOnError(); return value; } else if (index >= 0 && index <= 30) { var result = HvApi.hv_vcpu_get_reg(_vcpu, HvReg.X0 + (uint)index, out ulong value); - if (result != HvResult.Success) - { - if (result == HvResult.BadArgument) - { - Logger.Warning?.Print(LogClass.Cpu, $"HV_BAD_ARGUMENT on X{index}"); - return 0; - } - result.ThrowOnError(); - } + if (result == HvResult.BadArgument) return 0; + result.ThrowOnError(); return value; } - else - { - return 0; - } + return 0; } public void SetX(int index, ulong value) @@ -199,13 +183,40 @@ namespace Ryujinx.Cpu.AppleHv public V128 GetV(int index) { - HvApi.hv_vcpu_get_simd_fp_reg(_vcpu, HvSimdFPReg.Q0 + (uint)index, out HvSimdFPUchar16 value).ThrowOnError(); + if (index < 0 || index > 31) + { + return V128.Zero; + } + + var result = HvApi.hv_vcpu_get_simd_fp_reg(_vcpu, HvSimdFPReg.Q0 + (uint)index, out HvSimdFPUchar16 value); + if (result == HvResult.BadArgument) + { + return V128.Zero; + } + if (result != HvResult.Success) + { + result.ThrowOnError(); + } + return new V128(value.Low, value.High); } public void SetV(int index, V128 value) { - _setSimdFpReg(_vcpu, HvSimdFPReg.Q0 + (uint)index, value, _setSimdFpRegNativePtr).ThrowOnError(); + if (index < 0 || index > 31) + { + return; + } + + var result = _setSimdFpReg(_vcpu, HvSimdFPReg.Q0 + (uint)index, value, _setSimdFpRegNativePtr); + if (result == HvResult.BadArgument) + { + return; + } + if (result != HvResult.Success) + { + result.ThrowOnError(); + } } public void RequestInterrupt()