Skip to content

Commit 187fbf2

Browse files
committed
Fixes #118: Add support for atomic.fence;
1 parent 22704b5 commit 187fbf2

File tree

3 files changed

+10
-0
lines changed

3 files changed

+10
-0
lines changed

src/binary_reader.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -608,6 +608,9 @@ impl<'a> BinaryReader<'a> {
608608
0x02 => Operator::I64Wait {
609609
memarg: self.read_memarg_of_align(3)?,
610610
},
611+
0x03 => Operator::Fence {
612+
flags: self.read_u8()? as u8,
613+
},
611614
0x10 => Operator::I32AtomicLoad {
612615
memarg: self.read_memarg_of_align(2)?,
613616
},

src/operators_validator.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1225,6 +1225,12 @@ impl OperatorValidator {
12251225
self.check_operands(&[Type::I32, Type::I64, Type::I64])?;
12261226
self.func_state.change_frame_with_type(3, Type::I32)?;
12271227
}
1228+
Operator::Fence { ref flags } => {
1229+
self.check_threads_enabled()?;
1230+
if *flags != 0 {
1231+
return Err("non-zero flags for fence not supported yet");
1232+
}
1233+
}
12281234
Operator::RefNull => {
12291235
self.check_reference_types_enabled()?;
12301236
self.func_state.change_frame_with_type(0, Type::AnyRef)?;

src/primitives.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -444,6 +444,7 @@ pub enum Operator<'a> {
444444
Wake { memarg: MemoryImmediate },
445445
I32Wait { memarg: MemoryImmediate },
446446
I64Wait { memarg: MemoryImmediate },
447+
Fence { flags: u8 },
447448
I32AtomicLoad { memarg: MemoryImmediate },
448449
I64AtomicLoad { memarg: MemoryImmediate },
449450
I32AtomicLoad8U { memarg: MemoryImmediate },

0 commit comments

Comments
 (0)