mirror of
https://github.com/lifting-bits/remill
synced 2026-06-21 13:56:07 +00:00
Made is to that the memory intrinsics always read/write byval as opposed to byref for vectors.
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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}; \
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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
@@ -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; \
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user