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;
22)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) \
105)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) { \
127)w2c_template"
13- R"w2c_template( tmp[i] = v_addr[i]; \
8+ R"w2c_template( v128 result = func(MEM_ADDR(mem, addr, sizeof(t))); \
149)w2c_template"
15- R"w2c_template( v128 result = func(&tmp); \
10+ R"w2c_template( SIMD_FORCE_READ(result); \
1611)w2c_template"
1712R"w2c_template( return result; \
1813)w2c_template"
@@ -27,17 +22,9 @@ R"w2c_template( static inline v128 name##_unchecked(wasm_rt_memory_t* mem, u64
2722)w2c_template"
2823R"w2c_template( v128 vec) { \
2924)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); \
3926)w2c_template"
40- R"w2c_template( v128 result = func(&tmp, vec, lane); \
27+ R"w2c_template( SIMD_FORCE_READ( result); \
4128)w2c_template"
4229R"w2c_template( return result; \
4330)w2c_template"
0 commit comments