mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-02-13 07:49:19 +01:00
Common: CallLambdaTrampoline can return a value
As it is currently written, CallLambdaTrampoline does not return a value. However, some of the functions that are being wrapped may return a value that the JIT is expected to understand. A compiler *cough cough clang* may opt to alter %rax after the wrapped lambda returns, e.g. popping a previous value, which can clobber the return value. If we actually have a return value, then the compiler must not clobber it.
This commit is contained in:
parent
3fc070c4fc
commit
c9a25f9484
@ -711,10 +711,9 @@ public:
|
||||
// (this method might be a thunk in the case of multi-inheritance) so we
|
||||
// have to go through a trampoline function.
|
||||
template <typename T, typename... Args>
|
||||
static void CallLambdaTrampoline(const std::function<T(Args...)>* f,
|
||||
Args... args)
|
||||
static T CallLambdaTrampoline(const std::function<T(Args...)>* f, Args... args)
|
||||
{
|
||||
(*f)(args...);
|
||||
return (*f)(args...);
|
||||
}
|
||||
|
||||
// This function expects you to have set up the state.
|
||||
|
@ -971,10 +971,9 @@ public:
|
||||
// (this method might be a thunk in the case of multi-inheritance) so we
|
||||
// have to go through a trampoline function.
|
||||
template <typename T, typename... Args>
|
||||
static void CallLambdaTrampoline(const std::function<T(Args...)>* f,
|
||||
Args... args)
|
||||
static T CallLambdaTrampoline(const std::function<T(Args...)>* f, Args... args)
|
||||
{
|
||||
(*f)(args...);
|
||||
return (*f)(args...);
|
||||
}
|
||||
|
||||
template <typename T, typename... Args>
|
||||
|
Loading…
x
Reference in New Issue
Block a user