Skip to content

Commit 132d7a0

Browse files
committed
Only use volatile if we have no better option
1 parent a4dc754 commit 132d7a0

File tree

2 files changed

+31
-1
lines changed

2 files changed

+31
-1
lines changed

src/prebuilt/wasm2c_simd_source_declarations.cc

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,24 @@
1-
const char* s_simd_source_declarations = R"w2c_template(#define SIMD_FORCE_READ(var) (void)*(volatile v128*)&var;
1+
const char* s_simd_source_declarations = R"w2c_template(#if defined(__GNUC__) && defined(__x86_64__)
2+
)w2c_template"
3+
R"w2c_template(#define SIMD_FORCE_READ(var) __asm__("" ::"x"(var));
4+
)w2c_template"
5+
R"w2c_template(#elif defined(__GNUC__) && defined(__aarch64__)
6+
)w2c_template"
7+
R"w2c_template(#define SIMD_FORCE_READ(var) __asm__("" ::"w"(var));
8+
)w2c_template"
9+
R"w2c_template(#elif WASM_RT_MEMCHECK_GUARD_PAGES
10+
)w2c_template"
11+
R"w2c_template(// best-effort using volatile
12+
)w2c_template"
13+
R"w2c_template(#define SIMD_FORCE_READ(var) (void)*(volatile v128*)&var;
14+
)w2c_template"
15+
R"w2c_template(#else
16+
)w2c_template"
17+
R"w2c_template(#define SIMD_FORCE_READ(var)
18+
)w2c_template"
19+
R"w2c_template(#endif
20+
)w2c_template"
21+
R"w2c_template(// TODO: equivalent constraint for ARM and other architectures
222
)w2c_template"
323
R"w2c_template(
424
#define DEFINE_SIMD_LOAD_FUNC(name, func, t) \

src/template/wasm2c_simd.declarations.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,14 @@
1+
#if defined(__GNUC__) && defined(__x86_64__)
2+
#define SIMD_FORCE_READ(var) __asm__("" ::"x"(var));
3+
#elif defined(__GNUC__) && defined(__aarch64__)
4+
#define SIMD_FORCE_READ(var) __asm__("" ::"w"(var));
5+
#elif WASM_RT_MEMCHECK_GUARD_PAGES
6+
// best-effort using volatile
17
#define SIMD_FORCE_READ(var) (void)*(volatile v128*)&var;
8+
#else
9+
#define SIMD_FORCE_READ(var)
10+
#endif
11+
// TODO: equivalent constraint for ARM and other architectures
212

313
#define DEFINE_SIMD_LOAD_FUNC(name, func, t) \
414
static inline v128 name##_unchecked(wasm_rt_memory_t* mem, u64 addr) { \

0 commit comments

Comments
 (0)