28#ifndef __SIM_SYSCALL_ABI_HH__
29#define __SIM_SYSCALL_ABI_HH__
57 template <
typename T,
typename Enabled=
void>
58 struct IsWide :
public std::false_type {};
61 struct IsWide<T,
std::enable_if_t<(sizeof(T) > sizeof(UintPtr))>> :
82template <
typename ABI,
typename Arg>
84 typename
std::enable_if_t<
85 std::is_base_of_v<GenericSyscallABI64, ABI> &&
86 std::is_integral_v<Arg>>>
92 "Ran out of syscall argument registers.");
99template <
typename ABI,
typename Arg>
101 typename
std::enable_if_t<std::is_integral_v<Arg> &&
102 !ABI::template IsWideV<Arg>>>
108 "Ran out of syscall argument registers.");
Defines global host-dependent types: Counter, Tick, and (indirectly) {int,uint}{8,...
Register ID: describe an architectural register with its class and index.
ThreadContext is the external interface to all thread state for anything outside of the CPU.
virtual RegVal getReg(const RegId ®) const
constexpr T bits(T val, unsigned first, unsigned last)
Extract the bitfield from position 'first' to 'last' (inclusive) from 'val' and right justify it.
constexpr T insertBits(T val, unsigned first, unsigned last, B bit_val)
Returns val with bits first to last set to the LSBs of bit_val.
#define panic_if(cond,...)
Conditional panic macro that checks the supplied condition and only panics if the condition is true a...
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
Overload hash function for BasicBlockRange type.
static constexpr bool IsWideV
static uint64_t mergeRegs(ThreadContext *tc, const RegId &low_id, const RegId &high_id)
static Arg get(ThreadContext *tc, typename ABI::State &state)
static Arg get(ThreadContext *tc, typename ABI::State &state)