28 #ifndef __SIM_GUEST_ABI_LAYOUT_HH__
29 #define __SIM_GUEST_ABI_LAYOUT_HH__
31 #include <type_traits>
49 template <
typename ABI,
typename Enabled=
void>
52 static typename ABI::State
55 return typename ABI::State();
59 template <
typename ABI>
61 std::is_constructible_v<typename ABI::State, const ThreadContext *>>>
63 static typename ABI::State
66 return typename ABI::State(tc);
70 template <
typename ABI>
71 static typename ABI::State
83 template <
typename ABI,
template <
class ...>
class Role,
84 typename Type,
typename Enabled=
void>
97 template <
typename ABI,
template <
class ...>
class Role,
typename Type>
98 struct Preparer<ABI, Role,
Type, decltype((void)&Role<ABI, Type>::prepare)>
103 Role<ABI, Type>::prepare(tc,
state);
107 template <
typename ABI,
typename Ret,
typename Enabled=
void>
114 template <
typename ABI,
typename ...Args>
117 typename ABI::State &
state)
122 template <
typename ABI,
typename Ret,
typename ...Args>
126 prepareForResult<ABI, Ret>(tc,
state);
135 template <
typename ABI,
typename Ret,
typename Enabled=
void>
145 template <
typename ABI,
typename Ret>
147 std::is_same_v<void (*)(ThreadContext *, const Ret &,
148 typename ABI::State &),
149 decltype(&Result<ABI, Ret>::store)>>>
162 template <
typename ABI,
typename Ret>
169 template <
typename ABI,
typename Arg>
ThreadContext is the external interface to all thread state for anything outside of the CPU.
static ABI::State initializeState(const ThreadContext *tc)
static void prepareForFunction(ThreadContext *tc, typename ABI::State &state)
static void prepareForArguments([[maybe_unused]] ThreadContext *tc, typename ABI::State &state)
static void storeResult(ThreadContext *tc, const Ret &ret, typename ABI::State &state)
static Arg getArgument(ThreadContext *tc, typename ABI::State &state)
static void prepareForResult(ThreadContext *tc, typename ABI::State &state)
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
GEM5_DEPRECATED_NAMESPACE(GuestABI, guest_abi)
Overload hash function for BasicBlockRange type.
static void prepare(ThreadContext *tc, typename ABI::State &state)
static void prepare(ThreadContext *tc, typename ABI::State &state)
static void store(ThreadContext *tc, const Ret &ret, typename ABI::State &state)
static void store(ThreadContext *tc, const Ret &ret, typename ABI::State &state)
static ABI::State init(const ThreadContext *tc)
static ABI::State init(const ThreadContext *tc)