Made is to that the memory intrinsics always read/write byval as opposed to byref for vectors.

This commit is contained in:
Peter Goodman
2016-02-03 13:32:57 -05:00
parent 09d71cada2
commit ee87b84d5e
5 changed files with 21 additions and 21 deletions
+14 -14
View File
@@ -22,13 +22,13 @@ extern "C" {
[[gnu::used]] extern uint32_t __mcsema_read_memory_32(addr_t);
[[gnu::used]] extern uint64_t __mcsema_read_memory_64(addr_t);
[[gnu::used]] extern void __mcsema_read_memory_v8(addr_t, vec8_t &);
[[gnu::used]] extern void __mcsema_read_memory_v16(addr_t, vec16_t &);
[[gnu::used]] extern void __mcsema_read_memory_v32(addr_t, vec32_t &);
[[gnu::used]] extern void __mcsema_read_memory_v64(addr_t, vec64_t &);
[[gnu::used]] extern void __mcsema_read_memory_v128(addr_t, vec128_t &);
[[gnu::used]] extern void __mcsema_read_memory_v256(addr_t, vec256_t &);
[[gnu::used]] extern void __mcsema_read_memory_v512(addr_t, vec512_t &);
[[gnu::used]] extern vec8_t __mcsema_read_memory_v8(addr_t);
[[gnu::used]] extern vec16_t __mcsema_read_memory_v16(addr_t);
[[gnu::used]] extern vec32_t __mcsema_read_memory_v32(addr_t);
[[gnu::used]] extern vec64_t __mcsema_read_memory_v64(addr_t);
[[gnu::used]] extern vec128_t __mcsema_read_memory_v128(addr_t);
[[gnu::used]] extern vec256_t __mcsema_read_memory_v256(addr_t);
[[gnu::used]] extern vec512_t __mcsema_read_memory_v512(addr_t);
// Memory write intrinsics.
[[gnu::used]] extern void __mcsema_write_memory_8(addr_t, uint8_t);
@@ -36,13 +36,13 @@ extern "C" {
[[gnu::used]] extern void __mcsema_write_memory_32(addr_t, uint32_t);
[[gnu::used]] extern void __mcsema_write_memory_64(addr_t, uint64_t);
[[gnu::used]] extern void __mcsema_write_memory_v8(addr_t, const vec8_t &);
[[gnu::used]] extern void __mcsema_write_memory_v16(addr_t, const vec16_t &);
[[gnu::used]] extern void __mcsema_write_memory_v32(addr_t, const vec32_t &);
[[gnu::used]] extern void __mcsema_write_memory_v64(addr_t, const vec64_t &);
[[gnu::used]] extern void __mcsema_write_memory_v128(addr_t, const vec128_t &);
[[gnu::used]] extern void __mcsema_write_memory_v256(addr_t, const vec256_t &);
[[gnu::used]] extern void __mcsema_write_memory_v512(addr_t, const vec512_t &);
[[gnu::used]] extern void __mcsema_write_memory_v8(addr_t, vec8_t);
[[gnu::used]] extern void __mcsema_write_memory_v16(addr_t, vec16_t);
[[gnu::used]] extern void __mcsema_write_memory_v32(addr_t, vec32_t);
[[gnu::used]] extern void __mcsema_write_memory_v64(addr_t, vec64_t);
[[gnu::used]] extern void __mcsema_write_memory_v128(addr_t, vec128_t);
[[gnu::used]] extern void __mcsema_write_memory_v256(addr_t, vec256_t);
[[gnu::used]] extern void __mcsema_write_memory_v512(addr_t, vec512_t);
[[gnu::used]] extern bool __mcsema_undefined_bool(void);
[[gnu::used]] extern uint8_t __mcsema_undefined_8(void);
+1 -3
View File
@@ -138,9 +138,7 @@ struct VecWriter {
}; \
\
ALWAYS_INLINE static T R(const Mn<T> mem) { \
T vec; \
__mcsema_read_memory_v ## size (mem.addr, vec); \
return vec; \
return __mcsema_read_memory_v ## size (mem.addr); \
} \
ALWAYS_INLINE static MemoryWriter ## T W(MnW<T> mem) { \
return MemoryWriter ## T {mem.addr}; \
+1
View File
@@ -72,6 +72,7 @@ CXX_FLAGS = [
"-Wno-gnu-zero-variadic-macro-arguments",
"-Wno-error=unused-command-line-argument",
"-Wno-override-module",
"-Wno-return-type-c-linkage",
# Features.
"-fno-omit-frame-pointer",
+1
View File
@@ -11,6 +11,7 @@ CXXFLAGS+=" -isystem ${DIR}/third_party/include"
CXXFLAGS+=" -std=gnu++11 -g0 -O0 -fno-exceptions -fno-rtti"
CXXFLAGS+=" -fno-asynchronous-unwind-tables -I${DIR}"
CXXFLAGS+=" -ffreestanding -fno-common -fno-builtin "
CXXFLAGS+=" -Wno-return-type-c-linkage "
function compile_x86()
{
+4 -4
View File
@@ -110,12 +110,12 @@ NEVER_INLINE addr_t __mcsema_compute_address(const State &state, addr_t addr,
}
#define MAKE_RW_VEC_MEMORY(size) \
NEVER_INLINE void __mcsema_read_memory_v ## size(\
addr_t addr, vec ## size ## _t &out) { \
out = AccessMemory<vec ## size ## _t>(addr); \
NEVER_INLINE vec ## size ## _t __mcsema_read_memory_v ## size(\
addr_t addr) { \
return AccessMemory<vec ## size ## _t>(addr); \
} \
NEVER_INLINE void __mcsema_write_memory_v ## size (\
addr_t addr, const vec ## size ## _t &in) { \
addr_t addr, vec ## size ## _t in) { \
AccessMemory<vec ## size ## _t>(addr) = in; \
}