diff --git a/External/FEXCore/Source/Interface/Core/ArchHelpers/Arm64.cpp b/External/FEXCore/Source/Interface/Core/ArchHelpers/Arm64.cpp index 9e6f35ef2..ac310b66d 100644 --- a/External/FEXCore/Source/Interface/Core/ArchHelpers/Arm64.cpp +++ b/External/FEXCore/Source/Interface/Core/ArchHelpers/Arm64.cpp @@ -221,13 +221,18 @@ bool HandleCASPAL(void *_ucontext, void *_info, uint32_t Instr) { return false; } +template +using CASExpectedFn = T (*)(T Src, T Expected); +template +using CASDesiredFn = T (*)(T Src, T Desired); + static std::tuple DoCAS16( uint16_t DesiredSrc, uint16_t ExpectedSrc, uint64_t Addr, - std::function ExpectedFunction, - std::function DesiredFunction) { + CASExpectedFn ExpectedFunction, + CASDesiredFn DesiredFunction) { // 16 bit uint64_t AlignmentMask = 0b1111; if ((Addr & AlignmentMask) == 15) { @@ -476,8 +481,8 @@ std::tuple DoCAS32( uint32_t DesiredSrc, uint32_t ExpectedSrc, uint64_t Addr, - std::function ExpectedFunction, - std::function DesiredFunction) { + CASExpectedFn ExpectedFunction, + CASDesiredFn DesiredFunction) { // 32 bit uint64_t AlignmentMask = 0b1111; if ((Addr & AlignmentMask) > 12) { @@ -683,8 +688,8 @@ std::tuple DoCAS64( uint64_t DesiredSrc, uint64_t ExpectedSrc, uint64_t Addr, - std::function ExpectedFunction, - std::function DesiredFunction) { + CASExpectedFn ExpectedFunction, + CASDesiredFn DesiredFunction) { // 64bit uint64_t AlignmentMask = 0b1111; if ((Addr & AlignmentMask) > 8) { @@ -964,7 +969,7 @@ bool HandleAtomicMemOp(void *_ucontext, void *_info, uint32_t Instr) { return Desired; }; - std::function DesiredFunction; + CASDesiredFn DesiredFunction{}; switch (Op) { case ATOMIC_ADD_OP: @@ -1031,7 +1036,7 @@ bool HandleAtomicMemOp(void *_ucontext, void *_info, uint32_t Instr) { return Desired; }; - std::function DesiredFunction; + CASDesiredFn DesiredFunction{}; switch (Op) { case ATOMIC_ADD_OP: @@ -1098,7 +1103,7 @@ bool HandleAtomicMemOp(void *_ucontext, void *_info, uint32_t Instr) { return Desired; }; - std::function DesiredFunction; + CASDesiredFn DesiredFunction{}; switch (Op) { case ATOMIC_ADD_OP: