Skip to content

Commit af2602f

Browse files
committed
feat: support i32.extend_s/i8
1 parent 01175fd commit af2602f

3 files changed

Lines changed: 9 additions & 0 deletions

File tree

seewasm/arch/wasm/instructions/ConversionInstructions.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,12 @@ def emulate(self, state):
179179
result = simplify(fpBVToFP(arg0, Float64()))
180180
assert result.ebits() == 11, 'f64.reinterpret/i64 conversion fail'
181181
assert result.sbits() == 53, 'f64.reinterpret/i64 conversion fail'
182+
elif self.instr_name == 'i32.extend_s/i8':
183+
assert arg0.size() == 8, 'i32.extend_s/i8 has wrong arg type'
184+
185+
result = simplify(SignExt(24, arg0))
182186
else:
187+
print('\nErr:\nUnsupported instruction: %s\n' % self.instr_name)
183188
raise UnsupportInstructionError
184189

185190
state.symbolic_stack.append(result)

seewasm/arch/wasm/wasm.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,8 @@
235235
0xbd: ('i64.reinterpret/f64', None, 1, 1, 'reinterpret the bits of a 64-bit float as a 64-bit integer'),
236236
0xbe: ('f32.reinterpret/i32', None, 1, 1, 'reinterpret the bits of a 32-bit integer as a 32-bit float'),
237237
0xbf: ('f64.reinterpret/i64', None, 1, 1, 'reinterpret the bits of a 64-bit integer as a 64-bit float'),
238+
0xc0: ('i32.extend_s/i8', None, 1, 1, 'extend a signed 8-bit integer to a 32-bit integer'),
239+
238240
0xfc0a: ('memory.copy', ExtMemoryImm(), 3, 1, 'copy data from a source memory region to destination region'),
239241
# Unimplemented
240242
0xfc0b: ('memory.fill', ExtMemoryImm(), 3, 1, 'set all bytes in a memory region to a given byte'),

wasm/opcodes.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,8 @@
197197
Opcode(0xbe, 'f32.reinterpret/i32', None, 0),
198198
Opcode(0xbf, 'f64.reinterpret/i64', None, 0),
199199

200+
Opcode(0xc0, 'i32.extend_s/i8', None, 0),
201+
200202
Opcode(0xfc0a, 'memory.copy', ExtMemoryImm(), 0),
201203
Opcode(0xfc0b, 'memory.fill', ExtMemoryImm(), 0),
202204
]

0 commit comments

Comments
 (0)