[Liftoff][cleanup] Replace macro by template
R=ahaas@chromium.org Bug: v8:7570, v8:6600 Change-Id: I2630a173756a7f2d7831b6d3f820fc4224c76f68 Reviewed-on: https://chromium-review.googlesource.com/1021731 Reviewed-by: Andreas Haas <ahaas@chromium.org> Commit-Queue: Clemens Hammacher <clemensh@chromium.org> Cr-Commit-Position: refs/heads/master@{#52709}
This commit is contained in:
parent
a367acefc6
commit
8f55ec89f6
@ -464,25 +464,34 @@ void LiftoffAssembler::emit_i32_sub(Register dst, Register lhs, Register rhs) {
|
||||
}
|
||||
}
|
||||
|
||||
#define COMMUTATIVE_I32_BINOP(name, instruction) \
|
||||
void LiftoffAssembler::emit_i32_##name(Register dst, Register lhs, \
|
||||
Register rhs) { \
|
||||
if (dst == rhs) { \
|
||||
instruction(dst, lhs); \
|
||||
} else { \
|
||||
if (dst != lhs) mov(dst, lhs); \
|
||||
instruction(dst, rhs); \
|
||||
} \
|
||||
namespace liftoff {
|
||||
template <void (Assembler::*op)(Register, Register)>
|
||||
void EmitCommutativeBinOp(LiftoffAssembler* assm, Register dst, Register lhs,
|
||||
Register rhs) {
|
||||
if (dst == rhs) {
|
||||
(assm->*op)(dst, lhs);
|
||||
} else {
|
||||
if (dst != lhs) assm->mov(dst, lhs);
|
||||
(assm->*op)(dst, rhs);
|
||||
}
|
||||
}
|
||||
} // namespace liftoff
|
||||
|
||||
// clang-format off
|
||||
COMMUTATIVE_I32_BINOP(mul, imul)
|
||||
COMMUTATIVE_I32_BINOP(and, and_)
|
||||
COMMUTATIVE_I32_BINOP(or, or_)
|
||||
COMMUTATIVE_I32_BINOP(xor, xor_)
|
||||
// clang-format on
|
||||
void LiftoffAssembler::emit_i32_mul(Register dst, Register lhs, Register rhs) {
|
||||
liftoff::EmitCommutativeBinOp<&Assembler::imul>(this, dst, lhs, rhs);
|
||||
}
|
||||
|
||||
#undef COMMUTATIVE_I32_BINOP
|
||||
void LiftoffAssembler::emit_i32_and(Register dst, Register lhs, Register rhs) {
|
||||
liftoff::EmitCommutativeBinOp<&Assembler::and_>(this, dst, lhs, rhs);
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i32_or(Register dst, Register lhs, Register rhs) {
|
||||
liftoff::EmitCommutativeBinOp<&Assembler::or_>(this, dst, lhs, rhs);
|
||||
}
|
||||
|
||||
void LiftoffAssembler::emit_i32_xor(Register dst, Register lhs, Register rhs) {
|
||||
liftoff::EmitCommutativeBinOp<&Assembler::xor_>(this, dst, lhs, rhs);
|
||||
}
|
||||
|
||||
namespace liftoff {
|
||||
inline void EmitShiftOperation(LiftoffAssembler* assm, Register dst,
|
||||
|
Loading…
Reference in New Issue
Block a user