gem5  v20.1.0.0
Classes | Namespaces | Functions | Variables
aapcs64.hh File Reference
#include <algorithm>
#include <array>
#include <type_traits>
#include <utility>
#include "arch/arm/intregs.hh"
#include "arch/arm/utility.hh"
#include "base/intmath.hh"
#include "cpu/thread_context.hh"
#include "sim/guest_abi.hh"
#include "sim/proxy_ptr.hh"

Go to the source code of this file.

Classes

struct  Aapcs64
 
struct  Aapcs64::State
 
struct  GuestABI::IsAapcs64ShortVector< T, Enabled >
 
struct  GuestABI::IsAapcs64ShortVector< E[N], typename std::enable_if<(std::is_integral< E >::value||std::is_floating_point< E >::value) &&(sizeof(E) *N==8||sizeof(E) *N==16)>::type >
 
struct  GuestABI::IsAapcs64Composite< T, Enabled >
 
struct  GuestABI::IsAapcs64Composite< T, typename std::enable_if<(std::is_array< T >::value||std::is_class< T >::value||std::is_union< T >::value) &&!IsVarArgs< T >::value &&!IsAapcs64ShortVector< T >::value >::type >
 
struct  GuestABI::IsAapcs64Hfa< T, Enabled >
 
struct  GuestABI::enable_if< std::is_integral< Integer >::value &&(sizeof(Integer)<=8) >::type >
 
struct  GuestABI::Argument< ABI, Arg, Enabled >::type >< Integer >
 
struct  GuestABI::enable_if< std::is_integral< Integer >::value &&(sizeof(Integer)<=8) >::type >
 
struct  GuestABI::Result< ABI, Ret, Enabled >::type >< Integer >
 
struct  GuestABI::Aapcs64ArrayType< T >
 
struct  GuestABI::Aapcs64ArrayType< E[N]>
 
struct  GuestABI::Argument< Aapcs64, HA, typename std::enable_if< IsAapcs64Hxa< HA >::value >::type >
 
struct  GuestABI::Result< Aapcs64, HA, typename std::enable_if< IsAapcs64Hxa< HA >::value >::type >
 
struct  GuestABI::Argument< Aapcs64, Composite, typename std::enable_if< IsAapcs64Composite< Composite >::value &&!IsAapcs64Hxa< Composite >::value >::type >
 
struct  GuestABI::Result< Aapcs64, Composite, typename std::enable_if< IsAapcs64Composite< Composite >::value &&!IsAapcs64Hxa< Composite >::value >::type >
 

Namespaces

 GuestABI
 

Functions

reg GuestABI::laneView< Float, 0 > ()
 
tc GuestABI::setVecReg (id, reg)
 

Variables

template<typename E , size_t N>
struct IsAapcs64Hfa< E[N], typename std::enable_if< std::is_floating_point< E >::value &&N<=4 >::type > :public std::true_type{};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< IsAapcs64ShortVector< E >::value &&N<=4 >::type > :public std::true_type{};template< typename T, typename Enabled=void >struct IsAapcs64Hxa :public std::false_type {};template< typename T >struct IsAapcs64Hxa< T, typename std::enable_if< IsAapcs64Hfa< T >::value||IsAapcs64Hva< T >::value >::type > :public std::true_type{};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< std::is_floating_point< Float >::value||IsAapcs64ShortVector< Float >::value >::type > :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).laneView< Float, 0 >();} return loadFromStack< Float >(tc, state);}};template< typename Float >struct Result< Aapcs64, Float, typename std::enable_if< std::is_floating_point< Float >::value||IsAapcs64ShortVector< Float >::value >::type >{ static void store(ThreadContext *tc, const Float &f) { RegId id(VecRegClass, 0);auto reg=tc-> GuestABI::readVecReg (id)
 

Generated on Wed Sep 30 2020 14:02:18 for gem5 by doxygen 1.8.17