mirror of
https://github.com/fluencelabs/wasmer
synced 2025-03-18 17:10:52 +00:00
No need to emit add of constant zero.
This commit is contained in:
parent
8c5ccdb497
commit
07b5991080
@ -1512,22 +1512,24 @@ impl X64FunctionCode {
|
||||
a.emit_add(Size::S64, Location::GPR(tmp_base), Location::GPR(tmp_bound));
|
||||
a.emit_mov(Size::S32, addr, Location::GPR(tmp_addr));
|
||||
|
||||
// This branch is used for emitting "faster" code for the special case of (offset + value_size) not exceeding u32 range.
|
||||
match (offset as u32).checked_add(value_size as u32) {
|
||||
Some(x) => {
|
||||
a.emit_add(Size::S64, Location::Imm32(x), Location::GPR(tmp_addr));
|
||||
}
|
||||
None => {
|
||||
a.emit_add(
|
||||
Size::S64,
|
||||
Location::Imm32(offset as u32),
|
||||
Location::GPR(tmp_addr),
|
||||
);
|
||||
a.emit_add(
|
||||
Size::S64,
|
||||
Location::Imm32(value_size as u32),
|
||||
Location::GPR(tmp_addr),
|
||||
);
|
||||
if offset != 0 && value_size != 0 {
|
||||
// This branch is used for emitting "faster" code for the special case of (offset + value_size) not exceeding u32 range.
|
||||
match (offset as u32).checked_add(value_size as u32) {
|
||||
Some(x) => {
|
||||
a.emit_add(Size::S64, Location::Imm32(x), Location::GPR(tmp_addr));
|
||||
}
|
||||
None => {
|
||||
a.emit_add(
|
||||
Size::S64,
|
||||
Location::Imm32(offset as u32),
|
||||
Location::GPR(tmp_addr),
|
||||
);
|
||||
a.emit_add(
|
||||
Size::S64,
|
||||
Location::Imm32(value_size as u32),
|
||||
Location::GPR(tmp_addr),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1541,11 +1543,13 @@ impl X64FunctionCode {
|
||||
|
||||
// Calculates the real address, and loads from it.
|
||||
a.emit_mov(Size::S32, addr, Location::GPR(tmp_addr));
|
||||
a.emit_add(
|
||||
Size::S64,
|
||||
Location::Imm32(offset as u32),
|
||||
Location::GPR(tmp_addr),
|
||||
);
|
||||
if offset != 0 {
|
||||
a.emit_add(
|
||||
Size::S64,
|
||||
Location::Imm32(offset as u32),
|
||||
Location::GPR(tmp_addr),
|
||||
);
|
||||
}
|
||||
a.emit_add(Size::S64, Location::GPR(tmp_base), Location::GPR(tmp_addr));
|
||||
m.release_temp_gpr(tmp_base);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user