1
- const char * s_simd_source_declarations = R"w2c_template( #define DEFINE_SIMD_LOAD_FUNC(name, func, t) \
1
+ const char * s_simd_source_declarations = R"w2c_template( #define SIMD_FORCE_READ(var) (void)*(volatile v128*)&var;
2
2
)w2c_template"
3
- R"w2c_template( static inline v128 name##_unchecked(wasm_rt_memory_t* mem, u64 addr) { \
4
- )w2c_template"
5
- R"w2c_template( char tmp[sizeof(t)]; \
6
- )w2c_template"
7
- R"w2c_template( const volatile char* v_addr; \
8
- )w2c_template"
9
- R"w2c_template( v_addr = (const volatile char*)MEM_ADDR(mem, addr, sizeof(t)); \
3
+ R"w2c_template(
4
+ #define DEFINE_SIMD_LOAD_FUNC(name, func, t) \
10
5
)w2c_template"
11
- R"w2c_template( for (int i = 0; i < sizeof(t); i++) \
6
+ R"w2c_template( static inline v128 name##_unchecked(wasm_rt_memory_t* mem, u64 addr) { \
12
7
)w2c_template"
13
- R"w2c_template( tmp[i] = v_addr[i]; \
8
+ R"w2c_template( v128 result = func(MEM_ADDR(mem, addr, sizeof(t))); \
14
9
)w2c_template"
15
- R"w2c_template( v128 result = func(&tmp); \
10
+ R"w2c_template( SIMD_FORCE_READ(result); \
16
11
)w2c_template"
17
12
R"w2c_template( return result; \
18
13
)w2c_template"
@@ -27,17 +22,9 @@ R"w2c_template( static inline v128 name##_unchecked(wasm_rt_memory_t* mem, u64
27
22
)w2c_template"
28
23
R"w2c_template( v128 vec) { \
29
24
)w2c_template"
30
- R"w2c_template( char tmp[sizeof(t)]; \
31
- )w2c_template"
32
- R"w2c_template( const volatile char* v_addr; \
33
- )w2c_template"
34
- R"w2c_template( v_addr = (const volatile char*)MEM_ADDR(mem, addr, sizeof(t)); \
35
- )w2c_template"
36
- R"w2c_template( for (int i = 0; i < sizeof(t); i++) \
37
- )w2c_template"
38
- R"w2c_template( tmp[i] = v_addr[i]; \
25
+ R"w2c_template( v128 result = func(MEM_ADDR(mem, addr, sizeof(t)), vec, lane); \
39
26
)w2c_template"
40
- R"w2c_template( v128 result = func(&tmp, vec, lane); \
27
+ R"w2c_template( SIMD_FORCE_READ( result); \
41
28
)w2c_template"
42
29
R"w2c_template( return result; \
43
30
)w2c_template"
0 commit comments