use the obvious DW_OP_const4u for 0xffff_ffff (#2154)

No point in resorting to LEB128 encoding for such constants,
using the native `u32` is faster and more compact.

Adds `write_u32` method to facilitate this.
This commit is contained in:
Gabor Greif
2020-08-21 15:16:09 +02:00
committed by GitHub
parent 0b67b22eda
commit 6513e90914

View File

@@ -64,6 +64,10 @@ impl ExpressionWriter {
write::Writer::write_u8(&mut self.0, b) write::Writer::write_u8(&mut self.0, b)
} }
pub fn write_u32(&mut self, b: u32) -> write::Result<()> {
write::Writer::write_u32(&mut self.0, b)
}
pub fn write_uleb128(&mut self, i: u64) -> write::Result<()> { pub fn write_uleb128(&mut self, i: u64) -> write::Result<()> {
write::Writer::write_uleb128(&mut self.0, i) write::Writer::write_uleb128(&mut self.0, i)
} }
@@ -196,8 +200,8 @@ fn append_memory_deref(
} }
writer.write_op(gimli::constants::DW_OP_deref)?; writer.write_op(gimli::constants::DW_OP_deref)?;
writer.write_op(gimli::constants::DW_OP_swap)?; writer.write_op(gimli::constants::DW_OP_swap)?;
writer.write_op(gimli::constants::DW_OP_constu)?; writer.write_op(gimli::constants::DW_OP_const4u)?;
writer.write_uleb128(0xffff_ffff)?; writer.write_u32(0xffff_ffff)?;
writer.write_op(gimli::constants::DW_OP_and)?; writer.write_op(gimli::constants::DW_OP_and)?;
writer.write_op(gimli::constants::DW_OP_plus)?; writer.write_op(gimli::constants::DW_OP_plus)?;
buf.extend(writer.into_vec()); buf.extend(writer.into_vec());