30 #ifndef __ARCH_X86_MEMHELPERS_HH__
31 #define __ARCH_X86_MEMHELPERS_HH__
73 panic(
"Unhandled size in getMem.\n");
79 template <
typename T,
size_t N>
83 std::array<T, N> real_mem = pkt->
getLE<std::array<T, N> >();
84 for (
int i = 0;
i < N;
i++)
95 getPackedMem<uint32_t, N>(pkt,
mem, dataSize);
98 getPackedMem<uint64_t, N>(pkt,
mem, dataSize);
101 panic(
"Unhandled element size in getMem.\n");
112 memset(&
mem, 0,
sizeof(
mem));
127 template <
typename T,
size_t N>
132 std::array<T, N> real_mem;
134 constexpr
auto size =
sizeof(T) * N;
137 size, flags, byte_enable);
139 real_mem =
letoh(real_mem);
140 for (
int i = 0;
i < N;
i++)
141 mem[
i] = real_mem[
i];
149 std::array<uint64_t, N> &
mem,
unsigned dataSize,
156 fault = readPackedMemAtomic<uint32_t, N>(xc,
addr,
mem, flags);
159 fault = readPackedMemAtomic<uint64_t, N>(xc,
addr,
mem, flags);
162 panic(
"Unhandled element size in readMemAtomic\n");
164 if (fault ==
NoFault && traceData)
169 template <
typename T,
size_t N>
172 unsigned flags, uint64_t *res)
174 std::array<T, N> real_mem;
175 for (
int i = 0;
i < N;
i++)
176 real_mem[
i] =
mem[
i];
177 real_mem =
htole(real_mem);
179 constexpr
auto size =
sizeof(T) * N;
181 return xc->
writeMem((uint8_t *)&real_mem, size,
182 addr, flags, res, byte_enable);
201 std::array<uint64_t, N> &
mem,
unsigned dataSize,
202 Addr addr,
unsigned flags, uint64_t *res)
209 return writePackedMem<uint32_t, N>(xc,
mem,
addr, flags, res);
211 return writePackedMem<uint64_t, N>(xc,
mem,
addr, flags, res);
213 panic(
"Unhandled element size in writeMemTiming.\n");
227 flags, res, byte_enable);
236 std::array<uint64_t, N> &
mem,
unsigned dataSize,
237 Addr addr,
unsigned flags, uint64_t *res)
245 fault = writePackedMem<uint32_t, N>(xc,
mem,
addr, flags, res);
248 fault = writePackedMem<uint64_t, N>(xc,
mem,
addr, flags, res);
251 panic(
"Unhandled element size in writeMemAtomic.\n");