make opcode struct clear on store immediates

This commit is contained in:
NikVolf 2017-06-09 16:38:34 +03:00
parent ed68a0316d
commit 23471d63da

View File

@ -122,6 +122,8 @@ pub enum Opcode {
GetGlobal(u32), GetGlobal(u32),
SetGlobal(u32), SetGlobal(u32),
// All store/load opcodes operate with 'memory immediates'
// which represented here as (flag, offset) tuple
I32Load(u32, u32), I32Load(u32, u32),
I64Load(u32, u32), I64Load(u32, u32),
F32Load(u32, u32), F32Load(u32, u32),
@ -145,6 +147,7 @@ pub enum Opcode {
I64Store8(u32, u32), I64Store8(u32, u32),
I64Store16(u32, u32), I64Store16(u32, u32),
I64Store32(u32, u32), I64Store32(u32, u32),
CurrentMemory(bool), CurrentMemory(bool),
GrowMemory(bool), GrowMemory(bool),
@ -649,97 +652,97 @@ impl Serialize for Opcode {
SetGlobal(index) => op!(writer, 0x24, { SetGlobal(index) => op!(writer, 0x24, {
VarUint32::from(index).serialize(writer)?; VarUint32::from(index).serialize(writer)?;
}), }),
I32Load(from, to) => op!(writer, 0x28, { I32Load(flags, offset) => op!(writer, 0x28, {
VarUint32::from(from).serialize(writer)?; VarUint32::from(flags).serialize(writer)?;
VarUint32::from(to).serialize(writer)?; VarUint32::from(offset).serialize(writer)?;
}), }),
I64Load(from, to) => op!(writer, 0x29, { I64Load(flags, offset) => op!(writer, 0x29, {
VarUint32::from(from).serialize(writer)?; VarUint32::from(flags).serialize(writer)?;
VarUint32::from(to).serialize(writer)?; VarUint32::from(offset).serialize(writer)?;
}), }),
F32Load(from, to) => op!(writer, 0x2a, { F32Load(flags, offset) => op!(writer, 0x2a, {
VarUint32::from(from).serialize(writer)?; VarUint32::from(flags).serialize(writer)?;
VarUint32::from(to).serialize(writer)?; VarUint32::from(offset).serialize(writer)?;
}), }),
F64Load(from, to) => op!(writer, 0x2b, { F64Load(flags, offset) => op!(writer, 0x2b, {
VarUint32::from(from).serialize(writer)?; VarUint32::from(flags).serialize(writer)?;
VarUint32::from(to).serialize(writer)?; VarUint32::from(offset).serialize(writer)?;
}), }),
I32Load8S(from, to) => op!(writer, 0x2c, { I32Load8S(flags, offset) => op!(writer, 0x2c, {
VarUint32::from(from).serialize(writer)?; VarUint32::from(flags).serialize(writer)?;
VarUint32::from(to).serialize(writer)?; VarUint32::from(offset).serialize(writer)?;
}), }),
I32Load8U(from, to) => op!(writer, 0x2d, { I32Load8U(flags, offset) => op!(writer, 0x2d, {
VarUint32::from(from).serialize(writer)?; VarUint32::from(flags).serialize(writer)?;
VarUint32::from(to).serialize(writer)?; VarUint32::from(offset).serialize(writer)?;
}), }),
I32Load16S(from, to) => op!(writer, 0x2e, { I32Load16S(flags, offset) => op!(writer, 0x2e, {
VarUint32::from(from).serialize(writer)?; VarUint32::from(flags).serialize(writer)?;
VarUint32::from(to).serialize(writer)?; VarUint32::from(offset).serialize(writer)?;
}), }),
I32Load16U(from, to) => op!(writer, 0x2f, { I32Load16U(flags, offset) => op!(writer, 0x2f, {
VarUint32::from(from).serialize(writer)?; VarUint32::from(flags).serialize(writer)?;
VarUint32::from(to).serialize(writer)?; VarUint32::from(offset).serialize(writer)?;
}), }),
I64Load8S(from, to) => op!(writer, 0x30, { I64Load8S(flags, offset) => op!(writer, 0x30, {
VarUint32::from(from).serialize(writer)?; VarUint32::from(flags).serialize(writer)?;
VarUint32::from(to).serialize(writer)?; VarUint32::from(offset).serialize(writer)?;
}), }),
I64Load8U(from, to) => op!(writer, 0x31, { I64Load8U(flags, offset) => op!(writer, 0x31, {
VarUint32::from(from).serialize(writer)?; VarUint32::from(flags).serialize(writer)?;
VarUint32::from(to).serialize(writer)?; VarUint32::from(offset).serialize(writer)?;
}), }),
I64Load16S(from, to) => op!(writer, 0x32, { I64Load16S(flags, offset) => op!(writer, 0x32, {
VarUint32::from(from).serialize(writer)?; VarUint32::from(flags).serialize(writer)?;
VarUint32::from(to).serialize(writer)?; VarUint32::from(offset).serialize(writer)?;
}), }),
I64Load16U(from, to) => op!(writer, 0x33, { I64Load16U(flags, offset) => op!(writer, 0x33, {
VarUint32::from(from).serialize(writer)?; VarUint32::from(flags).serialize(writer)?;
VarUint32::from(to).serialize(writer)?; VarUint32::from(offset).serialize(writer)?;
}), }),
I64Load32S(from, to) => op!(writer, 0x34, { I64Load32S(flags, offset) => op!(writer, 0x34, {
VarUint32::from(from).serialize(writer)?; VarUint32::from(flags).serialize(writer)?;
VarUint32::from(to).serialize(writer)?; VarUint32::from(offset).serialize(writer)?;
}), }),
I64Load32U(from, to) => op!(writer, 0x35, { I64Load32U(flags, offset) => op!(writer, 0x35, {
VarUint32::from(from).serialize(writer)?; VarUint32::from(flags).serialize(writer)?;
VarUint32::from(to).serialize(writer)?; VarUint32::from(offset).serialize(writer)?;
}), }),
I32Store(from, to) => op!(writer, 0x36, { I32Store(flags, offset) => op!(writer, 0x36, {
VarUint32::from(from).serialize(writer)?; VarUint32::from(flags).serialize(writer)?;
VarUint32::from(to).serialize(writer)?; VarUint32::from(offset).serialize(writer)?;
}), }),
I64Store(from, to) => op!(writer, 0x37, { I64Store(flags, offset) => op!(writer, 0x37, {
VarUint32::from(from).serialize(writer)?; VarUint32::from(flags).serialize(writer)?;
VarUint32::from(to).serialize(writer)?; VarUint32::from(offset).serialize(writer)?;
}), }),
F32Store(from, to) => op!(writer, 0x38, { F32Store(flags, offset) => op!(writer, 0x38, {
VarUint32::from(from).serialize(writer)?; VarUint32::from(flags).serialize(writer)?;
VarUint32::from(to).serialize(writer)?; VarUint32::from(offset).serialize(writer)?;
}), }),
F64Store(from, to) => op!(writer, 0x39, { F64Store(flags, offset) => op!(writer, 0x39, {
VarUint32::from(from).serialize(writer)?; VarUint32::from(flags).serialize(writer)?;
VarUint32::from(to).serialize(writer)?; VarUint32::from(offset).serialize(writer)?;
}), }),
I32Store8(from, to) => op!(writer, 0x3a, { I32Store8(flags, offset) => op!(writer, 0x3a, {
VarUint32::from(from).serialize(writer)?; VarUint32::from(flags).serialize(writer)?;
VarUint32::from(to).serialize(writer)?; VarUint32::from(offset).serialize(writer)?;
}), }),
I32Store16(from, to) => op!(writer, 0x3b, { I32Store16(flags, offset) => op!(writer, 0x3b, {
VarUint32::from(from).serialize(writer)?; VarUint32::from(flags).serialize(writer)?;
VarUint32::from(to).serialize(writer)?; VarUint32::from(offset).serialize(writer)?;
}), }),
I64Store8(from, to) => op!(writer, 0x3c, { I64Store8(flags, offset) => op!(writer, 0x3c, {
VarUint32::from(from).serialize(writer)?; VarUint32::from(flags).serialize(writer)?;
VarUint32::from(to).serialize(writer)?; VarUint32::from(offset).serialize(writer)?;
}), }),
I64Store16(from, to) => op!(writer, 0x3d, { I64Store16(flags, offset) => op!(writer, 0x3d, {
VarUint32::from(from).serialize(writer)?; VarUint32::from(flags).serialize(writer)?;
VarUint32::from(to).serialize(writer)?; VarUint32::from(offset).serialize(writer)?;
}), }),
I64Store32(from, to) => op!(writer, 0x3e, { I64Store32(flags, offset) => op!(writer, 0x3e, {
VarUint32::from(from).serialize(writer)?; VarUint32::from(flags).serialize(writer)?;
VarUint32::from(to).serialize(writer)?; VarUint32::from(offset).serialize(writer)?;
}), }),
CurrentMemory(flag) => op!(writer, 0x3f, { CurrentMemory(flag) => op!(writer, 0x3f, {
VarUint1::from(flag).serialize(writer)?; VarUint1::from(flag).serialize(writer)?;