gem5
v21.2.1.0
|
Typedefs | |
template<typename T , std::size_t count, typename Enabled = void> | |
using | Aapcs32HomogeneousAggregate = T[count] |
Functions | |
reg | as< Float > ()[0] |
tc | setVecReg (id, reg) |
template<typename ABI , typename Ret , bool store_ret, typename Target , typename State , typename Args , std::size_t... I> | |
static std::enable_if_t<!store_ret, Ret > | callFromHelper (Target &target, ThreadContext *tc, State &state, Args &&args, std::index_sequence< I... >) |
template<typename ABI , typename Ret , bool store_ret, typename Target , typename State , typename Args , std::size_t... I> | |
static std::enable_if_t< store_ret, Ret > | callFromHelper (Target &target, ThreadContext *tc, State &state, Args &&args, std::index_sequence< I... >) |
template<typename ABI , typename Ret , bool store_ret, typename ... Args> | |
static Ret | callFrom (ThreadContext *tc, typename ABI::State &state, std::function< Ret(ThreadContext *, Args...)> target) |
template<typename ABI , typename Ret , typename ... Args> | |
static void | dumpArgsFrom (std::ostream &os, [[maybe_unused]] ThreadContext *tc, typename ABI::State &state) |
template<typename ABI > | |
static ABI::State | initializeState (const ThreadContext *tc) |
template<typename ABI , typename Ret , typename Enabled = void> | |
static void | prepareForResult (ThreadContext *tc, typename ABI::State &state) |
template<typename ABI , typename ... Args> | |
static void | prepareForArguments ([[maybe_unused]] ThreadContext *tc, typename ABI::State &state) |
template<typename ABI , typename Ret , typename ... Args> | |
static void | prepareForFunction (ThreadContext *tc, typename ABI::State &state) |
template<typename ABI , typename Ret > | |
static void | storeResult (ThreadContext *tc, const Ret &ret, typename ABI::State &state) |
template<typename ABI , typename Arg > | |
static Arg | getArgument (ThreadContext *tc, typename ABI::State &state) |
template<typename ... Types> | |
std::ostream & | operator<< (std::ostream &os, const VarArgs< Types... > &va) |
Variables | |
template<typename T > | |
constexpr bool | IsAapcs32CompositeV = IsAapcs32Composite<T>::value |
template<typename T > | |
constexpr bool | IsAapcs32HomogeneousAggregateV |
template<typename T > | |
constexpr bool | IsAapcs64ShortVectorV = IsAapcs64ShortVector<T>::value |
template<typename T > | |
constexpr bool | IsAapcs64CompositeV = IsAapcs64Composite<T>::value |
template<typename E , size_t N> | |
struct IsAapcs64Hfa< E[N], typename std::enable_if_t< std::is_floating_point_v< E > &&N<=4 > > :public std::true_type{};template< typename T >constexpr bool IsAapcs64HfaV=IsAapcs64Hfa< T >::value;template< typename T, typename Enabled=void >struct IsAapcs64Hva :public std::false_type {};template< typename E, size_t N >struct IsAapcs64Hva< E[N], typename std::enable_if_t< IsAapcs64ShortVectorV< E > &&N<=4 > > :public std::true_type{};template< typename T >constexpr bool IsAapcs64HvaV=IsAapcs64Hva< T >::value;template< typename T, typename Enabled=void >struct IsAapcs64Hxa :public std::false_type {};template< typename T >struct IsAapcs64Hxa< T, typename std::enable_if_t< IsAapcs64HfaV< T >||IsAapcs64HvaV< T > > > :public std::true_type{};template< typename T >constexpr bool IsAapcs64HxaV=IsAapcs64Hxa< T >::value;struct Aapcs64ArgumentBase{ template< typename T > static T loadFromStack(ThreadContext *tc, Aapcs64::State &state) { size_t align=std::max< size_t >(8, alignof(T));size_t size=roundUp(sizeof(T), 8);state.nsaa=roundUp(state.nsaa, align);ConstVPtr< T > val(state.nsaa, tc);state.nsaa+=size;return gtoh(*val, ArmISA::byteOrder(tc));}};template< typename Float >struct Argument< Aapcs64, Float, typename std::enable_if_t< std::is_floating_point_v< Float >||IsAapcs64ShortVectorV< Float > > > :public Aapcs64ArgumentBase{ static Float get(ThreadContext *tc, Aapcs64::State &state) { if(state.nsrn<=state.MAX_SRN) { RegId id(VecRegClass, state.nsrn++);return tc->readVecReg(id).as< Float >()[0];} return loadFromStack< Float >(tc, state);}};template< typename Float >struct Result< Aapcs64, Float, typename std::enable_if_t< std::is_floating_point_v< Float >||IsAapcs64ShortVectorV< Float > > >{ static void store(ThreadContext *tc, const Float &f) { RegId id(VecRegClass, 0);auto reg=tc-> | readVecReg (id) |
template<typename T > | |
constexpr bool | IsVarArgsV = IsVarArgs<T>::value |
using gem5::guest_abi::Aapcs32HomogeneousAggregate = typedef T[count] |
Definition at line 100 of file aapcs32.hh.
reg gem5::guest_abi::as< Float > | ( | ) |
|
inlinestatic |
Definition at line 82 of file dispatch.hh.
Referenced by gem5::invokeSimcall().
|
inlinestatic |
Definition at line 63 of file dispatch.hh.
|
inlinestatic |
Definition at line 72 of file dispatch.hh.
|
static |
Definition at line 103 of file dispatch.hh.
References gem5::X86ISA::count, and gem5::X86ISA::os.
Referenced by gem5::dumpSimcall().
|
static |
Definition at line 171 of file layout.hh.
Referenced by gem5::guest_abi::Argument< Aapcs32Vfp, VarArgs< Types... > >::get().
|
static |
Definition at line 72 of file layout.hh.
References gem5::guest_abi::StateInitializer< ABI, Enabled >::init().
std::ostream& gem5::guest_abi::operator<< | ( | std::ostream & | os, |
const VarArgs< Types... > & | va | ||
) |
Definition at line 184 of file varargs.hh.
References gem5::X86ISA::os.
|
inlinestatic |
Definition at line 116 of file layout.hh.
Referenced by gem5::invokeSimcall(), and prepareForFunction().
|
inlinestatic |
Definition at line 124 of file layout.hh.
References prepareForArguments().
Referenced by gem5::dumpSimcall(), and gem5::invokeSimcall().
|
inlinestatic |
Definition at line 109 of file layout.hh.
References gem5::guest_abi::Preparer< ABI, Role, Type, Enabled >::prepare().
tc gem5::guest_abi::setVecReg | ( | id | , |
reg | |||
) |
|
static |
Definition at line 164 of file layout.hh.
References gem5::guest_abi::ResultStorer< ABI, Ret, Enabled >::store().
|
constexpr |
Definition at line 92 of file aapcs32.hh.
|
constexpr |
Definition at line 109 of file aapcs32.hh.
|
constexpr |
Definition at line 113 of file aapcs64.hh.
|
constexpr |
Definition at line 93 of file aapcs64.hh.
|
constexpr |
Definition at line 180 of file varargs.hh.
Referenced by TEST().
struct IsAapcs64Hfa< E[N], typename std::enable_if_t< std::is_floating_point_v< E > &&N<=4 > > : public std::true_type{};template< typename T >constexpr bool IsAapcs64HfaV=IsAapcs64Hfa< T >::value;template< typename T, typename Enabled=void >struct IsAapcs64Hva :public std::false_type {};template< typename E, size_t N >struct IsAapcs64Hva< E[N], typename std::enable_if_t< IsAapcs64ShortVectorV< E > &&N<=4 > > : public std::true_type{};template< typename T >constexpr bool IsAapcs64HvaV=IsAapcs64Hva< T >::value;template< typename T, typename Enabled=void >struct IsAapcs64Hxa :public std::false_type {};template< typename T >struct IsAapcs64Hxa< T, typename std::enable_if_t< IsAapcs64HfaV< T >||IsAapcs64HvaV< T > > > : public std::true_type{};template< typename T >constexpr bool IsAapcs64HxaV=IsAapcs64Hxa< T >::value;struct Aapcs64ArgumentBase{ template< typename T > static T loadFromStack(ThreadContext *tc, Aapcs64::State &state) { size_t align=std::max< size_t >(8, alignof(T)); size_t size=roundUp(sizeof(T), 8); state.nsaa=roundUp(state.nsaa, align); ConstVPtr< T > val(state.nsaa, tc); state.nsaa+=size; return gtoh(*val, ArmISA::byteOrder(tc)); }};template< typename Float >struct Argument< Aapcs64, Float, typename std::enable_if_t< std::is_floating_point_v< Float >||IsAapcs64ShortVectorV< Float > > > : public Aapcs64ArgumentBase{ static Float get(ThreadContext *tc, Aapcs64::State &state) { if(state.nsrn<=state.MAX_SRN) { RegId id(VecRegClass, state.nsrn++); return tc->readVecReg(id).as< Float >()[0]; } return loadFromStack< Float >(tc, state); }};template< typename Float >struct Result< Aapcs64, Float, typename std::enable_if_t< std::is_floating_point_v< Float >||IsAapcs64ShortVectorV< Float > > >{ static void store(ThreadContext *tc, const Float &f) { RegId id(VecRegClass, 0); auto reg=tc-> gem5::guest_abi::readVecReg(id) |
Definition at line 220 of file aapcs64.hh.