1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
|
From: Mike Hommey <mh@glandium.org>
Date: Wed, 22 Jan 2025 13:03:01 +0900
Subject: Apply wasm2c upstream fix for clang targetting mips
https://github.com/WebAssembly/wabt/pull/2274
---
.../wasm2c_simd_source_declarations.cc | 4 +-
.../prebuilt/wasm2c_source_declarations.cc | 56 ++++++++++++-------
2 files changed, 38 insertions(+), 22 deletions(-)
diff --git a/third_party/wasm2c/src/prebuilt/wasm2c_simd_source_declarations.cc b/third_party/wasm2c/src/prebuilt/wasm2c_simd_source_declarations.cc
index cc8bd8c..bbd10ee 100644
--- a/third_party/wasm2c/src/prebuilt/wasm2c_simd_source_declarations.cc
+++ b/third_party/wasm2c/src/prebuilt/wasm2c_simd_source_declarations.cc
@@ -1,6 +1,6 @@
-const char* s_simd_source_declarations = R"w2c_template(#ifdef __x86_64__
+const char* s_simd_source_declarations = R"w2c_template(#if defined(__GNUC__) && defined(__x86_64__)
)w2c_template"
-R"w2c_template(#define SIMD_FORCE_READ(var) wasm_asm("" ::"x"(var));
+R"w2c_template(#define SIMD_FORCE_READ(var) __asm__("" ::"x"(var));
)w2c_template"
R"w2c_template(#else
)w2c_template"
diff --git a/third_party/wasm2c/src/prebuilt/wasm2c_source_declarations.cc b/third_party/wasm2c/src/prebuilt/wasm2c_source_declarations.cc
index ca54177..5b07679 100644
--- a/third_party/wasm2c/src/prebuilt/wasm2c_source_declarations.cc
+++ b/third_party/wasm2c/src/prebuilt/wasm2c_source_declarations.cc
@@ -88,11 +88,27 @@ R"w2c_template(#endif
R"w2c_template(
#ifdef __GNUC__
)w2c_template"
-R"w2c_template(#define wasm_asm __asm__
+R"w2c_template(#define FORCE_READ_INT(var) __asm__("" ::"r"(var));
+)w2c_template"
+R"w2c_template(// Clang on Mips requires "f" constraints on floats
+)w2c_template"
+R"w2c_template(#if defined(__clang__) && \
+)w2c_template"
+R"w2c_template( (defined(mips) || defined(__mips__) || defined(__mips))
+)w2c_template"
+R"w2c_template(#define FORCE_READ_FLOAT(var) __asm__("" ::"f"(var));
+)w2c_template"
+R"w2c_template(#else
+)w2c_template"
+R"w2c_template(#define FORCE_READ_FLOAT(var) __asm__("" ::"r"(var));
+)w2c_template"
+R"w2c_template(#endif
)w2c_template"
R"w2c_template(#else
)w2c_template"
-R"w2c_template(#define wasm_asm(X)
+R"w2c_template(#define FORCE_READ_INT(var)
+)w2c_template"
+R"w2c_template(#define FORCE_READ_FLOAT(var)
)w2c_template"
R"w2c_template(#endif
)w2c_template"
@@ -135,7 +151,7 @@ R"w2c_template( load_data(&(m.data[m.size - o - s]), i, s); \
)w2c_template"
R"w2c_template( } while (0)
)w2c_template"
-R"w2c_template(#define DEFINE_LOAD(name, t1, t2, t3) \
+R"w2c_template(#define DEFINE_LOAD(name, t1, t2, t3, force_read) \
)w2c_template"
R"w2c_template( static inline t3 name(wasm_rt_memory_t* mem, u64 addr) { \
)w2c_template"
@@ -147,7 +163,7 @@ R"w2c_template( wasm_rt_memcpy(&result, &mem->data[mem->size - addr - sizeof(
)w2c_template"
R"w2c_template( sizeof(t1)); \
)w2c_template"
-R"w2c_template( wasm_asm("" ::"r"(result)); \
+R"w2c_template( force_read(result); \
)w2c_template"
R"w2c_template( return (t3)(t2)result; \
)w2c_template"
@@ -192,7 +208,7 @@ R"w2c_template( load_data(&(m.data[o]), i, s); \
)w2c_template"
R"w2c_template( } while (0)
)w2c_template"
-R"w2c_template(#define DEFINE_LOAD(name, t1, t2, t3) \
+R"w2c_template(#define DEFINE_LOAD(name, t1, t2, t3, force_read) \
)w2c_template"
R"w2c_template( static inline t3 name(wasm_rt_memory_t* mem, u64 addr) { \
)w2c_template"
@@ -202,7 +218,7 @@ R"w2c_template( t1 result; \
)w2c_template"
R"w2c_template( wasm_rt_memcpy(&result, &mem->data[addr], sizeof(t1)); \
)w2c_template"
-R"w2c_template( wasm_asm("" ::"r"(result)); \
+R"w2c_template( force_read(result); \
)w2c_template"
R"w2c_template( return (t3)(t2)result; \
)w2c_template"
@@ -224,33 +240,33 @@ R"w2c_template( }
R"w2c_template(#endif
)w2c_template"
R"w2c_template(
-DEFINE_LOAD(i32_load, u32, u32, u32)
+DEFINE_LOAD(i32_load, u32, u32, u32, FORCE_READ_INT)
)w2c_template"
-R"w2c_template(DEFINE_LOAD(i64_load, u64, u64, u64)
+R"w2c_template(DEFINE_LOAD(i64_load, u64, u64, u64, FORCE_READ_INT)
)w2c_template"
-R"w2c_template(DEFINE_LOAD(f32_load, f32, f32, f32)
+R"w2c_template(DEFINE_LOAD(f32_load, f32, f32, f32, FORCE_READ_FLOAT)
)w2c_template"
-R"w2c_template(DEFINE_LOAD(f64_load, f64, f64, f64)
+R"w2c_template(DEFINE_LOAD(f64_load, f64, f64, f64, FORCE_READ_FLOAT)
)w2c_template"
-R"w2c_template(DEFINE_LOAD(i32_load8_s, s8, s32, u32)
+R"w2c_template(DEFINE_LOAD(i32_load8_s, s8, s32, u32, FORCE_READ_INT)
)w2c_template"
-R"w2c_template(DEFINE_LOAD(i64_load8_s, s8, s64, u64)
+R"w2c_template(DEFINE_LOAD(i64_load8_s, s8, s64, u64, FORCE_READ_INT)
)w2c_template"
-R"w2c_template(DEFINE_LOAD(i32_load8_u, u8, u32, u32)
+R"w2c_template(DEFINE_LOAD(i32_load8_u, u8, u32, u32, FORCE_READ_INT)
)w2c_template"
-R"w2c_template(DEFINE_LOAD(i64_load8_u, u8, u64, u64)
+R"w2c_template(DEFINE_LOAD(i64_load8_u, u8, u64, u64, FORCE_READ_INT)
)w2c_template"
-R"w2c_template(DEFINE_LOAD(i32_load16_s, s16, s32, u32)
+R"w2c_template(DEFINE_LOAD(i32_load16_s, s16, s32, u32, FORCE_READ_INT)
)w2c_template"
-R"w2c_template(DEFINE_LOAD(i64_load16_s, s16, s64, u64)
+R"w2c_template(DEFINE_LOAD(i64_load16_s, s16, s64, u64, FORCE_READ_INT)
)w2c_template"
-R"w2c_template(DEFINE_LOAD(i32_load16_u, u16, u32, u32)
+R"w2c_template(DEFINE_LOAD(i32_load16_u, u16, u32, u32, FORCE_READ_INT)
)w2c_template"
-R"w2c_template(DEFINE_LOAD(i64_load16_u, u16, u64, u64)
+R"w2c_template(DEFINE_LOAD(i64_load16_u, u16, u64, u64, FORCE_READ_INT)
)w2c_template"
-R"w2c_template(DEFINE_LOAD(i64_load32_s, s32, s64, u64)
+R"w2c_template(DEFINE_LOAD(i64_load32_s, s32, s64, u64, FORCE_READ_INT)
)w2c_template"
-R"w2c_template(DEFINE_LOAD(i64_load32_u, u32, u64, u64)
+R"w2c_template(DEFINE_LOAD(i64_load32_u, u32, u64, u64, FORCE_READ_INT)
)w2c_template"
R"w2c_template(DEFINE_STORE(i32_store, u32, u32)
)w2c_template"
|