@@ -95,7 +95,7 @@ struct ShellExternalInterface : ModuleInstance::ExternalInterface {
95
95
memory.resize (wasm.memory .initial * wasm::Memory::kPageSize );
96
96
// apply memory segments
97
97
for (auto & segment : wasm.memory .segments ) {
98
- Address offset = ConstantExpressionRunner (instance.globals ).visit (segment.offset ).value .geti32 ();
98
+ Address offset = ConstantExpressionRunner<TrivialGlobalManager> (instance.globals ).visit (segment.offset ).value .geti32 ();
99
99
assert (offset + segment.data .size () <= wasm.memory .initial * wasm::Memory::kPageSize );
100
100
for (size_t i = 0 ; i != segment.data .size (); ++i) {
101
101
memory.set (offset + i, segment.data [i]);
@@ -104,7 +104,7 @@ struct ShellExternalInterface : ModuleInstance::ExternalInterface {
104
104
105
105
table.resize (wasm.table .initial );
106
106
for (auto & segment : wasm.table .segments ) {
107
- Address offset = ConstantExpressionRunner (instance.globals ).visit (segment.offset ).value .geti32 ();
107
+ Address offset = ConstantExpressionRunner<TrivialGlobalManager> (instance.globals ).visit (segment.offset ).value .geti32 ();
108
108
assert (offset + segment.data .size () <= wasm.table .initial );
109
109
for (size_t i = 0 ; i != segment.data .size (); ++i) {
110
110
table[offset + i] = segment.data [i];
@@ -143,7 +143,7 @@ struct ShellExternalInterface : ModuleInstance::ExternalInterface {
143
143
throw ExitException ();
144
144
}
145
145
std::cout << " callImport " << import->name .str << " \n " ;
146
- abort ();
146
+ WASM_UNREACHABLE ();
147
147
}
148
148
149
149
Literal callTable (Index index, LiteralList& arguments, WasmType result, ModuleInstance& instance) override {
@@ -159,60 +159,19 @@ struct ShellExternalInterface : ModuleInstance::ExternalInterface {
159
159
return instance.callFunctionInternal (func->name , arguments);
160
160
}
161
161
162
- Literal load (Load* load, Address addr) override {
163
- switch (load->type ) {
164
- case i32: {
165
- switch (load->bytes ) {
166
- case 1 : return load->signed_ ? Literal ((int32_t )memory.get <int8_t >(addr)) : Literal ((int32_t )memory.get <uint8_t >(addr));
167
- case 2 : return load->signed_ ? Literal ((int32_t )memory.get <int16_t >(addr)) : Literal ((int32_t )memory.get <uint16_t >(addr));
168
- case 4 : return load->signed_ ? Literal ((int32_t )memory.get <int32_t >(addr)) : Literal ((int32_t )memory.get <uint32_t >(addr));
169
- default : abort ();
170
- }
171
- break ;
172
- }
173
- case i64: {
174
- switch (load->bytes ) {
175
- case 1 : return load->signed_ ? Literal ((int64_t )memory.get <int8_t >(addr)) : Literal ((int64_t )memory.get <uint8_t >(addr));
176
- case 2 : return load->signed_ ? Literal ((int64_t )memory.get <int16_t >(addr)) : Literal ((int64_t )memory.get <uint16_t >(addr));
177
- case 4 : return load->signed_ ? Literal ((int64_t )memory.get <int32_t >(addr)) : Literal ((int64_t )memory.get <uint32_t >(addr));
178
- case 8 : return load->signed_ ? Literal ((int64_t )memory.get <int64_t >(addr)) : Literal ((int64_t )memory.get <uint64_t >(addr));
179
- default : abort ();
180
- }
181
- break ;
182
- }
183
- case f32: return Literal (memory.get <float >(addr));
184
- case f64: return Literal (memory.get <double >(addr));
185
- default : abort ();
186
- }
187
- }
188
-
189
- void store (Store* store, Address addr, Literal value) override {
190
- switch (store->valueType ) {
191
- case i32: {
192
- switch (store->bytes ) {
193
- case 1 : memory.set <int8_t >(addr, value.geti32 ()); break ;
194
- case 2 : memory.set <int16_t >(addr, value.geti32 ()); break ;
195
- case 4 : memory.set <int32_t >(addr, value.geti32 ()); break ;
196
- default : abort ();
197
- }
198
- break ;
199
- }
200
- case i64: {
201
- switch (store->bytes ) {
202
- case 1 : memory.set <int8_t >(addr, (int8_t )value.geti64 ()); break ;
203
- case 2 : memory.set <int16_t >(addr, (int16_t )value.geti64 ()); break ;
204
- case 4 : memory.set <int32_t >(addr, (int32_t )value.geti64 ()); break ;
205
- case 8 : memory.set <int64_t >(addr, value.geti64 ()); break ;
206
- default : abort ();
207
- }
208
- break ;
209
- }
210
- // write floats carefully, ensuring all bits reach memory
211
- case f32: memory.set <int32_t >(addr, value.reinterpreti32 ()); break ;
212
- case f64: memory.set <int64_t >(addr, value.reinterpreti64 ()); break ;
213
- default : abort ();
214
- }
215
- }
162
+ int8_t load8s (Address addr) override { return memory.get <int8_t >(addr); }
163
+ uint8_t load8u (Address addr) override { return memory.get <uint8_t >(addr); }
164
+ int16_t load16s (Address addr) override { return memory.get <int16_t >(addr); }
165
+ uint16_t load16u (Address addr) override { return memory.get <uint16_t >(addr); }
166
+ int32_t load32s (Address addr) override { return memory.get <int32_t >(addr); }
167
+ uint32_t load32u (Address addr) override { return memory.get <uint32_t >(addr); }
168
+ int64_t load64s (Address addr) override { return memory.get <int64_t >(addr); }
169
+ uint64_t load64u (Address addr) override { return memory.get <uint64_t >(addr); }
170
+
171
+ void store8 (Address addr, int8_t value) override { memory.set <int8_t >(addr, value); }
172
+ void store16 (Address addr, int16_t value) override { memory.set <int16_t >(addr, value); }
173
+ void store32 (Address addr, int32_t value) override { memory.set <int32_t >(addr, value); }
174
+ void store64 (Address addr, int64_t value) override { memory.set <int64_t >(addr, value); }
216
175
217
176
void growMemory (Address /* oldSize*/ , Address newSize) override {
218
177
memory.resize (newSize);
0 commit comments