diff --git a/src/ARMeilleure/Instructions/InstEmitSimdArithmetic.cs b/src/ARMeilleure/Instructions/InstEmitSimdArithmetic.cs index 694633f97..13d9fac68 100644 --- a/src/ARMeilleure/Instructions/InstEmitSimdArithmetic.cs +++ b/src/ARMeilleure/Instructions/InstEmitSimdArithmetic.cs @@ -406,7 +406,7 @@ namespace ARMeilleure.Instructions { Operand res = EmitSoftFloatCall(context, nameof(SoftFloat32.FPSub), op1, op2); - return EmitUnaryMathCall(context, nameof(MathHelper.Abs), res); + return EmitUnaryMathCall(context, nameof(Math.Abs), res); }); } } @@ -451,7 +451,7 @@ namespace ARMeilleure.Instructions { Operand res = EmitSoftFloatCall(context, nameof(SoftFloat32.FPSub), op1, op2); - return EmitUnaryMathCall(context, nameof(MathHelper.Abs), res); + return EmitUnaryMathCall(context, nameof(Math.Abs), res); }); } } @@ -483,7 +483,7 @@ namespace ARMeilleure.Instructions { EmitScalarUnaryOpF(context, (op1) => { - return EmitUnaryMathCall(context, nameof(MathHelper.Abs), op1); + return EmitUnaryMathCall(context, nameof(Math.Abs), op1); }); } } @@ -522,7 +522,7 @@ namespace ARMeilleure.Instructions { EmitVectorUnaryOpF(context, (op1) => { - return EmitUnaryMathCall(context, nameof(MathHelper.Abs), op1); + return EmitUnaryMathCall(context, nameof(Math.Abs), op1); }); } } @@ -2246,7 +2246,7 @@ namespace ARMeilleure.Instructions { EmitScalarUnaryOpF(context, (op1) => { - return EmitUnaryMathCall(context, nameof(MathHelper.Floor), op1); + return EmitUnaryMathCall(context, nameof(Math.Floor), op1); }); } } @@ -2265,7 +2265,7 @@ namespace ARMeilleure.Instructions { EmitVectorUnaryOpF(context, (op1) => { - return EmitUnaryMathCall(context, nameof(MathHelper.Floor), op1); + return EmitUnaryMathCall(context, nameof(Math.Floor), op1); }); } } @@ -2322,7 +2322,7 @@ namespace ARMeilleure.Instructions { EmitScalarUnaryOpF(context, (op1) => { - return EmitUnaryMathCall(context, nameof(MathHelper.Ceiling), op1); + return EmitUnaryMathCall(context, nameof(Math.Ceiling), op1); }); } } @@ -2341,7 +2341,7 @@ namespace ARMeilleure.Instructions { EmitVectorUnaryOpF(context, (op1) => { - return EmitUnaryMathCall(context, nameof(MathHelper.Ceiling), op1); + return EmitUnaryMathCall(context, nameof(Math.Ceiling), op1); }); } } @@ -2390,7 +2390,7 @@ namespace ARMeilleure.Instructions { EmitScalarUnaryOpF(context, (op1) => { - return EmitUnaryMathCall(context, nameof(MathHelper.Truncate), op1); + return EmitUnaryMathCall(context, nameof(Math.Truncate), op1); }); } } @@ -2409,7 +2409,7 @@ namespace ARMeilleure.Instructions { EmitVectorUnaryOpF(context, (op1) => { - return EmitUnaryMathCall(context, nameof(MathHelper.Truncate), op1); + return EmitUnaryMathCall(context, nameof(Math.Truncate), op1); }); } } diff --git a/src/ARMeilleure/Instructions/InstEmitSimdArithmetic32.cs b/src/ARMeilleure/Instructions/InstEmitSimdArithmetic32.cs index 284f3f576..c807fc858 100644 --- a/src/ARMeilleure/Instructions/InstEmitSimdArithmetic32.cs +++ b/src/ARMeilleure/Instructions/InstEmitSimdArithmetic32.cs @@ -43,7 +43,7 @@ namespace ARMeilleure.Instructions } else { - EmitScalarUnaryOpF32(context, (op1) => EmitUnaryMathCall(context, nameof(MathHelper.Abs), op1)); + EmitScalarUnaryOpF32(context, (op1) => EmitUnaryMathCall(context, nameof(Math.Abs), op1)); } } @@ -66,7 +66,7 @@ namespace ARMeilleure.Instructions } else { - EmitVectorUnaryOpF32(context, (op1) => EmitUnaryMathCall(context, nameof(MathHelper.Abs), op1)); + EmitVectorUnaryOpF32(context, (op1) => EmitUnaryMathCall(context, nameof(Math.Abs), op1)); } } else diff --git a/src/ARMeilleure/Instructions/InstEmitSimdCmp.cs b/src/ARMeilleure/Instructions/InstEmitSimdCmp.cs index 8fcb06286..aab677869 100644 --- a/src/ARMeilleure/Instructions/InstEmitSimdCmp.cs +++ b/src/ARMeilleure/Instructions/InstEmitSimdCmp.cs @@ -726,8 +726,8 @@ namespace ARMeilleure.Instructions if (absolute) { - ne = EmitUnaryMathCall(context, nameof(MathHelper.Abs), ne); - me = EmitUnaryMathCall(context, nameof(MathHelper.Abs), me); + ne = EmitUnaryMathCall(context, nameof(Math.Abs), ne); + me = EmitUnaryMathCall(context, nameof(Math.Abs), me); } Operand e = EmitSoftFloatCall(context, name, ne, me); diff --git a/src/ARMeilleure/Instructions/InstEmitSimdCvt.cs b/src/ARMeilleure/Instructions/InstEmitSimdCvt.cs index a5d4744f7..3363a7c77 100644 --- a/src/ARMeilleure/Instructions/InstEmitSimdCvt.cs +++ b/src/ARMeilleure/Instructions/InstEmitSimdCvt.cs @@ -333,7 +333,7 @@ namespace ARMeilleure.Instructions } else { - EmitFcvt_s_Gp(context, (op1) => EmitUnaryMathCall(context, nameof(MathHelper.Floor), op1)); + EmitFcvt_s_Gp(context, (op1) => EmitUnaryMathCall(context, nameof(Math.Floor), op1)); } } @@ -349,7 +349,7 @@ namespace ARMeilleure.Instructions } else { - EmitFcvt(context, (op1) => EmitUnaryMathCall(context, nameof(MathHelper.Floor), op1), signed: true, scalar: false); + EmitFcvt(context, (op1) => EmitUnaryMathCall(context, nameof(Math.Floor), op1), signed: true, scalar: false); } } @@ -365,7 +365,7 @@ namespace ARMeilleure.Instructions } else { - EmitFcvt_u_Gp(context, (op1) => EmitUnaryMathCall(context, nameof(MathHelper.Floor), op1)); + EmitFcvt_u_Gp(context, (op1) => EmitUnaryMathCall(context, nameof(Math.Floor), op1)); } } @@ -538,7 +538,7 @@ namespace ARMeilleure.Instructions } else { - EmitFcvt_s_Gp(context, (op1) => EmitUnaryMathCall(context, nameof(MathHelper.Ceiling), op1)); + EmitFcvt_s_Gp(context, (op1) => EmitUnaryMathCall(context, nameof(Math.Ceiling), op1)); } } @@ -554,7 +554,7 @@ namespace ARMeilleure.Instructions } else { - EmitFcvt_u_Gp(context, (op1) => EmitUnaryMathCall(context, nameof(MathHelper.Ceiling), op1)); + EmitFcvt_u_Gp(context, (op1) => EmitUnaryMathCall(context, nameof(Math.Ceiling), op1)); } } diff --git a/src/ARMeilleure/Instructions/InstEmitSimdCvt32.cs b/src/ARMeilleure/Instructions/InstEmitSimdCvt32.cs index c35ffede4..1e53c685e 100644 --- a/src/ARMeilleure/Instructions/InstEmitSimdCvt32.cs +++ b/src/ARMeilleure/Instructions/InstEmitSimdCvt32.cs @@ -357,10 +357,10 @@ namespace ARMeilleure.Instructions toConvert = EmitRoundMathCall(context, MidpointRounding.ToEven, toConvert); break; case 0b10: // Towards positive infinity - toConvert = EmitUnaryMathCall(context, nameof(MathHelper.Ceiling), toConvert); + toConvert = EmitUnaryMathCall(context, nameof(Math.Ceiling), toConvert); break; case 0b11: // Towards negative infinity - toConvert = EmitUnaryMathCall(context, nameof(MathHelper.Floor), toConvert); + toConvert = EmitUnaryMathCall(context, nameof(Math.Floor), toConvert); break; } @@ -494,10 +494,10 @@ namespace ARMeilleure.Instructions toConvert = EmitRoundMathCall(context, MidpointRounding.ToEven, toConvert); break; case 0b10: // Towards positive infinity - toConvert = EmitUnaryMathCall(context, nameof(MathHelper.Ceiling), toConvert); + toConvert = EmitUnaryMathCall(context, nameof(Math.Ceiling), toConvert); break; case 0b11: // Towards negative infinity - toConvert = EmitUnaryMathCall(context, nameof(MathHelper.Floor), toConvert); + toConvert = EmitUnaryMathCall(context, nameof(Math.Floor), toConvert); break; } @@ -534,7 +534,7 @@ namespace ARMeilleure.Instructions } else { - EmitVectorUnaryOpF32(context, (m) => EmitUnaryMathCall(context, nameof(MathHelper.Floor), m)); + EmitVectorUnaryOpF32(context, (m) => EmitUnaryMathCall(context, nameof(Math.Floor), m)); } } @@ -574,7 +574,7 @@ namespace ARMeilleure.Instructions } else { - EmitVectorUnaryOpF32(context, (m) => EmitUnaryMathCall(context, nameof(MathHelper.Ceiling), m)); + EmitVectorUnaryOpF32(context, (m) => EmitUnaryMathCall(context, nameof(Math.Ceiling), m)); } } @@ -613,7 +613,7 @@ namespace ARMeilleure.Instructions } else { - EmitScalarUnaryOpF32(context, (op1) => EmitUnaryMathCall(context, nameof(MathHelper.Truncate), op1)); + EmitScalarUnaryOpF32(context, (op1) => EmitUnaryMathCall(context, nameof(Math.Truncate), op1)); } } diff --git a/src/ARMeilleure/Instructions/InstEmitSimdHelper.cs b/src/ARMeilleure/Instructions/InstEmitSimdHelper.cs index d86830f70..abd0d9acc 100644 --- a/src/ARMeilleure/Instructions/InstEmitSimdHelper.cs +++ b/src/ARMeilleure/Instructions/InstEmitSimdHelper.cs @@ -18,19 +18,19 @@ namespace ARMeilleure.Instructions static class InstEmitSimdHelper { #region "Masks" - public static readonly long[] EvenMasks = - [ + public static readonly long[] EvenMasks = new long[] + { 14L << 56 | 12L << 48 | 10L << 40 | 08L << 32 | 06L << 24 | 04L << 16 | 02L << 8 | 00L << 0, // B 13L << 56 | 12L << 48 | 09L << 40 | 08L << 32 | 05L << 24 | 04L << 16 | 01L << 8 | 00L << 0, // H - 11L << 56 | 10L << 48 | 09L << 40 | 08L << 32 | 03L << 24 | 02L << 16 | 01L << 8 | 00L << 0 // S - ]; + 11L << 56 | 10L << 48 | 09L << 40 | 08L << 32 | 03L << 24 | 02L << 16 | 01L << 8 | 00L << 0, // S + }; - public static readonly long[] OddMasks = - [ + public static readonly long[] OddMasks = new long[] + { 15L << 56 | 13L << 48 | 11L << 40 | 09L << 32 | 07L << 24 | 05L << 16 | 03L << 8 | 01L << 0, // B 15L << 56 | 14L << 48 | 11L << 40 | 10L << 32 | 07L << 24 | 06L << 16 | 03L << 8 | 02L << 0, // H - 15L << 56 | 14L << 48 | 13L << 40 | 12L << 32 | 07L << 24 | 06L << 16 | 05L << 8 | 04L << 0 // S - ]; + 15L << 56 | 14L << 48 | 13L << 40 | 12L << 32 | 07L << 24 | 06L << 16 | 05L << 8 | 04L << 0, // S + }; public const long ZeroMask = 128L << 56 | 128L << 48 | 128L << 40 | 128L << 32 | 128L << 24 | 128L << 16 | 128L << 8 | 128L << 0; @@ -44,118 +44,118 @@ namespace ARMeilleure.Instructions #endregion #region "X86 SSE Intrinsics" - public static readonly Intrinsic[] X86PaddInstruction = - [ + public static readonly Intrinsic[] X86PaddInstruction = new Intrinsic[] + { Intrinsic.X86Paddb, Intrinsic.X86Paddw, Intrinsic.X86Paddd, - Intrinsic.X86Paddq - ]; + Intrinsic.X86Paddq, + }; - public static readonly Intrinsic[] X86PcmpeqInstruction = - [ + public static readonly Intrinsic[] X86PcmpeqInstruction = new Intrinsic[] + { Intrinsic.X86Pcmpeqb, Intrinsic.X86Pcmpeqw, Intrinsic.X86Pcmpeqd, - Intrinsic.X86Pcmpeqq - ]; + Intrinsic.X86Pcmpeqq, + }; - public static readonly Intrinsic[] X86PcmpgtInstruction = - [ + public static readonly Intrinsic[] X86PcmpgtInstruction = new Intrinsic[] + { Intrinsic.X86Pcmpgtb, Intrinsic.X86Pcmpgtw, Intrinsic.X86Pcmpgtd, - Intrinsic.X86Pcmpgtq - ]; + Intrinsic.X86Pcmpgtq, + }; - public static readonly Intrinsic[] X86PmaxsInstruction = - [ + public static readonly Intrinsic[] X86PmaxsInstruction = new Intrinsic[] + { Intrinsic.X86Pmaxsb, Intrinsic.X86Pmaxsw, - Intrinsic.X86Pmaxsd - ]; + Intrinsic.X86Pmaxsd, + }; - public static readonly Intrinsic[] X86PmaxuInstruction = - [ + public static readonly Intrinsic[] X86PmaxuInstruction = new Intrinsic[] + { Intrinsic.X86Pmaxub, Intrinsic.X86Pmaxuw, - Intrinsic.X86Pmaxud - ]; + Intrinsic.X86Pmaxud, + }; - public static readonly Intrinsic[] X86PminsInstruction = - [ + public static readonly Intrinsic[] X86PminsInstruction = new Intrinsic[] + { Intrinsic.X86Pminsb, Intrinsic.X86Pminsw, - Intrinsic.X86Pminsd - ]; + Intrinsic.X86Pminsd, + }; - public static readonly Intrinsic[] X86PminuInstruction = - [ + public static readonly Intrinsic[] X86PminuInstruction = new Intrinsic[] + { Intrinsic.X86Pminub, Intrinsic.X86Pminuw, - Intrinsic.X86Pminud - ]; + Intrinsic.X86Pminud, + }; - public static readonly Intrinsic[] X86PmovsxInstruction = - [ + public static readonly Intrinsic[] X86PmovsxInstruction = new Intrinsic[] + { Intrinsic.X86Pmovsxbw, Intrinsic.X86Pmovsxwd, - Intrinsic.X86Pmovsxdq - ]; + Intrinsic.X86Pmovsxdq, + }; - public static readonly Intrinsic[] X86PmovzxInstruction = - [ + public static readonly Intrinsic[] X86PmovzxInstruction = new Intrinsic[] + { Intrinsic.X86Pmovzxbw, Intrinsic.X86Pmovzxwd, - Intrinsic.X86Pmovzxdq - ]; + Intrinsic.X86Pmovzxdq, + }; - public static readonly Intrinsic[] X86PsllInstruction = - [ + public static readonly Intrinsic[] X86PsllInstruction = new Intrinsic[] + { 0, Intrinsic.X86Psllw, Intrinsic.X86Pslld, - Intrinsic.X86Psllq - ]; + Intrinsic.X86Psllq, + }; - public static readonly Intrinsic[] X86PsraInstruction = - [ + public static readonly Intrinsic[] X86PsraInstruction = new Intrinsic[] + { 0, Intrinsic.X86Psraw, - Intrinsic.X86Psrad - ]; + Intrinsic.X86Psrad, + }; - public static readonly Intrinsic[] X86PsrlInstruction = - [ + public static readonly Intrinsic[] X86PsrlInstruction = new Intrinsic[] + { 0, Intrinsic.X86Psrlw, Intrinsic.X86Psrld, - Intrinsic.X86Psrlq - ]; + Intrinsic.X86Psrlq, + }; - public static readonly Intrinsic[] X86PsubInstruction = - [ + public static readonly Intrinsic[] X86PsubInstruction = new Intrinsic[] + { Intrinsic.X86Psubb, Intrinsic.X86Psubw, Intrinsic.X86Psubd, - Intrinsic.X86Psubq - ]; + Intrinsic.X86Psubq, + }; - public static readonly Intrinsic[] X86PunpckhInstruction = - [ + public static readonly Intrinsic[] X86PunpckhInstruction = new Intrinsic[] + { Intrinsic.X86Punpckhbw, Intrinsic.X86Punpckhwd, Intrinsic.X86Punpckhdq, - Intrinsic.X86Punpckhqdq - ]; + Intrinsic.X86Punpckhqdq, + }; - public static readonly Intrinsic[] X86PunpcklInstruction = - [ + public static readonly Intrinsic[] X86PunpcklInstruction = new Intrinsic[] + { Intrinsic.X86Punpcklbw, Intrinsic.X86Punpcklwd, Intrinsic.X86Punpckldq, - Intrinsic.X86Punpcklqdq - ]; + Intrinsic.X86Punpcklqdq, + }; #endregion public static void EnterArmFpMode(EmitterContext context, Func getFpFlag) @@ -460,8 +460,8 @@ namespace ARMeilleure.Instructions IOpCodeSimd op = (IOpCodeSimd)context.CurrOp; MethodInfo info = (op.Size & 1) == 0 - ? typeof(MathHelperF).GetMethod(name, [typeof(float)]) - : typeof(MathHelper).GetMethod(name, [typeof(double)]); + ? typeof(MathF).GetMethod(name, new Type[] { typeof(float) }) + : typeof(Math).GetMethod(name, new Type[] { typeof(double) }); return context.Call(info, n); } @@ -470,11 +470,11 @@ namespace ARMeilleure.Instructions { IOpCodeSimd op = (IOpCodeSimd)context.CurrOp; - string name = nameof(MathHelper.Round); + string name = nameof(Math.Round); MethodInfo info = (op.Size & 1) == 0 - ? typeof(MathHelperF).GetMethod(name, [typeof(float), typeof(int)]) - : typeof(MathHelper).GetMethod(name, [typeof(double), typeof(int)]); + ? typeof(MathF).GetMethod(name, new Type[] { typeof(float), typeof(MidpointRounding) }) + : typeof(Math).GetMethod(name, new Type[] { typeof(double), typeof(MidpointRounding) }); return context.Call(info, n, Const((int)roundMode)); } @@ -510,16 +510,16 @@ namespace ARMeilleure.Instructions context.MarkLabel(lbl1); context.BranchIf(lbl2, rMode, rP, Comparison.NotEqual); - context.Copy(res, EmitUnaryMathCall(context, nameof(MathHelper.Ceiling), op)); + context.Copy(res, EmitUnaryMathCall(context, nameof(Math.Ceiling), op)); context.Branch(lblEnd); context.MarkLabel(lbl2); context.BranchIf(lbl3, rMode, rM, Comparison.NotEqual); - context.Copy(res, EmitUnaryMathCall(context, nameof(MathHelper.Floor), op)); + context.Copy(res, EmitUnaryMathCall(context, nameof(Math.Floor), op)); context.Branch(lblEnd); context.MarkLabel(lbl3); - context.Copy(res, EmitUnaryMathCall(context, nameof(MathHelper.Truncate), op)); + context.Copy(res, EmitUnaryMathCall(context, nameof(Math.Truncate), op)); context.Branch(lblEnd); context.MarkLabel(lblEnd); diff --git a/src/ARMeilleure/Instructions/MathHelper.cs b/src/ARMeilleure/Instructions/MathHelper.cs deleted file mode 100644 index a11ce9d2e..000000000 --- a/src/ARMeilleure/Instructions/MathHelper.cs +++ /dev/null @@ -1,71 +0,0 @@ -using System; -using System.Runtime.InteropServices; - -namespace ARMeilleure.Instructions -{ - static class MathHelper - { - [UnmanagedCallersOnly] - public static double Abs(double value) - { - return Math.Abs(value); - } - - [UnmanagedCallersOnly] - public static double Ceiling(double value) - { - return Math.Ceiling(value); - } - - [UnmanagedCallersOnly] - public static double Floor(double value) - { - return Math.Floor(value); - } - - [UnmanagedCallersOnly] - public static double Round(double value, int mode) - { - return Math.Round(value, (MidpointRounding)mode); - } - - [UnmanagedCallersOnly] - public static double Truncate(double value) - { - return Math.Truncate(value); - } - } - - static class MathHelperF - { - [UnmanagedCallersOnly] - public static float Abs(float value) - { - return MathF.Abs(value); - } - - [UnmanagedCallersOnly] - public static float Ceiling(float value) - { - return MathF.Ceiling(value); - } - - [UnmanagedCallersOnly] - public static float Floor(float value) - { - return MathF.Floor(value); - } - - [UnmanagedCallersOnly] - public static float Round(float value, int mode) - { - return MathF.Round(value, (MidpointRounding)mode); - } - - [UnmanagedCallersOnly] - public static float Truncate(float value) - { - return MathF.Truncate(value); - } - } -} diff --git a/src/ARMeilleure/Instructions/NativeInterface.cs b/src/ARMeilleure/Instructions/NativeInterface.cs index 98539e49c..f86940831 100644 --- a/src/ARMeilleure/Instructions/NativeInterface.cs +++ b/src/ARMeilleure/Instructions/NativeInterface.cs @@ -3,7 +3,6 @@ using ARMeilleure.State; using ARMeilleure.Translation; using System; using System.Diagnostics.CodeAnalysis; -using System.Runtime.InteropServices; namespace ARMeilleure.Instructions { @@ -11,22 +10,6 @@ namespace ARMeilleure.Instructions { [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] public static readonly Type Type = typeof(NativeInterface); - - static NativeInterface() - { - try - { - //TODO: - // dude. this is so bad. figure out AOT's bs. - // this needs to be compiled into the AOT build but it doesn't get compiled - // under any circumstances unless directly referenced like below, not dynamically which is how it's always used. - _ = GetFunctionAddress(0); - } - catch - { - - } - } private class ThreadContext { @@ -55,7 +38,6 @@ namespace ARMeilleure.Instructions Context = null; } - [UnmanagedCallersOnly] public static void Break(ulong address, int imm) { Statistics.PauseTimer(); @@ -65,7 +47,6 @@ namespace ARMeilleure.Instructions Statistics.ResumeTimer(); } - [UnmanagedCallersOnly] public static void SupervisorCall(ulong address, int imm) { Statistics.PauseTimer(); @@ -75,7 +56,6 @@ namespace ARMeilleure.Instructions Statistics.ResumeTimer(); } - [UnmanagedCallersOnly] public static void Undefined(ulong address, int opCode) { Statistics.PauseTimer(); @@ -86,31 +66,26 @@ namespace ARMeilleure.Instructions } #region "System registers" - [UnmanagedCallersOnly] public static ulong GetCtrEl0() { return GetContext().CtrEl0; } - [UnmanagedCallersOnly] public static ulong GetDczidEl0() { return GetContext().DczidEl0; } - [UnmanagedCallersOnly] public static ulong GetCntfrqEl0() { return GetContext().CntfrqEl0; } - [UnmanagedCallersOnly] public static ulong GetCntpctEl0() { return GetContext().CntpctEl0; } - [UnmanagedCallersOnly] public static ulong GetCntvctEl0() { return GetContext().CntvctEl0; @@ -118,31 +93,26 @@ namespace ARMeilleure.Instructions #endregion #region "Read" - [UnmanagedCallersOnly] public static byte ReadByte(ulong address) { return GetMemoryManager().ReadGuest(address); } - [UnmanagedCallersOnly] public static ushort ReadUInt16(ulong address) { return GetMemoryManager().ReadGuest(address); } - [UnmanagedCallersOnly] public static uint ReadUInt32(ulong address) { return GetMemoryManager().ReadGuest(address); } - [UnmanagedCallersOnly] public static ulong ReadUInt64(ulong address) { return GetMemoryManager().ReadGuest(address); } - [UnmanagedCallersOnly] public static V128 ReadVector128(ulong address) { return GetMemoryManager().ReadGuest(address); @@ -150,55 +120,47 @@ namespace ARMeilleure.Instructions #endregion #region "Write" - [UnmanagedCallersOnly] public static void WriteByte(ulong address, byte value) { GetMemoryManager().WriteGuest(address, value); } - [UnmanagedCallersOnly] public static void WriteUInt16(ulong address, ushort value) { GetMemoryManager().WriteGuest(address, value); } - [UnmanagedCallersOnly] public static void WriteUInt32(ulong address, uint value) { GetMemoryManager().WriteGuest(address, value); } - [UnmanagedCallersOnly] public static void WriteUInt64(ulong address, ulong value) { GetMemoryManager().WriteGuest(address, value); } - [UnmanagedCallersOnly] public static void WriteVector128(ulong address, V128 value) { GetMemoryManager().WriteGuest(address, value); } #endregion - [UnmanagedCallersOnly] public static void EnqueueForRejit(ulong address) { Context.Translator.EnqueueForRejit(address, GetContext().ExecutionMode); } - [UnmanagedCallersOnly] - public static void SignalMemoryTracking(ulong address, ulong size, byte write) + public static void SignalMemoryTracking(ulong address, ulong size, bool write) { - GetMemoryManager().SignalMemoryTracking(address, size, write == 1); + GetMemoryManager().SignalMemoryTracking(address, size, write); } - [UnmanagedCallersOnly] public static void ThrowInvalidMemoryAccess(ulong address) { throw new InvalidAccessException(address); } - + public static ulong GetFunctionAddress(ulong address) { TranslatedFunction function = Context.Translator.GetOrTranslate(address, GetContext().ExecutionMode); @@ -206,14 +168,12 @@ namespace ARMeilleure.Instructions return (ulong)function.FuncPointer.ToInt64(); } - [UnmanagedCallersOnly] public static void InvalidateCacheLine(ulong address) { Context.Translator.InvalidateJitCacheRegion(address, InstEmit.DczSizeInBytes); } - [UnmanagedCallersOnly] - public static byte CheckSynchronization() + public static bool CheckSynchronization() { Statistics.PauseTimer(); @@ -223,7 +183,7 @@ namespace ARMeilleure.Instructions Statistics.ResumeTimer(); - return (byte)(context.Running ? 1 : 0); + return context.Running; } public static ExecutionContext GetContext() diff --git a/src/ARMeilleure/Instructions/SoftFallback.cs b/src/ARMeilleure/Instructions/SoftFallback.cs index c227156e5..ecafb583e 100644 --- a/src/ARMeilleure/Instructions/SoftFallback.cs +++ b/src/ARMeilleure/Instructions/SoftFallback.cs @@ -1,13 +1,11 @@ using ARMeilleure.State; using System; -using System.Runtime.InteropServices; namespace ARMeilleure.Instructions { static class SoftFallback { #region "ShrImm64" - [UnmanagedCallersOnly] public static long SignedShrImm64(long value, long roundConst, int shift) { if (roundConst == 0L) @@ -50,7 +48,6 @@ namespace ARMeilleure.Instructions } } - [UnmanagedCallersOnly] public static ulong UnsignedShrImm64(ulong value, long roundConst, int shift) { if (roundConst == 0L) @@ -95,7 +92,6 @@ namespace ARMeilleure.Instructions #endregion #region "Saturation" - [UnmanagedCallersOnly] public static int SatF32ToS32(float value) { if (float.IsNaN(value)) @@ -107,7 +103,6 @@ namespace ARMeilleure.Instructions value <= int.MinValue ? int.MinValue : (int)value; } - [UnmanagedCallersOnly] public static long SatF32ToS64(float value) { if (float.IsNaN(value)) @@ -119,7 +114,6 @@ namespace ARMeilleure.Instructions value <= long.MinValue ? long.MinValue : (long)value; } - [UnmanagedCallersOnly] public static uint SatF32ToU32(float value) { if (float.IsNaN(value)) @@ -131,7 +125,6 @@ namespace ARMeilleure.Instructions value <= uint.MinValue ? uint.MinValue : (uint)value; } - [UnmanagedCallersOnly] public static ulong SatF32ToU64(float value) { if (float.IsNaN(value)) @@ -143,7 +136,6 @@ namespace ARMeilleure.Instructions value <= ulong.MinValue ? ulong.MinValue : (ulong)value; } - [UnmanagedCallersOnly] public static int SatF64ToS32(double value) { if (double.IsNaN(value)) @@ -155,7 +147,6 @@ namespace ARMeilleure.Instructions value <= int.MinValue ? int.MinValue : (int)value; } - [UnmanagedCallersOnly] public static long SatF64ToS64(double value) { if (double.IsNaN(value)) @@ -167,7 +158,6 @@ namespace ARMeilleure.Instructions value <= long.MinValue ? long.MinValue : (long)value; } - [UnmanagedCallersOnly] public static uint SatF64ToU32(double value) { if (double.IsNaN(value)) @@ -179,7 +169,6 @@ namespace ARMeilleure.Instructions value <= uint.MinValue ? uint.MinValue : (uint)value; } - [UnmanagedCallersOnly] public static ulong SatF64ToU64(double value) { if (double.IsNaN(value)) @@ -193,7 +182,6 @@ namespace ARMeilleure.Instructions #endregion #region "Count" - [UnmanagedCallersOnly] public static ulong CountLeadingSigns(ulong value, int size) // size is 8, 16, 32 or 64 (SIMD&FP or Base Inst.). { value ^= value >> 1; @@ -213,7 +201,6 @@ namespace ARMeilleure.Instructions private static ReadOnlySpan ClzNibbleTbl => [4, 3, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0]; - [UnmanagedCallersOnly] public static ulong CountLeadingZeros(ulong value, int size) // size is 8, 16, 32 or 64 (SIMD&FP or Base Inst.). { if (value == 0ul) @@ -237,49 +224,41 @@ namespace ARMeilleure.Instructions #endregion #region "Table" - [UnmanagedCallersOnly] public static V128 Tbl1(V128 vector, int bytes, V128 tb0) { return TblOrTbx(default, vector, bytes, tb0); } - [UnmanagedCallersOnly] public static V128 Tbl2(V128 vector, int bytes, V128 tb0, V128 tb1) { return TblOrTbx(default, vector, bytes, tb0, tb1); } - [UnmanagedCallersOnly] public static V128 Tbl3(V128 vector, int bytes, V128 tb0, V128 tb1, V128 tb2) { return TblOrTbx(default, vector, bytes, tb0, tb1, tb2); } - [UnmanagedCallersOnly] public static V128 Tbl4(V128 vector, int bytes, V128 tb0, V128 tb1, V128 tb2, V128 tb3) { return TblOrTbx(default, vector, bytes, tb0, tb1, tb2, tb3); } - [UnmanagedCallersOnly] public static V128 Tbx1(V128 dest, V128 vector, int bytes, V128 tb0) { return TblOrTbx(dest, vector, bytes, tb0); } - [UnmanagedCallersOnly] public static V128 Tbx2(V128 dest, V128 vector, int bytes, V128 tb0, V128 tb1) { return TblOrTbx(dest, vector, bytes, tb0, tb1); } - [UnmanagedCallersOnly] public static V128 Tbx3(V128 dest, V128 vector, int bytes, V128 tb0, V128 tb1, V128 tb2) { return TblOrTbx(dest, vector, bytes, tb0, tb1, tb2); } - [UnmanagedCallersOnly] public static V128 Tbx4(V128 dest, V128 vector, int bytes, V128 tb0, V128 tb1, V128 tb2, V128 tb3) { return TblOrTbx(dest, vector, bytes, tb0, tb1, tb2, tb3); @@ -321,22 +300,14 @@ namespace ARMeilleure.Instructions private const uint Crc32RevPoly = 0xedb88320; private const uint Crc32cRevPoly = 0x82f63b78; - [UnmanagedCallersOnly] public static uint Crc32b(uint crc, byte value) => Crc32(crc, Crc32RevPoly, value); - [UnmanagedCallersOnly] public static uint Crc32h(uint crc, ushort value) => Crc32h(crc, Crc32RevPoly, value); - [UnmanagedCallersOnly] public static uint Crc32w(uint crc, uint value) => Crc32w(crc, Crc32RevPoly, value); - [UnmanagedCallersOnly] public static uint Crc32x(uint crc, ulong value) => Crc32x(crc, Crc32RevPoly, value); - [UnmanagedCallersOnly] public static uint Crc32cb(uint crc, byte value) => Crc32(crc, Crc32cRevPoly, value); - [UnmanagedCallersOnly] public static uint Crc32ch(uint crc, ushort value) => Crc32h(crc, Crc32cRevPoly, value); - [UnmanagedCallersOnly] public static uint Crc32cw(uint crc, uint value) => Crc32w(crc, Crc32cRevPoly, value); - [UnmanagedCallersOnly] public static uint Crc32cx(uint crc, ulong value) => Crc32x(crc, Crc32cRevPoly, value); private static uint Crc32h(uint crc, uint poly, ushort val) @@ -387,25 +358,21 @@ namespace ARMeilleure.Instructions #endregion #region "Aes" - [UnmanagedCallersOnly] public static V128 Decrypt(V128 value, V128 roundKey) { return CryptoHelper.AesInvSubBytes(CryptoHelper.AesInvShiftRows(value ^ roundKey)); } - [UnmanagedCallersOnly] public static V128 Encrypt(V128 value, V128 roundKey) { return CryptoHelper.AesSubBytes(CryptoHelper.AesShiftRows(value ^ roundKey)); } - [UnmanagedCallersOnly] public static V128 InverseMixColumns(V128 value) { return CryptoHelper.AesInvMixColumns(value); } - [UnmanagedCallersOnly] public static V128 MixColumns(V128 value) { return CryptoHelper.AesMixColumns(value); @@ -413,7 +380,6 @@ namespace ARMeilleure.Instructions #endregion #region "Sha1" - [UnmanagedCallersOnly] public static V128 HashChoose(V128 hash_abcd, uint hash_e, V128 wk) { for (int e = 0; e <= 3; e++) @@ -434,13 +400,11 @@ namespace ARMeilleure.Instructions return hash_abcd; } - [UnmanagedCallersOnly] public static uint FixedRotate(uint hash_e) { return hash_e.Rol(30); } - [UnmanagedCallersOnly] public static V128 HashMajority(V128 hash_abcd, uint hash_e, V128 wk) { for (int e = 0; e <= 3; e++) @@ -461,7 +425,6 @@ namespace ARMeilleure.Instructions return hash_abcd; } - [UnmanagedCallersOnly] public static V128 HashParity(V128 hash_abcd, uint hash_e, V128 wk) { for (int e = 0; e <= 3; e++) @@ -482,7 +445,6 @@ namespace ARMeilleure.Instructions return hash_abcd; } - [UnmanagedCallersOnly] public static V128 Sha1SchedulePart1(V128 w0_3, V128 w4_7, V128 w8_11) { ulong t2 = w4_7.Extract(0); @@ -493,7 +455,6 @@ namespace ARMeilleure.Instructions return result ^ (w0_3 ^ w8_11); } - [UnmanagedCallersOnly] public static V128 Sha1SchedulePart2(V128 tw0_3, V128 w12_15) { V128 t = tw0_3 ^ (w12_15 >> 32); @@ -538,19 +499,16 @@ namespace ARMeilleure.Instructions #endregion #region "Sha256" - [UnmanagedCallersOnly] public static V128 HashLower(V128 hash_abcd, V128 hash_efgh, V128 wk) { return Sha256Hash(hash_abcd, hash_efgh, wk, part1: true); } - [UnmanagedCallersOnly] public static V128 HashUpper(V128 hash_abcd, V128 hash_efgh, V128 wk) { return Sha256Hash(hash_abcd, hash_efgh, wk, part1: false); } - [UnmanagedCallersOnly] public static V128 Sha256SchedulePart1(V128 w0_3, V128 w4_7) { V128 result = new(); @@ -569,7 +527,6 @@ namespace ARMeilleure.Instructions return result; } - [UnmanagedCallersOnly] public static V128 Sha256SchedulePart2(V128 w0_3, V128 w8_11, V128 w12_15) { V128 result = new(); @@ -671,7 +628,6 @@ namespace ARMeilleure.Instructions } #endregion - [UnmanagedCallersOnly] public static V128 PolynomialMult64_128(ulong op1, ulong op2) { V128 result = V128.Zero; diff --git a/src/ARMeilleure/Instructions/SoftFloat.cs b/src/ARMeilleure/Instructions/SoftFloat.cs index a2bb23be8..7feefb3c7 100644 --- a/src/ARMeilleure/Instructions/SoftFloat.cs +++ b/src/ARMeilleure/Instructions/SoftFloat.cs @@ -1,7 +1,6 @@ using ARMeilleure.State; using System; using System.Diagnostics; -using System.Runtime.InteropServices; namespace ARMeilleure.Instructions { @@ -313,7 +312,6 @@ namespace ARMeilleure.Instructions static class SoftFloat16_32 { - [UnmanagedCallersOnly] public static float FPConvert(ushort valueBits) { ExecutionContext context = NativeInterface.GetContext(); @@ -489,7 +487,6 @@ namespace ARMeilleure.Instructions static class SoftFloat16_64 { - [UnmanagedCallersOnly] public static double FPConvert(ushort valueBits) { ExecutionContext context = NativeInterface.GetContext(); @@ -665,7 +662,6 @@ namespace ARMeilleure.Instructions static class SoftFloat32_16 { - [UnmanagedCallersOnly] public static ushort FPConvert(float value) { ExecutionContext context = NativeInterface.GetContext(); @@ -785,19 +781,12 @@ namespace ARMeilleure.Instructions static class SoftFloat32 { - [UnmanagedCallersOnly] public static float FPAdd(float value1, float value2) { - return FPAddFpscrImpl(value1, value2, false); + return FPAddFpscr(value1, value2, false); } - [UnmanagedCallersOnly] - public static float FPAddFpscr(float value1, float value2, byte standardFpscr) - { - return FPAddFpscrImpl(value1, value2, standardFpscr == 1); - } - - private static float FPAddFpscrImpl(float value1, float value2, bool standardFpscr) + public static float FPAddFpscr(float value1, float value2, bool standardFpscr) { ExecutionContext context = NativeInterface.GetContext(); FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr; @@ -848,8 +837,7 @@ namespace ARMeilleure.Instructions return result; } - [UnmanagedCallersOnly] - public static int FPCompare(float value1, float value2, byte signalNaNs) + public static int FPCompare(float value1, float value2, bool signalNaNs) { ExecutionContext context = NativeInterface.GetContext(); FPCR fpcr = context.Fpcr; @@ -863,7 +851,7 @@ namespace ARMeilleure.Instructions { result = 0b0011; - if (type1 == FPType.SNaN || type2 == FPType.SNaN || signalNaNs == 1) + if (type1 == FPType.SNaN || type2 == FPType.SNaN || signalNaNs) { SoftFloat.FPProcessException(FPException.InvalidOp, context, fpcr); } @@ -887,13 +875,12 @@ namespace ARMeilleure.Instructions return result; } - [UnmanagedCallersOnly] public static float FPCompareEQ(float value1, float value2) { - return FPCompareEQFpscrImpl(value1, value2, false); + return FPCompareEQFpscr(value1, value2, false); } - private static float FPCompareEQFpscrImpl(float value1, float value2, bool standardFpscr) + public static float FPCompareEQFpscr(float value1, float value2, bool standardFpscr) { ExecutionContext context = NativeInterface.GetContext(); FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr; @@ -920,25 +907,12 @@ namespace ARMeilleure.Instructions return result; } - [UnmanagedCallersOnly] - public static float FPCompareEQFpscr(float value1, float value2, byte standardFpscr) - { - return FPCompareEQFpscrImpl(value1, value2, standardFpscr == 1); - } - - [UnmanagedCallersOnly] public static float FPCompareGE(float value1, float value2) { - return FPCompareGEFpscrImpl(value1, value2, false); + return FPCompareGEFpscr(value1, value2, false); } - [UnmanagedCallersOnly] - public static float FPCompareGEFpscr(float value1, float value2, byte standardFpscr) - { - return FPCompareGEFpscrImpl(value1, value2, standardFpscr == 1); - } - - private static float FPCompareGEFpscrImpl(float value1, float value2, bool standardFpscr) + public static float FPCompareGEFpscr(float value1, float value2, bool standardFpscr) { ExecutionContext context = NativeInterface.GetContext(); FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr; @@ -962,19 +936,12 @@ namespace ARMeilleure.Instructions return result; } - [UnmanagedCallersOnly] public static float FPCompareGT(float value1, float value2) { - return FPCompareGTFpscrImpl(value1, value2, false); + return FPCompareGTFpscr(value1, value2, false); } - [UnmanagedCallersOnly] - public static float FPCompareGTFpscr(float value1, float value2, byte standardFpscr) - { - return FPCompareGTFpscrImpl(value1, value2, standardFpscr == 1); - } - - private static float FPCompareGTFpscrImpl(float value1, float value2, bool standardFpscr) + public static float FPCompareGTFpscr(float value1, float value2, bool standardFpscr) { ExecutionContext context = NativeInterface.GetContext(); FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr; @@ -998,31 +965,26 @@ namespace ARMeilleure.Instructions return result; } - [UnmanagedCallersOnly] public static float FPCompareLE(float value1, float value2) { - return FPCompareGEFpscrImpl(value2, value1, false); + return FPCompareGE(value2, value1); } - [UnmanagedCallersOnly] public static float FPCompareLT(float value1, float value2) { - return FPCompareGTFpscrImpl(value2, value1, false); + return FPCompareGT(value2, value1); } - [UnmanagedCallersOnly] - public static float FPCompareLEFpscr(float value1, float value2, byte standardFpscr) + public static float FPCompareLEFpscr(float value1, float value2, bool standardFpscr) { - return FPCompareGEFpscrImpl(value2, value1, standardFpscr == 1); + return FPCompareGEFpscr(value2, value1, standardFpscr); } - [UnmanagedCallersOnly] - public static float FPCompareLTFpscr(float value1, float value2, byte standardFpscr) + public static float FPCompareLTFpscr(float value1, float value2, bool standardFpscr) { - return FPCompareGEFpscrImpl(value2, value1, standardFpscr == 1); + return FPCompareGTFpscr(value2, value1, standardFpscr); } - [UnmanagedCallersOnly] public static float FPDiv(float value1, float value2) { ExecutionContext context = NativeInterface.GetContext(); @@ -1075,19 +1037,12 @@ namespace ARMeilleure.Instructions return result; } - [UnmanagedCallersOnly] public static float FPMax(float value1, float value2) { - return FPMaxFpscrImpl(value1, value2, false); + return FPMaxFpscr(value1, value2, false); } - [UnmanagedCallersOnly] - public static float FPMaxFpscr(float value1, float value2, byte standardFpscr) - { - return FPMaxFpscrImpl(value1, value2, standardFpscr == 1); - } - - private static float FPMaxFpscrImpl(float value1, float value2, bool standardFpscr) + public static float FPMaxFpscr(float value1, float value2, bool standardFpscr) { ExecutionContext context = NativeInterface.GetContext(); FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr; @@ -1148,13 +1103,12 @@ namespace ARMeilleure.Instructions return result; } - [UnmanagedCallersOnly] public static float FPMaxNum(float value1, float value2) { - return FPMaxNumFpscrImpl(value1, value2, false); + return FPMaxNumFpscr(value1, value2, false); } - private static float FPMaxNumFpscrImpl(float value1, float value2, bool standardFpscr) + public static float FPMaxNumFpscr(float value1, float value2, bool standardFpscr) { ExecutionContext context = NativeInterface.GetContext(); FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr; @@ -1171,28 +1125,15 @@ namespace ARMeilleure.Instructions value2 = FPInfinity(true); } - return FPMaxFpscrImpl(value1, value2, standardFpscr); + return FPMaxFpscr(value1, value2, standardFpscr); } - [UnmanagedCallersOnly] - public static float FPMaxNumFpscr(float value1, float value2, byte standardFpscr) - { - return FPMaxNumFpscrImpl(value1, value2, standardFpscr == 1); - } - - [UnmanagedCallersOnly] public static float FPMin(float value1, float value2) { - return FPMinFpscrImpl(value1, value2, false); + return FPMinFpscr(value1, value2, false); } - [UnmanagedCallersOnly] - public static float FPMinFpscr(float value1, float value2, byte standardFpscr) - { - return FPMinFpscrImpl(value1, value2, standardFpscr == 1); - } - - private static float FPMinFpscrImpl(float value1, float value2, bool standardFpscr) + public static float FPMinFpscr(float value1, float value2, bool standardFpscr) { ExecutionContext context = NativeInterface.GetContext(); FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr; @@ -1253,19 +1194,12 @@ namespace ARMeilleure.Instructions return result; } - [UnmanagedCallersOnly] public static float FPMinNum(float value1, float value2) { - return FPMinNumFpscrImpl(value1, value2, false); + return FPMinNumFpscr(value1, value2, false); } - [UnmanagedCallersOnly] - public static float FPMinNumFpscr(float value1, float value2, byte standardFpscr) - { - return FPMinNumFpscrImpl(value1, value2, standardFpscr == 1); - } - - private static float FPMinNumFpscrImpl(float value1, float value2, bool standardFpscr) + public static float FPMinNumFpscr(float value1, float value2, bool standardFpscr) { ExecutionContext context = NativeInterface.GetContext(); FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr; @@ -1282,22 +1216,15 @@ namespace ARMeilleure.Instructions value2 = FPInfinity(false); } - return FPMinFpscrImpl(value1, value2, standardFpscr); + return FPMinFpscr(value1, value2, standardFpscr); } - [UnmanagedCallersOnly] public static float FPMul(float value1, float value2) { - return FPMulFpscrImpl(value1, value2, false); + return FPMulFpscr(value1, value2, false); } - [UnmanagedCallersOnly] - public static float FPMulFpscr(float value1, float value2, byte standardFpscr) - { - return FPMulFpscrImpl(value1, value2, standardFpscr == 1); - } - - private static float FPMulFpscrImpl(float value1, float value2, bool standardFpscr) + public static float FPMulFpscr(float value1, float value2, bool standardFpscr) { ExecutionContext context = NativeInterface.GetContext(); FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr; @@ -1344,19 +1271,12 @@ namespace ARMeilleure.Instructions return result; } - [UnmanagedCallersOnly] public static float FPMulAdd(float valueA, float value1, float value2) { - return FPMulAddFpscrImpl(valueA, value1, value2, false); + return FPMulAddFpscr(valueA, value1, value2, false); } - [UnmanagedCallersOnly] - public static float FPMulAddFpscr(float valueA, float value1, float value2, byte standardFpscr) - { - return FPMulAddFpscrImpl(valueA, value1, value2, standardFpscr == 1); - } - - private static float FPMulAddFpscrImpl(float valueA, float value1, float value2, bool standardFpscr) + public static float FPMulAddFpscr(float valueA, float value1, float value2, bool standardFpscr) { ExecutionContext context = NativeInterface.GetContext(); FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr; @@ -1422,23 +1342,20 @@ namespace ARMeilleure.Instructions return result; } - [UnmanagedCallersOnly] public static float FPMulSub(float valueA, float value1, float value2) { value1 = value1.FPNeg(); - return FPMulAddFpscrImpl(valueA, value1, value2, false); + return FPMulAdd(valueA, value1, value2); } - [UnmanagedCallersOnly] - public static float FPMulSubFpscr(float valueA, float value1, float value2, byte standardFpscr) + public static float FPMulSubFpscr(float valueA, float value1, float value2, bool standardFpscr) { value1 = value1.FPNeg(); - return FPMulAddFpscrImpl(valueA, value1, value2, standardFpscr == 1); + return FPMulAddFpscr(valueA, value1, value2, standardFpscr); } - [UnmanagedCallersOnly] public static float FPMulX(float value1, float value2) { ExecutionContext context = NativeInterface.GetContext(); @@ -1484,36 +1401,27 @@ namespace ARMeilleure.Instructions return result; } - [UnmanagedCallersOnly] public static float FPNegMulAdd(float valueA, float value1, float value2) { valueA = valueA.FPNeg(); value1 = value1.FPNeg(); - return FPMulAddFpscrImpl(valueA, value1, value2, false); + return FPMulAdd(valueA, value1, value2); } - [UnmanagedCallersOnly] public static float FPNegMulSub(float valueA, float value1, float value2) { valueA = valueA.FPNeg(); - return FPMulAddFpscrImpl(valueA, value1, value2, false); + return FPMulAdd(valueA, value1, value2); } - [UnmanagedCallersOnly] public static float FPRecipEstimate(float value) { - return FPRecipEstimateFpscrImpl(value, false); + return FPRecipEstimateFpscr(value, false); } - [UnmanagedCallersOnly] - public static float FPRecipEstimateFpscr(float value, byte standardFpscr) - { - return FPRecipEstimateFpscrImpl(value, standardFpscr == 1); - } - - private static float FPRecipEstimateFpscrImpl(float value, bool standardFpscr) + public static float FPRecipEstimateFpscr(float value, bool standardFpscr) { ExecutionContext context = NativeInterface.GetContext(); FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr; @@ -1600,7 +1508,6 @@ namespace ARMeilleure.Instructions return result; } - [UnmanagedCallersOnly] public static float FPRecipStep(float value1, float value2) { ExecutionContext context = NativeInterface.GetContext(); @@ -1626,16 +1533,15 @@ namespace ARMeilleure.Instructions } else { - product = FPMulFpscrImpl(value1, value2, true); + product = FPMulFpscr(value1, value2, true); } - result = FPSubFpscrImpl(FPTwo(false), product, true); + result = FPSubFpscr(FPTwo(false), product, true); } return result; } - [UnmanagedCallersOnly] public static float FPRecipStepFused(float value1, float value2) { ExecutionContext context = NativeInterface.GetContext(); @@ -1679,7 +1585,6 @@ namespace ARMeilleure.Instructions return result; } - [UnmanagedCallersOnly] public static float FPRecpX(float value) { ExecutionContext context = NativeInterface.GetContext(); @@ -1705,19 +1610,12 @@ namespace ARMeilleure.Instructions return result; } - [UnmanagedCallersOnly] public static float FPRSqrtEstimate(float value) { - return FPRSqrtEstimateFpscrImpl(value, false); + return FPRSqrtEstimateFpscr(value, false); } - [UnmanagedCallersOnly] - public static float FPRSqrtEstimateFpscr(float value, byte standardFpscr) - { - return FPRSqrtEstimateFpscrImpl(value, standardFpscr == 1); - } - - private static float FPRSqrtEstimateFpscrImpl(float value, bool standardFpscr) + public static float FPRSqrtEstimateFpscr(float value, bool standardFpscr) { ExecutionContext context = NativeInterface.GetContext(); FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr; @@ -1831,7 +1729,6 @@ namespace ARMeilleure.Instructions return result; } - [UnmanagedCallersOnly] public static float FPRSqrtStep(float value1, float value2) { ExecutionContext context = NativeInterface.GetContext(); @@ -1857,7 +1754,7 @@ namespace ARMeilleure.Instructions } else { - product = FPMulFpscrImpl(value1, value2, true); + product = FPMulFpscr(value1, value2, true); } result = FPHalvedSub(FPThree(false), product, context, fpcr); @@ -1866,7 +1763,6 @@ namespace ARMeilleure.Instructions return result; } - [UnmanagedCallersOnly] public static float FPRSqrtStepFused(float value1, float value2) { ExecutionContext context = NativeInterface.GetContext(); @@ -1910,7 +1806,6 @@ namespace ARMeilleure.Instructions return result; } - [UnmanagedCallersOnly] public static float FPSqrt(float value) { ExecutionContext context = NativeInterface.GetContext(); @@ -1953,13 +1848,12 @@ namespace ARMeilleure.Instructions return result; } - [UnmanagedCallersOnly] public static float FPSub(float value1, float value2) { - return FPSubFpscrImpl(value1, value2, false); + return FPSubFpscr(value1, value2, false); } - private static float FPSubFpscrImpl(float value1, float value2, bool standardFpscr) + public static float FPSubFpscr(float value1, float value2, bool standardFpscr) { ExecutionContext context = NativeInterface.GetContext(); FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr; @@ -2200,7 +2094,6 @@ namespace ARMeilleure.Instructions static class SoftFloat64_16 { - [UnmanagedCallersOnly] public static ushort FPConvert(double value) { ExecutionContext context = NativeInterface.GetContext(); @@ -2320,19 +2213,12 @@ namespace ARMeilleure.Instructions static class SoftFloat64 { - [UnmanagedCallersOnly] public static double FPAdd(double value1, double value2) { - return FPAddFpscrImpl(value1, value2, false); + return FPAddFpscr(value1, value2, false); } - [UnmanagedCallersOnly] - public static double FPAddFpscr(double value1, double value2, byte standardFpscr) - { - return FPAddFpscrImpl(value1, value2, standardFpscr == 1); - } - - private static double FPAddFpscrImpl(double value1, double value2, bool standardFpscr) + public static double FPAddFpscr(double value1, double value2, bool standardFpscr) { ExecutionContext context = NativeInterface.GetContext(); FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr; @@ -2383,8 +2269,7 @@ namespace ARMeilleure.Instructions return result; } - [UnmanagedCallersOnly] - public static int FPCompare(double value1, double value2, byte signalNaNs) + public static int FPCompare(double value1, double value2, bool signalNaNs) { ExecutionContext context = NativeInterface.GetContext(); FPCR fpcr = context.Fpcr; @@ -2398,7 +2283,7 @@ namespace ARMeilleure.Instructions { result = 0b0011; - if (type1 == FPType.SNaN || type2 == FPType.SNaN || signalNaNs == 1) + if (type1 == FPType.SNaN || type2 == FPType.SNaN || signalNaNs) { SoftFloat.FPProcessException(FPException.InvalidOp, context, fpcr); } @@ -2422,19 +2307,12 @@ namespace ARMeilleure.Instructions return result; } - [UnmanagedCallersOnly] public static double FPCompareEQ(double value1, double value2) { - return FPCompareEQFpscrImpl(value1, value2, false); + return FPCompareEQFpscr(value1, value2, false); } - [UnmanagedCallersOnly] - public static double FPCompareEQFpscr(double value1, double value2, byte standardFpscr) - { - return FPCompareEQFpscrImpl(value1, value2, standardFpscr == 1); - } - - private static double FPCompareEQFpscrImpl(double value1, double value2, bool standardFpscr) + public static double FPCompareEQFpscr(double value1, double value2, bool standardFpscr) { ExecutionContext context = NativeInterface.GetContext(); FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr; @@ -2461,19 +2339,12 @@ namespace ARMeilleure.Instructions return result; } - [UnmanagedCallersOnly] public static double FPCompareGE(double value1, double value2) { - return FPCompareGEFpscrImpl(value1, value2, false); + return FPCompareGEFpscr(value1, value2, false); } - [UnmanagedCallersOnly] - public static double FPCompareGEFpscr(double value1, double value2, byte standardFpscr) - { - return FPCompareGEFpscrImpl(value1, value2, standardFpscr == 1); - } - - private static double FPCompareGEFpscrImpl(double value1, double value2, bool standardFpscr) + public static double FPCompareGEFpscr(double value1, double value2, bool standardFpscr) { ExecutionContext context = NativeInterface.GetContext(); FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr; @@ -2497,19 +2368,12 @@ namespace ARMeilleure.Instructions return result; } - [UnmanagedCallersOnly] public static double FPCompareGT(double value1, double value2) { - return FPCompareGTFpscrImpl(value1, value2, false); + return FPCompareGTFpscr(value1, value2, false); } - [UnmanagedCallersOnly] - public static double FPCompareGTFpscr(double value1, double value2, byte standardFpscr) - { - return FPCompareGTFpscrImpl(value1, value2, standardFpscr == 1); - } - - private static double FPCompareGTFpscrImpl(double value1, double value2, bool standardFpscr) + public static double FPCompareGTFpscr(double value1, double value2, bool standardFpscr) { ExecutionContext context = NativeInterface.GetContext(); FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr; @@ -2533,31 +2397,26 @@ namespace ARMeilleure.Instructions return result; } - [UnmanagedCallersOnly] public static double FPCompareLE(double value1, double value2) { - return FPCompareGEFpscrImpl(value2, value1, false); + return FPCompareGE(value2, value1); } - [UnmanagedCallersOnly] public static double FPCompareLT(double value1, double value2) { - return FPCompareGTFpscrImpl(value2, value1, false); + return FPCompareGT(value2, value1); } - [UnmanagedCallersOnly] - public static double FPCompareLEFpscr(double value1, double value2, byte standardFpscr) + public static double FPCompareLEFpscr(double value1, double value2, bool standardFpscr) { - return FPCompareGEFpscrImpl(value2, value1, standardFpscr == 1); + return FPCompareGEFpscr(value2, value1, standardFpscr); } - [UnmanagedCallersOnly] - public static double FPCompareLTFpscr(double value1, double value2, byte standardFpscr) + public static double FPCompareLTFpscr(double value1, double value2, bool standardFpscr) { - return FPCompareGTFpscrImpl(value2, value1, standardFpscr == 1); + return FPCompareGTFpscr(value2, value1, standardFpscr); } - [UnmanagedCallersOnly] public static double FPDiv(double value1, double value2) { ExecutionContext context = NativeInterface.GetContext(); @@ -2610,19 +2469,12 @@ namespace ARMeilleure.Instructions return result; } - [UnmanagedCallersOnly] public static double FPMax(double value1, double value2) { - return FPMaxFpscrImpl(value1, value2, false); + return FPMaxFpscr(value1, value2, false); } - [UnmanagedCallersOnly] - public static double FPMaxFpscr(double value1, double value2, byte standardFpscr) - { - return FPMaxFpscrImpl(value1, value2, standardFpscr == 1); - } - - private static double FPMaxFpscrImpl(double value1, double value2, bool standardFpscr) + public static double FPMaxFpscr(double value1, double value2, bool standardFpscr) { ExecutionContext context = NativeInterface.GetContext(); FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr; @@ -2683,19 +2535,12 @@ namespace ARMeilleure.Instructions return result; } - [UnmanagedCallersOnly] public static double FPMaxNum(double value1, double value2) { - return FPMaxNumFpscrImpl(value1, value2, false); + return FPMaxNumFpscr(value1, value2, false); } - [UnmanagedCallersOnly] - public static double FPMaxNumFpscr(double value1, double value2, byte standardFpscr) - { - return FPMaxNumFpscrImpl(value1, value2, standardFpscr == 1); - } - - private static double FPMaxNumFpscrImpl(double value1, double value2, bool standardFpscr) + public static double FPMaxNumFpscr(double value1, double value2, bool standardFpscr) { ExecutionContext context = NativeInterface.GetContext(); FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr; @@ -2712,22 +2557,15 @@ namespace ARMeilleure.Instructions value2 = FPInfinity(true); } - return FPMaxFpscrImpl(value1, value2, standardFpscr); + return FPMaxFpscr(value1, value2, standardFpscr); } - [UnmanagedCallersOnly] public static double FPMin(double value1, double value2) { - return FPMinFpscrImpl(value1, value2, false); + return FPMinFpscr(value1, value2, false); } - [UnmanagedCallersOnly] - public static double FPMinFpscr(double value1, double value2, byte standardFpscr) - { - return FPMinFpscrImpl(value1, value2, standardFpscr == 1); - } - - private static double FPMinFpscrImpl(double value1, double value2, bool standardFpscr) + public static double FPMinFpscr(double value1, double value2, bool standardFpscr) { ExecutionContext context = NativeInterface.GetContext(); FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr; @@ -2788,19 +2626,12 @@ namespace ARMeilleure.Instructions return result; } - [UnmanagedCallersOnly] public static double FPMinNum(double value1, double value2) { - return FPMinNumFpscrImpl(value1, value2, false); + return FPMinNumFpscr(value1, value2, false); } - [UnmanagedCallersOnly] - public static double FPMinNumFpscr(double value1, double value2, byte standardFpscr) - { - return FPMinNumFpscrImpl(value1, value2, standardFpscr == 1); - } - - private static double FPMinNumFpscrImpl(double value1, double value2, bool standardFpscr) + public static double FPMinNumFpscr(double value1, double value2, bool standardFpscr) { ExecutionContext context = NativeInterface.GetContext(); FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr; @@ -2817,22 +2648,15 @@ namespace ARMeilleure.Instructions value2 = FPInfinity(false); } - return FPMinFpscrImpl(value1, value2, standardFpscr); + return FPMinFpscr(value1, value2, standardFpscr); } - [UnmanagedCallersOnly] public static double FPMul(double value1, double value2) { - return FPMulFpscrImpl(value1, value2, false); + return FPMulFpscr(value1, value2, false); } - [UnmanagedCallersOnly] - public static double FPMulFpscr(double value1, double value2, byte standardFpscr) - { - return FPMulFpscrImpl(value1, value2, standardFpscr == 1); - } - - private static double FPMulFpscrImpl(double value1, double value2, bool standardFpscr) + public static double FPMulFpscr(double value1, double value2, bool standardFpscr) { ExecutionContext context = NativeInterface.GetContext(); FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr; @@ -2879,19 +2703,12 @@ namespace ARMeilleure.Instructions return result; } - [UnmanagedCallersOnly] public static double FPMulAdd(double valueA, double value1, double value2) { - return FPMulAddFpscrImpl(valueA, value1, value2, false); + return FPMulAddFpscr(valueA, value1, value2, false); } - [UnmanagedCallersOnly] - public static double FPMulAddFpscr(double valueA, double value1, double value2, byte standardFpscr) - { - return FPMulAddFpscrImpl(valueA, value1, value2, standardFpscr == 1); - } - - private static double FPMulAddFpscrImpl(double valueA, double value1, double value2, bool standardFpscr) + public static double FPMulAddFpscr(double valueA, double value1, double value2, bool standardFpscr) { ExecutionContext context = NativeInterface.GetContext(); FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr; @@ -2957,23 +2774,20 @@ namespace ARMeilleure.Instructions return result; } - [UnmanagedCallersOnly] public static double FPMulSub(double valueA, double value1, double value2) { value1 = value1.FPNeg(); - return FPMulAddFpscrImpl(valueA, value1, value2, false); + return FPMulAdd(valueA, value1, value2); } - [UnmanagedCallersOnly] - public static double FPMulSubFpscr(double valueA, double value1, double value2, byte standardFpscr) + public static double FPMulSubFpscr(double valueA, double value1, double value2, bool standardFpscr) { value1 = value1.FPNeg(); - return FPMulAddFpscrImpl(valueA, value1, value2, standardFpscr == 1); + return FPMulAddFpscr(valueA, value1, value2, standardFpscr); } - [UnmanagedCallersOnly] public static double FPMulX(double value1, double value2) { ExecutionContext context = NativeInterface.GetContext(); @@ -3019,36 +2833,27 @@ namespace ARMeilleure.Instructions return result; } - [UnmanagedCallersOnly] public static double FPNegMulAdd(double valueA, double value1, double value2) { valueA = valueA.FPNeg(); value1 = value1.FPNeg(); - return FPMulAddFpscrImpl(valueA, value1, value2, false); + return FPMulAdd(valueA, value1, value2); } - [UnmanagedCallersOnly] public static double FPNegMulSub(double valueA, double value1, double value2) { valueA = valueA.FPNeg(); - return FPMulAddFpscrImpl(valueA, value1, value2, false); + return FPMulAdd(valueA, value1, value2); } - [UnmanagedCallersOnly] public static double FPRecipEstimate(double value) { - return FPRecipEstimateFpscrImpl(value, false); + return FPRecipEstimateFpscr(value, false); } - [UnmanagedCallersOnly] - public static double FPRecipEstimateFpscr(double value, byte standardFpscr) - { - return FPRecipEstimateFpscrImpl(value, standardFpscr == 1); - } - - private static double FPRecipEstimateFpscrImpl(double value, bool standardFpscr) + public static double FPRecipEstimateFpscr(double value, bool standardFpscr) { ExecutionContext context = NativeInterface.GetContext(); FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr; @@ -3135,7 +2940,6 @@ namespace ARMeilleure.Instructions return result; } - [UnmanagedCallersOnly] public static double FPRecipStep(double value1, double value2) { ExecutionContext context = NativeInterface.GetContext(); @@ -3161,7 +2965,7 @@ namespace ARMeilleure.Instructions } else { - product = FPMulFpscrImpl(value1, value2, true); + product = FPMulFpscr(value1, value2, true); } result = FPSubFpscr(FPTwo(false), product, true); @@ -3170,7 +2974,6 @@ namespace ARMeilleure.Instructions return result; } - [UnmanagedCallersOnly] public static double FPRecipStepFused(double value1, double value2) { ExecutionContext context = NativeInterface.GetContext(); @@ -3214,7 +3017,6 @@ namespace ARMeilleure.Instructions return result; } - [UnmanagedCallersOnly] public static double FPRecpX(double value) { ExecutionContext context = NativeInterface.GetContext(); @@ -3240,19 +3042,12 @@ namespace ARMeilleure.Instructions return result; } - [UnmanagedCallersOnly] public static double FPRSqrtEstimate(double value) { - return FPRSqrtEstimateFpscrImpl(value, false); + return FPRSqrtEstimateFpscr(value, false); } - [UnmanagedCallersOnly] - public static double FPRSqrtEstimateFpscr(double value, byte standardFpscr) - { - return FPRSqrtEstimateFpscrImpl(value, standardFpscr == 1); - } - - private static double FPRSqrtEstimateFpscrImpl(double value, bool standardFpscr) + public static double FPRSqrtEstimateFpscr(double value, bool standardFpscr) { ExecutionContext context = NativeInterface.GetContext(); FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr; @@ -3366,7 +3161,6 @@ namespace ARMeilleure.Instructions return result; } - [UnmanagedCallersOnly] public static double FPRSqrtStep(double value1, double value2) { ExecutionContext context = NativeInterface.GetContext(); @@ -3392,7 +3186,7 @@ namespace ARMeilleure.Instructions } else { - product = FPMulFpscrImpl(value1, value2, true); + product = FPMulFpscr(value1, value2, true); } result = FPHalvedSub(FPThree(false), product, context, fpcr); @@ -3401,7 +3195,6 @@ namespace ARMeilleure.Instructions return result; } - [UnmanagedCallersOnly] public static double FPRSqrtStepFused(double value1, double value2) { ExecutionContext context = NativeInterface.GetContext(); @@ -3445,7 +3238,6 @@ namespace ARMeilleure.Instructions return result; } - [UnmanagedCallersOnly] public static double FPSqrt(double value) { ExecutionContext context = NativeInterface.GetContext(); @@ -3488,7 +3280,6 @@ namespace ARMeilleure.Instructions return result; } - [UnmanagedCallersOnly] public static double FPSub(double value1, double value2) { return FPSubFpscr(value1, value2, false); diff --git a/src/ARMeilleure/Translation/DelegateInfo.cs b/src/ARMeilleure/Translation/DelegateInfo.cs index c27dbd6b4..d3b535de1 100644 --- a/src/ARMeilleure/Translation/DelegateInfo.cs +++ b/src/ARMeilleure/Translation/DelegateInfo.cs @@ -1,10 +1,18 @@ +using System; + namespace ARMeilleure.Translation { class DelegateInfo { - public nint FuncPtr { get; private set; } - public DelegateInfo(nint funcPtr) +#pragma warning disable IDE0052 // Remove unread private member + private readonly Delegate _dlg; // Ensure that this delegate will not be garbage collected. +#pragma warning restore IDE0052 + + public nint FuncPtr { get; } + + public DelegateInfo(Delegate dlg, nint funcPtr) { + _dlg = dlg; FuncPtr = funcPtr; } } diff --git a/src/ARMeilleure/Translation/Delegates.cs b/src/ARMeilleure/Translation/Delegates.cs index d83f7ebbd..64de8e5d4 100644 --- a/src/ARMeilleure/Translation/Delegates.cs +++ b/src/ARMeilleure/Translation/Delegates.cs @@ -1,8 +1,10 @@ using ARMeilleure.Instructions; +using ARMeilleure.State; using System; using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; using System.Reflection; +using System.Runtime.InteropServices; +// ReSharper disable RedundantTypeArgumentsOfMethod namespace ARMeilleure.Translation { @@ -33,7 +35,21 @@ namespace ARMeilleure.Translation return _delegates.Values[index].FuncPtr; // O(1). } - + + public static nint GetDelegateFuncPtr(MethodInfo info) + { + ArgumentNullException.ThrowIfNull(info); + + string key = GetKey(info); + + if (!_delegates.TryGetValue(key, out DelegateInfo dlgInfo)) // O(log(n)). + { + throw new KeyNotFoundException($"({nameof(key)} = {key})"); + } + + return dlgInfo.FuncPtr; + } + public static int GetDelegateIndex(MethodInfo info) { ArgumentNullException.ThrowIfNull(info); @@ -49,12 +65,12 @@ namespace ARMeilleure.Translation return index; } - - private static void SetDelegateInfo(MethodInfo method) - { - string key = GetKey(method); - _delegates.Add(key, new DelegateInfo(method.MethodHandle.GetFunctionPointer())); // ArgumentException (key). + private static void SetDelegateInfo(Delegate dlg, nint funcPtr) + { + string key = GetKey(dlg.Method); + + _delegates.Add(key, new DelegateInfo(dlg, funcPtr)); // ArgumentException (key). } private static string GetKey(MethodInfo info) @@ -63,184 +79,538 @@ namespace ARMeilleure.Translation } private static readonly SortedList _delegates; - + static Delegates() { _delegates = new SortedList(); - SetDelegateInfo(typeof(MathHelper).GetMethod(nameof(MathHelper.Abs))); - SetDelegateInfo(typeof(MathHelper).GetMethod(nameof(MathHelper.Ceiling))); - SetDelegateInfo(typeof(MathHelper).GetMethod(nameof(MathHelper.Floor))); - SetDelegateInfo(typeof(MathHelper).GetMethod(nameof(MathHelper.Round))); - SetDelegateInfo(typeof(MathHelper).GetMethod(nameof(MathHelper.Truncate))); + // ReSharper disable InconsistentNaming + // ReSharper disable RedundantDelegateCreation + MathAbs dlgMathAbs = new(Math.Abs); + MathCeiling dlgMathCeiling = new(Math.Ceiling); + MathFloor dlgMathFloor = new(Math.Floor); + MathRound dlgMathRound = new(Math.Round); + MathTruncate dlgMathTruncate = new(Math.Truncate); - SetDelegateInfo(typeof(MathHelperF).GetMethod(nameof(MathHelperF.Abs))); - SetDelegateInfo(typeof(MathHelperF).GetMethod(nameof(MathHelperF.Ceiling))); - SetDelegateInfo(typeof(MathHelperF).GetMethod(nameof(MathHelperF.Floor))); - SetDelegateInfo(typeof(MathHelperF).GetMethod(nameof(MathHelperF.Round))); - SetDelegateInfo(typeof(MathHelperF).GetMethod(nameof(MathHelperF.Truncate))); + MathFAbs dlgMathFAbs = new(MathF.Abs); + MathFCeiling dlgMathFCeiling = new(MathF.Ceiling); + MathFFloor dlgMathFFloor = new(MathF.Floor); + MathFRound dlgMathFRound = new(MathF.Round); + MathFTruncate dlgMathFTruncate = new(MathF.Truncate); - SetDelegateInfo(NativeInterface.Type.GetMethod(nameof(NativeInterface.Break))); - SetDelegateInfo(NativeInterface.Type.GetMethod(nameof(NativeInterface.CheckSynchronization))); - SetDelegateInfo(NativeInterface.Type.GetMethod(nameof(NativeInterface.EnqueueForRejit))); - SetDelegateInfo(NativeInterface.Type.GetMethod(nameof(NativeInterface.GetCntfrqEl0))); - SetDelegateInfo(NativeInterface.Type.GetMethod(nameof(NativeInterface.GetCntpctEl0))); - SetDelegateInfo(NativeInterface.Type.GetMethod(nameof(NativeInterface.GetCntvctEl0))); - SetDelegateInfo(NativeInterface.Type.GetMethod(nameof(NativeInterface.GetCtrEl0))); - SetDelegateInfo(NativeInterface.Type.GetMethod(nameof(NativeInterface.GetDczidEl0))); - SetDelegateInfo(NativeInterface.Type.GetMethod(nameof(NativeInterface.GetFunctionAddress))); - SetDelegateInfo(NativeInterface.Type.GetMethod(nameof(NativeInterface.InvalidateCacheLine))); - SetDelegateInfo(NativeInterface.Type.GetMethod(nameof(NativeInterface.ReadByte))); - SetDelegateInfo(NativeInterface.Type.GetMethod(nameof(NativeInterface.ReadUInt16))); - SetDelegateInfo(NativeInterface.Type.GetMethod(nameof(NativeInterface.ReadUInt32))); - SetDelegateInfo(NativeInterface.Type.GetMethod(nameof(NativeInterface.ReadUInt64))); - SetDelegateInfo(NativeInterface.Type.GetMethod(nameof(NativeInterface.ReadVector128))); - SetDelegateInfo(NativeInterface.Type.GetMethod(nameof(NativeInterface.SignalMemoryTracking))); - SetDelegateInfo(NativeInterface.Type.GetMethod(nameof(NativeInterface.SupervisorCall))); - SetDelegateInfo(NativeInterface.Type.GetMethod(nameof(NativeInterface.ThrowInvalidMemoryAccess))); - SetDelegateInfo(NativeInterface.Type.GetMethod(nameof(NativeInterface.Undefined))); - SetDelegateInfo(NativeInterface.Type.GetMethod(nameof(NativeInterface.WriteByte))); - SetDelegateInfo(NativeInterface.Type.GetMethod(nameof(NativeInterface.WriteUInt16))); - SetDelegateInfo(NativeInterface.Type.GetMethod(nameof(NativeInterface.WriteUInt32))); - SetDelegateInfo(NativeInterface.Type.GetMethod(nameof(NativeInterface.WriteUInt64))); - SetDelegateInfo(NativeInterface.Type.GetMethod(nameof(NativeInterface.WriteVector128))); + NativeInterfaceBreak dlgNativeInterfaceBreak = new(NativeInterface.Break); + NativeInterfaceCheckSynchronization dlgNativeInterfaceCheckSynchronization = new(NativeInterface.CheckSynchronization); + NativeInterfaceEnqueueForRejit dlgNativeInterfaceEnqueueForRejit = new(NativeInterface.EnqueueForRejit); + NativeInterfaceGetCntfrqEl0 dlgNativeInterfaceGetCntfrqEl0 = new(NativeInterface.GetCntfrqEl0); + NativeInterfaceGetCntpctEl0 dlgNativeInterfaceGetCntpctEl0 = new(NativeInterface.GetCntpctEl0); + NativeInterfaceGetCntvctEl0 dlgNativeInterfaceGetCntvctEl0 = new(NativeInterface.GetCntvctEl0); + NativeInterfaceGetCtrEl0 dlgNativeInterfaceGetCtrEl0 = new(NativeInterface.GetCtrEl0); + NativeInterfaceGetDczidEl0 dlgNativeInterfaceGetDczidEl0 = new(NativeInterface.GetDczidEl0); + NativeInterfaceGetFunctionAddress dlgNativeInterfaceGetFunctionAddress = new(NativeInterface.GetFunctionAddress); + NativeInterfaceInvalidateCacheLine dlgNativeInterfaceInvalidateCacheLine = new(NativeInterface.InvalidateCacheLine); + NativeInterfaceReadByte dlgNativeInterfaceReadByte = new(NativeInterface.ReadByte); + NativeInterfaceReadUInt16 dlgNativeInterfaceReadUInt16 = new(NativeInterface.ReadUInt16); + NativeInterfaceReadUInt32 dlgNativeInterfaceReadUInt32 = new(NativeInterface.ReadUInt32); + NativeInterfaceReadUInt64 dlgNativeInterfaceReadUInt64 = new(NativeInterface.ReadUInt64); + NativeInterfaceReadVector128 dlgNativeInterfaceReadVector128 = new(NativeInterface.ReadVector128); + NativeInterfaceSignalMemoryTracking dlgNativeInterfaceSignalMemoryTracking = new(NativeInterface.SignalMemoryTracking); + NativeInterfaceSupervisorCall dlgNativeInterfaceSupervisorCall = new(NativeInterface.SupervisorCall); + NativeInterfaceThrowInvalidMemoryAccess dlgNativeInterfaceThrowInvalidMemoryAccess = new(NativeInterface.ThrowInvalidMemoryAccess); + NativeInterfaceUndefined dlgNativeInterfaceUndefined = new(NativeInterface.Undefined); + NativeInterfaceWriteByte dlgNativeInterfaceWriteByte = new(NativeInterface.WriteByte); + NativeInterfaceWriteUInt16 dlgNativeInterfaceWriteUInt16 = new(NativeInterface.WriteUInt16); + NativeInterfaceWriteUInt32 dlgNativeInterfaceWriteUInt32 = new(NativeInterface.WriteUInt32); + NativeInterfaceWriteUInt64 dlgNativeInterfaceWriteUInt64 = new(NativeInterface.WriteUInt64); + NativeInterfaceWriteVector128 dlgNativeInterfaceWriteVector128 = new(NativeInterface.WriteVector128); - SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.CountLeadingSigns))); - SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.CountLeadingZeros))); - SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Crc32b))); - SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Crc32cb))); - SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Crc32ch))); - SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Crc32cw))); - SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Crc32cx))); - SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Crc32h))); - SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Crc32w))); - SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Crc32x))); - SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Decrypt))); - SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Encrypt))); - SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.FixedRotate))); - SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.HashChoose))); - SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.HashLower))); - SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.HashMajority))); - SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.HashParity))); - SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.HashUpper))); - SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.InverseMixColumns))); - SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.MixColumns))); - SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.PolynomialMult64_128))); - SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.SatF32ToS32))); - SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.SatF32ToS64))); - SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.SatF32ToU32))); - SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.SatF32ToU64))); - SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.SatF64ToS32))); - SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.SatF64ToS64))); - SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.SatF64ToU32))); - SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.SatF64ToU64))); - SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Sha1SchedulePart1))); - SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Sha1SchedulePart2))); - SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Sha256SchedulePart1))); - SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Sha256SchedulePart2))); - SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.SignedShrImm64))); - SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Tbl1))); - SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Tbl2))); - SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Tbl3))); - SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Tbl4))); - SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Tbx1))); - SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Tbx2))); - SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Tbx3))); - SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Tbx4))); - SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.UnsignedShrImm64))); + SoftFallbackCountLeadingSigns dlgSoftFallbackCountLeadingSigns = new(SoftFallback.CountLeadingSigns); + SoftFallbackCountLeadingZeros dlgSoftFallbackCountLeadingZeros = new(SoftFallback.CountLeadingZeros); + SoftFallbackCrc32b dlgSoftFallbackCrc32b = new(SoftFallback.Crc32b); + SoftFallbackCrc32cb dlgSoftFallbackCrc32cb = new(SoftFallback.Crc32cb); + SoftFallbackCrc32ch dlgSoftFallbackCrc32ch = new(SoftFallback.Crc32ch); + SoftFallbackCrc32cw dlgSoftFallbackCrc32cw = new(SoftFallback.Crc32cw); + SoftFallbackCrc32cx dlgSoftFallbackCrc32cx = new(SoftFallback.Crc32cx); + + SoftFallbackCrc32h dlgSoftFallbackCrc32h = new(SoftFallback.Crc32h); + SoftFallbackCrc32w dlgSoftFallbackCrc32w = new(SoftFallback.Crc32w); + SoftFallbackCrc32x dlgSoftFallbackCrc32x = new(SoftFallback.Crc32x); + SoftFallbackDecrypt dlgSoftFallbackDecrypt = new(SoftFallback.Decrypt); + SoftFallbackEncrypt dlgSoftFallbackEncrypt = new(SoftFallback.Encrypt); + SoftFallbackFixedRotate dlgSoftFallbackFixedRotate = new(SoftFallback.FixedRotate); + SoftFallbackHashChoose dlgSoftFallbackHashChoose = new(SoftFallback.HashChoose); + SoftFallbackHashLower dlgSoftFallbackHashLower = new(SoftFallback.HashLower); + SoftFallbackHashMajority dlgSoftFallbackHashMajority = new(SoftFallback.HashMajority); + SoftFallbackHashParity dlgSoftFallbackHashParity = new(SoftFallback.HashParity); + SoftFallbackHashUpper dlgSoftFallbackHashUpper = new(SoftFallback.HashUpper); + SoftFallbackInverseMixColumns dlgSoftFallbackInverseMixColumns = new(SoftFallback.InverseMixColumns); + SoftFallbackMixColumns dlgSoftFallbackMixColumns = new(SoftFallback.MixColumns); + SoftFallbackPolynomialMult64_128 dlgSoftFallbackPolynomialMult64_128 = new(SoftFallback.PolynomialMult64_128); + SoftFallbackSatF32ToS32 dlgSoftFallbackSatF32ToS32 = new(SoftFallback.SatF32ToS32); + SoftFallbackSatF32ToS64 dlgSoftFallbackSatF32ToS64 = new(SoftFallback.SatF32ToS64); + SoftFallbackSatF32ToU32 dlgSoftFallbackSatF32ToU32 = new(SoftFallback.SatF32ToU32); + SoftFallbackSatF32ToU64 dlgSoftFallbackSatF32ToU64 = new(SoftFallback.SatF32ToU64); + SoftFallbackSatF64ToS32 dlgSoftFallbackSatF64ToS32 = new(SoftFallback.SatF64ToS32); + SoftFallbackSatF64ToS64 dlgSoftFallbackSatF64ToS64 = new(SoftFallback.SatF64ToS64); + SoftFallbackSatF64ToU32 dlgSoftFallbackSatF64ToU32 = new(SoftFallback.SatF64ToU32); + SoftFallbackSatF64ToU64 dlgSoftFallbackSatF64ToU64 = new(SoftFallback.SatF64ToU64); + SoftFallbackSha1SchedulePart1 dlgSoftFallbackSha1SchedulePart1 = new(SoftFallback.Sha1SchedulePart1); + SoftFallbackSha1SchedulePart2 dlgSoftFallbackSha1SchedulePart2 = new(SoftFallback.Sha1SchedulePart2); + SoftFallbackSha256SchedulePart1 dlgSoftFallbackSha256SchedulePart1 = new(SoftFallback.Sha256SchedulePart1); + SoftFallbackSha256SchedulePart2 dlgSoftFallbackSha256SchedulePart2 = new(SoftFallback.Sha256SchedulePart2); + SoftFallbackSignedShrImm64 dlgSoftFallbackSignedShrImm64 = new(SoftFallback.SignedShrImm64); + SoftFallbackTbl1 dlgSoftFallbackTbl1 = new(SoftFallback.Tbl1); + SoftFallbackTbl2 dlgSoftFallbackTbl2 = new(SoftFallback.Tbl2); + SoftFallbackTbl3 dlgSoftFallbackTbl3 = new(SoftFallback.Tbl3); + SoftFallbackTbl4 dlgSoftFallbackTbl4 = new(SoftFallback.Tbl4); + SoftFallbackTbx1 dlgSoftFallbackTbx1 = new(SoftFallback.Tbx1); + SoftFallbackTbx2 dlgSoftFallbackTbx2 = new(SoftFallback.Tbx2); + SoftFallbackTbx3 dlgSoftFallbackTbx3 = new(SoftFallback.Tbx3); + SoftFallbackTbx4 dlgSoftFallbackTbx4 = new(SoftFallback.Tbx4); + SoftFallbackUnsignedShrImm64 dlgSoftFallbackUnsignedShrImm64 = new(SoftFallback.UnsignedShrImm64); - SetDelegateInfo(typeof(SoftFloat16_32).GetMethod(nameof(SoftFloat16_32.FPConvert))); - SetDelegateInfo(typeof(SoftFloat16_64).GetMethod(nameof(SoftFloat16_64.FPConvert))); + SoftFloat16_32FPConvert dlgSoftFloat16_32FPConvert = new(SoftFloat16_32.FPConvert); + SoftFloat16_64FPConvert dlgSoftFloat16_64FPConvert = new(SoftFloat16_64.FPConvert); - SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPAdd))); - SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPAddFpscr))); // A32 only. - SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPCompare))); - SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPCompareEQ))); - SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPCompareEQFpscr))); // A32 only. - SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPCompareGE))); - SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPCompareGEFpscr))); // A32 only. - SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPCompareGT))); - SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPCompareGTFpscr))); // A32 only. - SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPCompareLE))); - SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPCompareLEFpscr))); // A32 only. - SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPCompareLT))); - SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPCompareLTFpscr))); // A32 only. - SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPDiv))); - SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPMax))); - SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPMaxFpscr))); // A32 only. - SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPMaxNum))); - SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPMaxNumFpscr))); // A32 only. - SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPMin))); - SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPMinFpscr))); // A32 only. - SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPMinNum))); - SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPMinNumFpscr))); // A32 only. - SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPMul))); - SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPMulFpscr))); // A32 only. - SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPMulAdd))); - SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPMulAddFpscr))); // A32 only. - SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPMulSub))); - SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPMulSubFpscr))); // A32 only. - SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPMulX))); - SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPNegMulAdd))); - SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPNegMulSub))); - SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPRecipEstimate))); - SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPRecipEstimateFpscr))); // A32 only. - SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPRecipStep))); // A32 only. - SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPRecipStepFused))); - SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPRecpX))); - SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPRSqrtEstimate))); - SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPRSqrtEstimateFpscr))); // A32 only. - SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPRSqrtStep))); // A32 only. - SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPRSqrtStepFused))); - SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPSqrt))); - SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPSub))); + SoftFloat32FPAdd dlgSoftFloat32FPAdd = new(SoftFloat32.FPAdd); + SoftFloat32FPAddFpscr dlgSoftFloat32FPAddFpscr = new(SoftFloat32.FPAddFpscr); // A32 only. + SoftFloat32FPCompare dlgSoftFloat32FPCompare = new(SoftFloat32.FPCompare); + SoftFloat32FPCompareEQ dlgSoftFloat32FPCompareEQ = new(SoftFloat32.FPCompareEQ); + SoftFloat32FPCompareEQFpscr dlgSoftFloat32FPCompareEQFpscr = new(SoftFloat32.FPCompareEQFpscr); // A32 only. + SoftFloat32FPCompareGE dlgSoftFloat32FPCompareGE = new(SoftFloat32.FPCompareGE); + SoftFloat32FPCompareGEFpscr dlgSoftFloat32FPCompareGEFpscr = new(SoftFloat32.FPCompareGEFpscr); // A32 only. + SoftFloat32FPCompareGT dlgSoftFloat32FPCompareGT = new(SoftFloat32.FPCompareGT); + SoftFloat32FPCompareGTFpscr dlgSoftFloat32FPCompareGTFpscr = new(SoftFloat32.FPCompareGTFpscr); // A32 only. + SoftFloat32FPCompareLE dlgSoftFloat32FPCompareLE = new(SoftFloat32.FPCompareLE); + SoftFloat32FPCompareLEFpscr dlgSoftFloat32FPCompareLEFpscr = new(SoftFloat32.FPCompareLEFpscr); // A32 only. + SoftFloat32FPCompareLT dlgSoftFloat32FPCompareLT = new(SoftFloat32.FPCompareLT); + SoftFloat32FPCompareLTFpscr dlgSoftFloat32FPCompareLTFpscr = new(SoftFloat32.FPCompareLTFpscr); // A32 only. + SoftFloat32FPDiv dlgSoftFloat32FPDiv = new(SoftFloat32.FPDiv); + SoftFloat32FPMax dlgSoftFloat32FPMax = new(SoftFloat32.FPMax); + SoftFloat32FPMaxFpscr dlgSoftFloat32FPMaxFpscr = new(SoftFloat32.FPMaxFpscr); // A32 only. + SoftFloat32FPMaxNum dlgSoftFloat32FPMaxNum = new(SoftFloat32.FPMaxNum); + SoftFloat32FPMaxNumFpscr dlgSoftFloat32FPMaxNumFpscr = new(SoftFloat32.FPMaxNumFpscr); // A32 only. + SoftFloat32FPMin dlgSoftFloat32FPMin = new(SoftFloat32.FPMin); + SoftFloat32FPMinFpscr dlgSoftFloat32FPMinFpscr = new(SoftFloat32.FPMinFpscr); // A32 only. + SoftFloat32FPMinNum dlgSoftFloat32FPMinNum = new(SoftFloat32.FPMinNum); + SoftFloat32FPMinNumFpscr dlgSoftFloat32FPMinNumFpscr = new(SoftFloat32.FPMinNumFpscr); // A32 only. + SoftFloat32FPMul dlgSoftFloat32FPMul = new(SoftFloat32.FPMul); + SoftFloat32FPMulFpscr dlgSoftFloat32FPMulFpscr = new(SoftFloat32.FPMulFpscr); // A32 only. + SoftFloat32FPMulAdd dlgSoftFloat32FPMulAdd = new(SoftFloat32.FPMulAdd); + SoftFloat32FPMulAddFpscr dlgSoftFloat32FPMulAddFpscr = new(SoftFloat32.FPMulAddFpscr); // A32 only. + SoftFloat32FPMulSub dlgSoftFloat32FPMulSub = new(SoftFloat32.FPMulSub); + SoftFloat32FPMulSubFpscr dlgSoftFloat32FPMulSubFpscr = new(SoftFloat32.FPMulSubFpscr); // A32 only. + SoftFloat32FPMulX dlgSoftFloat32FPMulX = new(SoftFloat32.FPMulX); + SoftFloat32FPNegMulAdd dlgSoftFloat32FPNegMulAdd = new(SoftFloat32.FPNegMulAdd); + SoftFloat32FPNegMulSub dlgSoftFloat32FPNegMulSub = new(SoftFloat32.FPNegMulSub); + SoftFloat32FPRecipEstimate dlgSoftFloat32FPRecipEstimate = new(SoftFloat32.FPRecipEstimate); + SoftFloat32FPRecipEstimateFpscr dlgSoftFloat32FPRecipEstimateFpscr = new(SoftFloat32.FPRecipEstimateFpscr); // A32 only. + SoftFloat32FPRecipStep dlgSoftFloat32FPRecipStep = new(SoftFloat32.FPRecipStep); // A32 only. + SoftFloat32FPRecipStepFused dlgSoftFloat32FPRecipStepFused = new(SoftFloat32.FPRecipStepFused); + SoftFloat32FPRecpX dlgSoftFloat32FPRecpX = new(SoftFloat32.FPRecpX); + SoftFloat32FPRSqrtEstimate dlgSoftFloat32FPRSqrtEstimate = new(SoftFloat32.FPRSqrtEstimate); + SoftFloat32FPRSqrtEstimateFpscr dlgSoftFloat32FPRSqrtEstimateFpscr = new(SoftFloat32.FPRSqrtEstimateFpscr); // A32 only. + SoftFloat32FPRSqrtStep dlgSoftFloat32FPRSqrtStep = new(SoftFloat32.FPRSqrtStep); // A32 only. + SoftFloat32FPRSqrtStepFused dlgSoftFloat32FPRSqrtStepFused = new(SoftFloat32.FPRSqrtStepFused); + SoftFloat32FPSqrt dlgSoftFloat32FPSqrt = new(SoftFloat32.FPSqrt); + SoftFloat32FPSub dlgSoftFloat32FPSub = new(SoftFloat32.FPSub); - SetDelegateInfo(typeof(SoftFloat32_16).GetMethod(nameof(SoftFloat32_16.FPConvert))); + SoftFloat32_16FPConvert dlgSoftFloat32_16FPConvert = new(SoftFloat32_16.FPConvert); - SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPAdd))); - SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPAddFpscr))); // A32 only. - SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPCompare))); - SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPCompareEQ))); - SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPCompareEQFpscr))); // A32 only. - SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPCompareGE))); - SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPCompareGEFpscr))); // A32 only. - SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPCompareGT))); - SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPCompareGTFpscr))); // A32 only. - SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPCompareLE))); - SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPCompareLEFpscr))); // A32 only. - SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPCompareLT))); - SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPCompareLTFpscr))); // A32 only. - SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPDiv))); - SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPMax))); - SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPMaxFpscr))); // A32 only. - SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPMaxNum))); - SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPMaxNumFpscr))); // A32 only. - SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPMin))); - SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPMinFpscr))); // A32 only. - SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPMinNum))); - SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPMinNumFpscr))); // A32 only. - SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPMul))); - SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPMulFpscr))); // A32 only. - SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPMulAdd))); - SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPMulAddFpscr))); // A32 only. - SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPMulSub))); - SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPMulSubFpscr))); // A32 only. - SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPMulX))); - SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPNegMulAdd))); - SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPNegMulSub))); - SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPRecipEstimate))); - SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPRecipEstimateFpscr))); // A32 only. - SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPRecipStep))); // A32 only. - SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPRecipStepFused))); - SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPRecpX))); - SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPRSqrtEstimate))); - SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPRSqrtEstimateFpscr))); // A32 only. - SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPRSqrtStep))); // A32 only. - SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPRSqrtStepFused))); - SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPSqrt))); - SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPSub))); + SoftFloat64FPAdd dlgSoftFloat64FPAdd = new(SoftFloat64.FPAdd); + SoftFloat64FPAddFpscr dlgSoftFloat64FPAddFpscr = new(SoftFloat64.FPAddFpscr); // A32 only. + SoftFloat64FPCompare dlgSoftFloat64FPCompare = new(SoftFloat64.FPCompare); + SoftFloat64FPCompareEQ dlgSoftFloat64FPCompareEQ = new(SoftFloat64.FPCompareEQ); + SoftFloat64FPCompareEQFpscr dlgSoftFloat64FPCompareEQFpscr = new(SoftFloat64.FPCompareEQFpscr); // A32 only. + SoftFloat64FPCompareGE dlgSoftFloat64FPCompareGE = new(SoftFloat64.FPCompareGE); + SoftFloat64FPCompareGEFpscr dlgSoftFloat64FPCompareGEFpscr = new(SoftFloat64.FPCompareGEFpscr); // A32 only. + SoftFloat64FPCompareGT dlgSoftFloat64FPCompareGT = new(SoftFloat64.FPCompareGT); + SoftFloat64FPCompareGTFpscr dlgSoftFloat64FPCompareGTFpscr = new(SoftFloat64.FPCompareGTFpscr); // A32 only. + SoftFloat64FPCompareLE dlgSoftFloat64FPCompareLE = new(SoftFloat64.FPCompareLE); + SoftFloat64FPCompareLEFpscr dlgSoftFloat64FPCompareLEFpscr = new(SoftFloat64.FPCompareLEFpscr); // A32 only. + SoftFloat64FPCompareLT dlgSoftFloat64FPCompareLT = new(SoftFloat64.FPCompareLT); + SoftFloat64FPCompareLTFpscr dlgSoftFloat64FPCompareLTFpscr = new(SoftFloat64.FPCompareLTFpscr); // A32 only. + SoftFloat64FPDiv dlgSoftFloat64FPDiv = new(SoftFloat64.FPDiv); + SoftFloat64FPMax dlgSoftFloat64FPMax = new(SoftFloat64.FPMax); + SoftFloat64FPMaxFpscr dlgSoftFloat64FPMaxFpscr = new(SoftFloat64.FPMaxFpscr); // A32 only. + SoftFloat64FPMaxNum dlgSoftFloat64FPMaxNum = new(SoftFloat64.FPMaxNum); + SoftFloat64FPMaxNumFpscr dlgSoftFloat64FPMaxNumFpscr = new(SoftFloat64.FPMaxNumFpscr); // A32 only. + SoftFloat64FPMin dlgSoftFloat64FPMin = new(SoftFloat64.FPMin); + SoftFloat64FPMinFpscr dlgSoftFloat64FPMinFpscr = new(SoftFloat64.FPMinFpscr); // A32 only. + SoftFloat64FPMinNum dlgSoftFloat64FPMinNum = new(SoftFloat64.FPMinNum); + SoftFloat64FPMinNumFpscr dlgSoftFloat64FPMinNumFpscr = new(SoftFloat64.FPMinNumFpscr); // A32 only. + SoftFloat64FPMul dlgSoftFloat64FPMul = new(SoftFloat64.FPMul); + SoftFloat64FPMulFpscr dlgSoftFloat64FPMulFpscr = new(SoftFloat64.FPMulFpscr); // A32 only. + SoftFloat64FPMulAdd dlgSoftFloat64FPMulAdd = new(SoftFloat64.FPMulAdd); + SoftFloat64FPMulAddFpscr dlgSoftFloat64FPMulAddFpscr = new(SoftFloat64.FPMulAddFpscr); // A32 only. + SoftFloat64FPMulSub dlgSoftFloat64FPMulSub = new(SoftFloat64.FPMulSub); + SoftFloat64FPMulSubFpscr dlgSoftFloat64FPMulSubFpscr = new(SoftFloat64.FPMulSubFpscr); // A32 only. + SoftFloat64FPMulX dlgSoftFloat64FPMulX = new(SoftFloat64.FPMulX); + SoftFloat64FPNegMulAdd dlgSoftFloat64FPNegMulAdd = new(SoftFloat64.FPNegMulAdd); + SoftFloat64FPNegMulSub dlgSoftFloat64FPNegMulSub = new(SoftFloat64.FPNegMulSub); + SoftFloat64FPRecipEstimate dlgSoftFloat64FPRecipEstimate = new(SoftFloat64.FPRecipEstimate); + SoftFloat64FPRecipEstimateFpscr dlgSoftFloat64FPRecipEstimateFpscr = new(SoftFloat64.FPRecipEstimateFpscr); // A32 only. + SoftFloat64FPRecipStep dlgSoftFloat64FPRecipStep = new(SoftFloat64.FPRecipStep); // A32 only. + SoftFloat64FPRecipStepFused dlgSoftFloat64FPRecipStepFused = new(SoftFloat64.FPRecipStepFused); + SoftFloat64FPRecpX dlgSoftFloat64FPRecpX = new(SoftFloat64.FPRecpX); + SoftFloat64FPRSqrtEstimate dlgSoftFloat64FPRSqrtEstimate = new(SoftFloat64.FPRSqrtEstimate); + SoftFloat64FPRSqrtEstimateFpscr dlgSoftFloat64FPRSqrtEstimateFpscr = new(SoftFloat64.FPRSqrtEstimateFpscr); // A32 only. + SoftFloat64FPRSqrtStep dlgSoftFloat64FPRSqrtStep = new(SoftFloat64.FPRSqrtStep); // A32 only. + SoftFloat64FPRSqrtStepFused dlgSoftFloat64FPRSqrtStepFused = new(SoftFloat64.FPRSqrtStepFused); + SoftFloat64FPSqrt dlgSoftFloat64FPSqrt = new(SoftFloat64.FPSqrt); + SoftFloat64FPSub dlgSoftFloat64FPSub = new(SoftFloat64.FPSub); - SetDelegateInfo(typeof(SoftFloat64_16).GetMethod(nameof(SoftFloat64_16.FPConvert))); + SoftFloat64_16FPConvert dlgSoftFloat64_16FPConvert = new(SoftFloat64_16.FPConvert); + // ReSharper restore InconsistentNaming + // ReSharper restore RedundantDelegateCreation + + SetDelegateInfo(dlgMathAbs, Marshal.GetFunctionPointerForDelegate(dlgMathAbs)); + SetDelegateInfo(dlgMathCeiling, Marshal.GetFunctionPointerForDelegate(dlgMathCeiling)); + SetDelegateInfo(dlgMathFloor, Marshal.GetFunctionPointerForDelegate(dlgMathFloor)); + SetDelegateInfo(dlgMathRound, Marshal.GetFunctionPointerForDelegate(dlgMathRound)); + SetDelegateInfo(dlgMathTruncate, Marshal.GetFunctionPointerForDelegate(dlgMathTruncate)); + + SetDelegateInfo(dlgMathFAbs, Marshal.GetFunctionPointerForDelegate(dlgMathFAbs)); + SetDelegateInfo(dlgMathFCeiling, Marshal.GetFunctionPointerForDelegate(dlgMathFCeiling)); + SetDelegateInfo(dlgMathFFloor, Marshal.GetFunctionPointerForDelegate(dlgMathFFloor)); + SetDelegateInfo(dlgMathFRound, Marshal.GetFunctionPointerForDelegate(dlgMathFRound)); + SetDelegateInfo(dlgMathFTruncate, Marshal.GetFunctionPointerForDelegate(dlgMathFTruncate)); + + SetDelegateInfo(dlgNativeInterfaceBreak, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceBreak)); + SetDelegateInfo(dlgNativeInterfaceCheckSynchronization, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceCheckSynchronization)); + SetDelegateInfo(dlgNativeInterfaceEnqueueForRejit, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceEnqueueForRejit)); + SetDelegateInfo(dlgNativeInterfaceGetCntfrqEl0, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceGetCntfrqEl0)); + SetDelegateInfo(dlgNativeInterfaceGetCntpctEl0, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceGetCntpctEl0)); + SetDelegateInfo(dlgNativeInterfaceGetCntvctEl0, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceGetCntvctEl0)); + SetDelegateInfo(dlgNativeInterfaceGetCtrEl0, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceGetCtrEl0)); + SetDelegateInfo(dlgNativeInterfaceGetDczidEl0, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceGetDczidEl0)); + SetDelegateInfo(dlgNativeInterfaceGetFunctionAddress, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceGetFunctionAddress)); + SetDelegateInfo(dlgNativeInterfaceInvalidateCacheLine, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceInvalidateCacheLine)); + SetDelegateInfo(dlgNativeInterfaceReadByte, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceReadByte)); + SetDelegateInfo(dlgNativeInterfaceReadUInt16, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceReadUInt16)); + SetDelegateInfo(dlgNativeInterfaceReadUInt32, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceReadUInt32)); + SetDelegateInfo(dlgNativeInterfaceReadUInt64, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceReadUInt64)); + SetDelegateInfo(dlgNativeInterfaceReadVector128, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceReadVector128)); + SetDelegateInfo(dlgNativeInterfaceSignalMemoryTracking, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceSignalMemoryTracking)); + SetDelegateInfo(dlgNativeInterfaceSupervisorCall, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceSupervisorCall)); + SetDelegateInfo(dlgNativeInterfaceThrowInvalidMemoryAccess, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceThrowInvalidMemoryAccess)); + SetDelegateInfo(dlgNativeInterfaceUndefined, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceUndefined)); + SetDelegateInfo(dlgNativeInterfaceWriteByte, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceWriteByte)); + SetDelegateInfo(dlgNativeInterfaceWriteUInt16, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceWriteUInt16)); + SetDelegateInfo(dlgNativeInterfaceWriteUInt32, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceWriteUInt32)); + SetDelegateInfo(dlgNativeInterfaceWriteUInt64, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceWriteUInt64)); + SetDelegateInfo(dlgNativeInterfaceWriteVector128, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceWriteVector128)); + + SetDelegateInfo(dlgSoftFallbackCountLeadingSigns, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackCountLeadingSigns)); + SetDelegateInfo(dlgSoftFallbackCountLeadingZeros, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackCountLeadingZeros)); + SetDelegateInfo(dlgSoftFallbackCrc32b, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackCrc32b)); + SetDelegateInfo(dlgSoftFallbackCrc32cb, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackCrc32cb)); + SetDelegateInfo(dlgSoftFallbackCrc32ch, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackCrc32ch)); + SetDelegateInfo(dlgSoftFallbackCrc32cw, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackCrc32cw)); + SetDelegateInfo(dlgSoftFallbackCrc32cx, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackCrc32cx)); + SetDelegateInfo(dlgSoftFallbackCrc32h, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackCrc32h)); + SetDelegateInfo(dlgSoftFallbackCrc32w, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackCrc32w)); + SetDelegateInfo(dlgSoftFallbackCrc32x, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackCrc32x)); + SetDelegateInfo(dlgSoftFallbackDecrypt, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackDecrypt)); + SetDelegateInfo(dlgSoftFallbackEncrypt, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackEncrypt)); + SetDelegateInfo(dlgSoftFallbackFixedRotate, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackFixedRotate)); + SetDelegateInfo(dlgSoftFallbackHashChoose, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackHashChoose)); + SetDelegateInfo(dlgSoftFallbackHashLower, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackHashLower)); + SetDelegateInfo(dlgSoftFallbackHashMajority, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackHashMajority)); + SetDelegateInfo(dlgSoftFallbackHashParity, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackHashParity)); + SetDelegateInfo(dlgSoftFallbackHashUpper, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackHashUpper)); + SetDelegateInfo(dlgSoftFallbackInverseMixColumns, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackInverseMixColumns)); + SetDelegateInfo(dlgSoftFallbackMixColumns, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackMixColumns)); + SetDelegateInfo(dlgSoftFallbackPolynomialMult64_128, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackPolynomialMult64_128)); + SetDelegateInfo(dlgSoftFallbackSatF32ToS32, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackSatF32ToS32)); + SetDelegateInfo(dlgSoftFallbackSatF32ToS64, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackSatF32ToS64)); + SetDelegateInfo(dlgSoftFallbackSatF32ToU32, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackSatF32ToU32)); + SetDelegateInfo(dlgSoftFallbackSatF32ToU64, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackSatF32ToU64)); + SetDelegateInfo(dlgSoftFallbackSatF64ToS32, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackSatF64ToS32)); + SetDelegateInfo(dlgSoftFallbackSatF64ToS64, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackSatF64ToS64)); + SetDelegateInfo(dlgSoftFallbackSatF64ToU32, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackSatF64ToU32)); + SetDelegateInfo(dlgSoftFallbackSatF64ToU64, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackSatF64ToU64)); + SetDelegateInfo(dlgSoftFallbackSha1SchedulePart1, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackSha1SchedulePart1)); + SetDelegateInfo(dlgSoftFallbackSha1SchedulePart2, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackSha1SchedulePart2)); + SetDelegateInfo(dlgSoftFallbackSha256SchedulePart1, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackSha256SchedulePart1)); + SetDelegateInfo(dlgSoftFallbackSha256SchedulePart2, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackSha256SchedulePart2)); + SetDelegateInfo(dlgSoftFallbackSignedShrImm64, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackSignedShrImm64)); + SetDelegateInfo(dlgSoftFallbackTbl1, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackTbl1)); + SetDelegateInfo(dlgSoftFallbackTbl2, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackTbl2)); + SetDelegateInfo(dlgSoftFallbackTbl3, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackTbl3)); + SetDelegateInfo(dlgSoftFallbackTbl4, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackTbl4)); + SetDelegateInfo(dlgSoftFallbackTbx1, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackTbx1)); + SetDelegateInfo(dlgSoftFallbackTbx2, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackTbx2)); + SetDelegateInfo(dlgSoftFallbackTbx3, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackTbx3)); + SetDelegateInfo(dlgSoftFallbackTbx4, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackTbx4)); + SetDelegateInfo(dlgSoftFallbackUnsignedShrImm64, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackUnsignedShrImm64)); + + SetDelegateInfo(dlgSoftFloat16_32FPConvert, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat16_32FPConvert)); + SetDelegateInfo(dlgSoftFloat16_64FPConvert, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat16_64FPConvert)); + + SetDelegateInfo(dlgSoftFloat32FPAdd, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPAdd)); + SetDelegateInfo(dlgSoftFloat32FPAddFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPAddFpscr)); // A32 only. + SetDelegateInfo(dlgSoftFloat32FPCompare, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPCompare)); + SetDelegateInfo(dlgSoftFloat32FPCompareEQ, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPCompareEQ)); + SetDelegateInfo(dlgSoftFloat32FPCompareEQFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPCompareEQFpscr)); // A32 only. + SetDelegateInfo(dlgSoftFloat32FPCompareGE, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPCompareGE)); + SetDelegateInfo(dlgSoftFloat32FPCompareGEFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPCompareGEFpscr)); // A32 only. + SetDelegateInfo(dlgSoftFloat32FPCompareGT, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPCompareGT)); + SetDelegateInfo(dlgSoftFloat32FPCompareGTFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPCompareGTFpscr)); // A32 only. + SetDelegateInfo(dlgSoftFloat32FPCompareLE, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPCompareLE)); + SetDelegateInfo(dlgSoftFloat32FPCompareLEFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPCompareLEFpscr)); // A32 only. + SetDelegateInfo(dlgSoftFloat32FPCompareLT, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPCompareLT)); + SetDelegateInfo(dlgSoftFloat32FPCompareLTFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPCompareLTFpscr)); // A32 only. + SetDelegateInfo(dlgSoftFloat32FPDiv, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPDiv)); + SetDelegateInfo(dlgSoftFloat32FPMax, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPMax)); + SetDelegateInfo(dlgSoftFloat32FPMaxFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPMaxFpscr)); // A32 only. + SetDelegateInfo(dlgSoftFloat32FPMaxNum, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPMaxNum)); + SetDelegateInfo(dlgSoftFloat32FPMaxNumFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPMaxNumFpscr)); // A32 only. + SetDelegateInfo(dlgSoftFloat32FPMin, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPMin)); + SetDelegateInfo(dlgSoftFloat32FPMinFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPMinFpscr)); // A32 only. + SetDelegateInfo(dlgSoftFloat32FPMinNum, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPMinNum)); + SetDelegateInfo(dlgSoftFloat32FPMinNumFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPMinNumFpscr)); // A32 only. + SetDelegateInfo(dlgSoftFloat32FPMul, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPMul)); + SetDelegateInfo(dlgSoftFloat32FPMulFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPMulFpscr)); // A32 only. + SetDelegateInfo(dlgSoftFloat32FPMulAdd, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPMulAdd)); + SetDelegateInfo(dlgSoftFloat32FPMulAddFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPMulAddFpscr)); // A32 only. + SetDelegateInfo(dlgSoftFloat32FPMulSub, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPMulSub)); + SetDelegateInfo(dlgSoftFloat32FPMulSubFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPMulSubFpscr)); // A32 only. + SetDelegateInfo(dlgSoftFloat32FPMulX, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPMulX)); + SetDelegateInfo(dlgSoftFloat32FPNegMulAdd, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPNegMulAdd)); + SetDelegateInfo(dlgSoftFloat32FPNegMulSub, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPNegMulSub)); + SetDelegateInfo(dlgSoftFloat32FPRecipEstimate, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPRecipEstimate)); + SetDelegateInfo(dlgSoftFloat32FPRecipEstimateFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPRecipEstimateFpscr)); // A32 only. + SetDelegateInfo(dlgSoftFloat32FPRecipStep, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPRecipStep)); // A32 only. + SetDelegateInfo(dlgSoftFloat32FPRecipStepFused, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPRecipStepFused)); + SetDelegateInfo(dlgSoftFloat32FPRecpX, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPRecpX)); + SetDelegateInfo(dlgSoftFloat32FPRSqrtEstimate, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPRSqrtEstimate)); + SetDelegateInfo(dlgSoftFloat32FPRSqrtEstimateFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPRSqrtEstimateFpscr)); // A32 only. + SetDelegateInfo(dlgSoftFloat32FPRSqrtStep, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPRSqrtStep)); // A32 only. + SetDelegateInfo(dlgSoftFloat32FPRSqrtStepFused, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPRSqrtStepFused)); + SetDelegateInfo(dlgSoftFloat32FPSqrt, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPSqrt)); + SetDelegateInfo(dlgSoftFloat32FPSub, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPSub)); + + SetDelegateInfo(dlgSoftFloat32_16FPConvert, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32_16FPConvert)); + + SetDelegateInfo(dlgSoftFloat64FPAdd, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPAdd)); + SetDelegateInfo(dlgSoftFloat64FPAddFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPAddFpscr)); // A32 only. + SetDelegateInfo(dlgSoftFloat64FPCompare, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPCompare)); + SetDelegateInfo(dlgSoftFloat64FPCompareEQ, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPCompareEQ)); + SetDelegateInfo(dlgSoftFloat64FPCompareEQFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPCompareEQFpscr)); // A32 only. + SetDelegateInfo(dlgSoftFloat64FPCompareGE, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPCompareGE)); + SetDelegateInfo(dlgSoftFloat64FPCompareGEFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPCompareGEFpscr)); // A32 only. + SetDelegateInfo(dlgSoftFloat64FPCompareGT, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPCompareGT)); + SetDelegateInfo(dlgSoftFloat64FPCompareGTFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPCompareGTFpscr)); // A32 only. + SetDelegateInfo(dlgSoftFloat64FPCompareLE, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPCompareLE)); + SetDelegateInfo(dlgSoftFloat64FPCompareLEFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPCompareLEFpscr)); // A32 only. + SetDelegateInfo(dlgSoftFloat64FPCompareLT, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPCompareLT)); + SetDelegateInfo(dlgSoftFloat64FPCompareLTFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPCompareLTFpscr)); // A32 only. + SetDelegateInfo(dlgSoftFloat64FPDiv, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPDiv)); + SetDelegateInfo(dlgSoftFloat64FPMax, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPMax)); + SetDelegateInfo(dlgSoftFloat64FPMaxFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPMaxFpscr)); // A32 only. + SetDelegateInfo(dlgSoftFloat64FPMaxNum, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPMaxNum)); + SetDelegateInfo(dlgSoftFloat64FPMaxNumFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPMaxNumFpscr)); // A32 only. + SetDelegateInfo(dlgSoftFloat64FPMin, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPMin)); + SetDelegateInfo(dlgSoftFloat64FPMinFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPMinFpscr)); // A32 only. + SetDelegateInfo(dlgSoftFloat64FPMinNum, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPMinNum)); + SetDelegateInfo(dlgSoftFloat64FPMinNumFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPMinNumFpscr)); // A32 only. + SetDelegateInfo(dlgSoftFloat64FPMul, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPMul)); + SetDelegateInfo(dlgSoftFloat64FPMulFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPMulFpscr)); // A32 only. + SetDelegateInfo(dlgSoftFloat64FPMulAdd, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPMulAdd)); + SetDelegateInfo(dlgSoftFloat64FPMulAddFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPMulAddFpscr)); // A32 only. + SetDelegateInfo(dlgSoftFloat64FPMulSub, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPMulSub)); + SetDelegateInfo(dlgSoftFloat64FPMulSubFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPMulSubFpscr)); // A32 only. + SetDelegateInfo(dlgSoftFloat64FPMulX, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPMulX)); + SetDelegateInfo(dlgSoftFloat64FPNegMulAdd, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPNegMulAdd)); + SetDelegateInfo(dlgSoftFloat64FPNegMulSub, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPNegMulSub)); + SetDelegateInfo(dlgSoftFloat64FPRecipEstimate, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPRecipEstimate)); + SetDelegateInfo(dlgSoftFloat64FPRecipEstimateFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPRecipEstimateFpscr)); // A32 only. + SetDelegateInfo(dlgSoftFloat64FPRecipStep, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPRecipStep)); // A32 only. + SetDelegateInfo(dlgSoftFloat64FPRecipStepFused, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPRecipStepFused)); + SetDelegateInfo(dlgSoftFloat64FPRecpX, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPRecpX)); + SetDelegateInfo(dlgSoftFloat64FPRSqrtEstimate, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPRSqrtEstimate)); + SetDelegateInfo(dlgSoftFloat64FPRSqrtEstimateFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPRSqrtEstimateFpscr)); // A32 only. + SetDelegateInfo(dlgSoftFloat64FPRSqrtStep, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPRSqrtStep)); // A32 only. + SetDelegateInfo(dlgSoftFloat64FPRSqrtStepFused, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPRSqrtStepFused)); + SetDelegateInfo(dlgSoftFloat64FPSqrt, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPSqrt)); + SetDelegateInfo(dlgSoftFloat64FPSub, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPSub)); + + SetDelegateInfo(dlgSoftFloat64_16FPConvert, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64_16FPConvert)); } + + private delegate double MathAbs(double value); + private delegate double MathCeiling(double a); + private delegate double MathFloor(double d); + private delegate double MathRound(double value, MidpointRounding mode); + private delegate double MathTruncate(double d); + + private delegate float MathFAbs(float x); + private delegate float MathFCeiling(float x); + private delegate float MathFFloor(float x); + private delegate float MathFRound(float x, MidpointRounding mode); + private delegate float MathFTruncate(float x); + + private delegate void NativeInterfaceBreak(ulong address, int imm); + private delegate bool NativeInterfaceCheckSynchronization(); + private delegate void NativeInterfaceEnqueueForRejit(ulong address); + private delegate ulong NativeInterfaceGetCntfrqEl0(); + private delegate ulong NativeInterfaceGetCntpctEl0(); + private delegate ulong NativeInterfaceGetCntvctEl0(); + private delegate ulong NativeInterfaceGetCtrEl0(); + private delegate ulong NativeInterfaceGetDczidEl0(); + private delegate ulong NativeInterfaceGetFunctionAddress(ulong address); + private delegate void NativeInterfaceInvalidateCacheLine(ulong address); + private delegate byte NativeInterfaceReadByte(ulong address); + private delegate ushort NativeInterfaceReadUInt16(ulong address); + private delegate uint NativeInterfaceReadUInt32(ulong address); + private delegate ulong NativeInterfaceReadUInt64(ulong address); + private delegate V128 NativeInterfaceReadVector128(ulong address); + private delegate void NativeInterfaceSignalMemoryTracking(ulong address, ulong size, bool write); + private delegate void NativeInterfaceSupervisorCall(ulong address, int imm); + private delegate void NativeInterfaceThrowInvalidMemoryAccess(ulong address); + private delegate void NativeInterfaceUndefined(ulong address, int opCode); + private delegate void NativeInterfaceWriteByte(ulong address, byte value); + private delegate void NativeInterfaceWriteUInt16(ulong address, ushort value); + private delegate void NativeInterfaceWriteUInt32(ulong address, uint value); + private delegate void NativeInterfaceWriteUInt64(ulong address, ulong value); + private delegate void NativeInterfaceWriteVector128(ulong address, V128 value); + + private delegate ulong SoftFallbackCountLeadingSigns(ulong value, int size); + private delegate ulong SoftFallbackCountLeadingZeros(ulong value, int size); + private delegate uint SoftFallbackCrc32b(uint crc, byte value); + private delegate uint SoftFallbackCrc32cb(uint crc, byte value); + private delegate uint SoftFallbackCrc32ch(uint crc, ushort value); + private delegate uint SoftFallbackCrc32cw(uint crc, uint value); + private delegate uint SoftFallbackCrc32cx(uint crc, ulong value); + private delegate uint SoftFallbackCrc32h(uint crc, ushort value); + private delegate uint SoftFallbackCrc32w(uint crc, uint value); + private delegate uint SoftFallbackCrc32x(uint crc, ulong value); + private delegate V128 SoftFallbackDecrypt(V128 value, V128 roundKey); + private delegate V128 SoftFallbackEncrypt(V128 value, V128 roundKey); + private delegate uint SoftFallbackFixedRotate(uint hash_e); + private delegate V128 SoftFallbackHashChoose(V128 hash_abcd, uint hash_e, V128 wk); + private delegate V128 SoftFallbackHashLower(V128 hash_abcd, V128 hash_efgh, V128 wk); + private delegate V128 SoftFallbackHashMajority(V128 hash_abcd, uint hash_e, V128 wk); + private delegate V128 SoftFallbackHashParity(V128 hash_abcd, uint hash_e, V128 wk); + private delegate V128 SoftFallbackHashUpper(V128 hash_abcd, V128 hash_efgh, V128 wk); + private delegate V128 SoftFallbackInverseMixColumns(V128 value); + private delegate V128 SoftFallbackMixColumns(V128 value); + private delegate V128 SoftFallbackPolynomialMult64_128(ulong op1, ulong op2); + private delegate int SoftFallbackSatF32ToS32(float value); + private delegate long SoftFallbackSatF32ToS64(float value); + private delegate uint SoftFallbackSatF32ToU32(float value); + private delegate ulong SoftFallbackSatF32ToU64(float value); + private delegate int SoftFallbackSatF64ToS32(double value); + private delegate long SoftFallbackSatF64ToS64(double value); + private delegate uint SoftFallbackSatF64ToU32(double value); + private delegate ulong SoftFallbackSatF64ToU64(double value); + private delegate V128 SoftFallbackSha1SchedulePart1(V128 w0_3, V128 w4_7, V128 w8_11); + private delegate V128 SoftFallbackSha1SchedulePart2(V128 tw0_3, V128 w12_15); + private delegate V128 SoftFallbackSha256SchedulePart1(V128 w0_3, V128 w4_7); + private delegate V128 SoftFallbackSha256SchedulePart2(V128 w0_3, V128 w8_11, V128 w12_15); + private delegate long SoftFallbackSignedShrImm64(long value, long roundConst, int shift); + private delegate V128 SoftFallbackTbl1(V128 vector, int bytes, V128 tb0); + private delegate V128 SoftFallbackTbl2(V128 vector, int bytes, V128 tb0, V128 tb1); + private delegate V128 SoftFallbackTbl3(V128 vector, int bytes, V128 tb0, V128 tb1, V128 tb2); + private delegate V128 SoftFallbackTbl4(V128 vector, int bytes, V128 tb0, V128 tb1, V128 tb2, V128 tb3); + private delegate V128 SoftFallbackTbx1(V128 dest, V128 vector, int bytes, V128 tb0); + private delegate V128 SoftFallbackTbx2(V128 dest, V128 vector, int bytes, V128 tb0, V128 tb1); + private delegate V128 SoftFallbackTbx3(V128 dest, V128 vector, int bytes, V128 tb0, V128 tb1, V128 tb2); + private delegate V128 SoftFallbackTbx4(V128 dest, V128 vector, int bytes, V128 tb0, V128 tb1, V128 tb2, V128 tb3); + private delegate ulong SoftFallbackUnsignedShrImm64(ulong value, long roundConst, int shift); + + private delegate float SoftFloat16_32FPConvert(ushort valueBits); + + private delegate double SoftFloat16_64FPConvert(ushort valueBits); + + private delegate float SoftFloat32FPAdd(float value1, float value2); + private delegate float SoftFloat32FPAddFpscr(float value1, float value2, bool standardFpscr); + private delegate int SoftFloat32FPCompare(float value1, float value2, bool signalNaNs); + private delegate float SoftFloat32FPCompareEQ(float value1, float value2); + private delegate float SoftFloat32FPCompareEQFpscr(float value1, float value2, bool standardFpscr); + private delegate float SoftFloat32FPCompareGE(float value1, float value2); + private delegate float SoftFloat32FPCompareGEFpscr(float value1, float value2, bool standardFpscr); + private delegate float SoftFloat32FPCompareGT(float value1, float value2); + private delegate float SoftFloat32FPCompareGTFpscr(float value1, float value2, bool standardFpscr); + private delegate float SoftFloat32FPCompareLE(float value1, float value2); + private delegate float SoftFloat32FPCompareLEFpscr(float value1, float value2, bool standardFpscr); + private delegate float SoftFloat32FPCompareLT(float value1, float value2); + private delegate float SoftFloat32FPCompareLTFpscr(float value1, float value2, bool standardFpscr); + private delegate float SoftFloat32FPDiv(float value1, float value2); + private delegate float SoftFloat32FPMax(float value1, float value2); + private delegate float SoftFloat32FPMaxFpscr(float value1, float value2, bool standardFpscr); + private delegate float SoftFloat32FPMaxNum(float value1, float value2); + private delegate float SoftFloat32FPMaxNumFpscr(float value1, float value2, bool standardFpscr); + private delegate float SoftFloat32FPMin(float value1, float value2); + private delegate float SoftFloat32FPMinFpscr(float value1, float value2, bool standardFpscr); + private delegate float SoftFloat32FPMinNum(float value1, float value2); + private delegate float SoftFloat32FPMinNumFpscr(float value1, float value2, bool standardFpscr); + private delegate float SoftFloat32FPMul(float value1, float value2); + private delegate float SoftFloat32FPMulFpscr(float value1, float value2, bool standardFpscr); + private delegate float SoftFloat32FPMulAdd(float valueA, float value1, float value2); + private delegate float SoftFloat32FPMulAddFpscr(float valueA, float value1, float value2, bool standardFpscr); + private delegate float SoftFloat32FPMulSub(float valueA, float value1, float value2); + private delegate float SoftFloat32FPMulSubFpscr(float valueA, float value1, float value2, bool standardFpscr); + private delegate float SoftFloat32FPMulX(float value1, float value2); + private delegate float SoftFloat32FPNegMulAdd(float valueA, float value1, float value2); + private delegate float SoftFloat32FPNegMulSub(float valueA, float value1, float value2); + private delegate float SoftFloat32FPRecipEstimate(float value); + private delegate float SoftFloat32FPRecipEstimateFpscr(float value, bool standardFpscr); + private delegate float SoftFloat32FPRecipStep(float value1, float value2); + private delegate float SoftFloat32FPRecipStepFused(float value1, float value2); + private delegate float SoftFloat32FPRecpX(float value); + private delegate float SoftFloat32FPRSqrtEstimate(float value); + private delegate float SoftFloat32FPRSqrtEstimateFpscr(float value, bool standardFpscr); + private delegate float SoftFloat32FPRSqrtStep(float value1, float value2); + private delegate float SoftFloat32FPRSqrtStepFused(float value1, float value2); + private delegate float SoftFloat32FPSqrt(float value); + private delegate float SoftFloat32FPSub(float value1, float value2); + + private delegate ushort SoftFloat32_16FPConvert(float value); + + private delegate double SoftFloat64FPAdd(double value1, double value2); + private delegate double SoftFloat64FPAddFpscr(double value1, double value2, bool standardFpscr); + private delegate int SoftFloat64FPCompare(double value1, double value2, bool signalNaNs); + private delegate double SoftFloat64FPCompareEQ(double value1, double value2); + private delegate double SoftFloat64FPCompareEQFpscr(double value1, double value2, bool standardFpscr); + private delegate double SoftFloat64FPCompareGE(double value1, double value2); + private delegate double SoftFloat64FPCompareGEFpscr(double value1, double value2, bool standardFpscr); + private delegate double SoftFloat64FPCompareGT(double value1, double value2); + private delegate double SoftFloat64FPCompareGTFpscr(double value1, double value2, bool standardFpscr); + private delegate double SoftFloat64FPCompareLE(double value1, double value2); + private delegate double SoftFloat64FPCompareLEFpscr(double value1, double value2, bool standardFpscr); + private delegate double SoftFloat64FPCompareLT(double value1, double value2); + private delegate double SoftFloat64FPCompareLTFpscr(double value1, double value2, bool standardFpscr); + private delegate double SoftFloat64FPDiv(double value1, double value2); + private delegate double SoftFloat64FPMax(double value1, double value2); + private delegate double SoftFloat64FPMaxFpscr(double value1, double value2, bool standardFpscr); + private delegate double SoftFloat64FPMaxNum(double value1, double value2); + private delegate double SoftFloat64FPMaxNumFpscr(double value1, double value2, bool standardFpscr); + private delegate double SoftFloat64FPMin(double value1, double value2); + private delegate double SoftFloat64FPMinFpscr(double value1, double value2, bool standardFpscr); + private delegate double SoftFloat64FPMinNum(double value1, double value2); + private delegate double SoftFloat64FPMinNumFpscr(double value1, double value2, bool standardFpscr); + private delegate double SoftFloat64FPMul(double value1, double value2); + private delegate double SoftFloat64FPMulFpscr(double value1, double value2, bool standardFpscr); + private delegate double SoftFloat64FPMulAdd(double valueA, double value1, double value2); + private delegate double SoftFloat64FPMulAddFpscr(double valueA, double value1, double value2, bool standardFpscr); + private delegate double SoftFloat64FPMulSub(double valueA, double value1, double value2); + private delegate double SoftFloat64FPMulSubFpscr(double valueA, double value1, double value2, bool standardFpscr); + private delegate double SoftFloat64FPMulX(double value1, double value2); + private delegate double SoftFloat64FPNegMulAdd(double valueA, double value1, double value2); + private delegate double SoftFloat64FPNegMulSub(double valueA, double value1, double value2); + private delegate double SoftFloat64FPRecipEstimate(double value); + private delegate double SoftFloat64FPRecipEstimateFpscr(double value, bool standardFpscr); + private delegate double SoftFloat64FPRecipStep(double value1, double value2); + private delegate double SoftFloat64FPRecipStepFused(double value1, double value2); + private delegate double SoftFloat64FPRecpX(double value); + private delegate double SoftFloat64FPRSqrtEstimate(double value); + private delegate double SoftFloat64FPRSqrtEstimateFpscr(double value, bool standardFpscr); + private delegate double SoftFloat64FPRSqrtStep(double value1, double value2); + private delegate double SoftFloat64FPRSqrtStepFused(double value1, double value2); + private delegate double SoftFloat64FPSqrt(double value); + private delegate double SoftFloat64FPSub(double value1, double value2); + + private delegate ushort SoftFloat64_16FPConvert(double value); } } diff --git a/src/ARMeilleure/Translation/EmitterContext.cs b/src/ARMeilleure/Translation/EmitterContext.cs index 3d800e16f..22b6b9842 100644 --- a/src/ARMeilleure/Translation/EmitterContext.cs +++ b/src/ARMeilleure/Translation/EmitterContext.cs @@ -97,7 +97,7 @@ namespace ARMeilleure.Translation public virtual Operand Call(MethodInfo info, params Operand[] callArgs) { - nint funcPtr = info.MethodHandle.GetFunctionPointer(); + nint funcPtr = Delegates.GetDelegateFuncPtr(info); OperandType returnType = GetOperandType(info.ReturnType);