X87: [turbofan] Turn Math.clz32 into an inlinable builtin.
port 3aa206b865
(r27329)
original commit message:
BUG=
Review URL: https://codereview.chromium.org/1022523005
Cr-Commit-Position: refs/heads/master@{#27429}
This commit is contained in:
parent
052020e514
commit
b638550338
@ -4265,14 +4265,8 @@ void LCodeGen::DoMathLog(LMathLog* instr) {
|
||||
void LCodeGen::DoMathClz32(LMathClz32* instr) {
|
||||
Register input = ToRegister(instr->value());
|
||||
Register result = ToRegister(instr->result());
|
||||
Label not_zero_input;
|
||||
__ bsr(result, input);
|
||||
|
||||
__ j(not_zero, ¬_zero_input);
|
||||
__ Move(result, Immediate(63)); // 63^31 == 32
|
||||
|
||||
__ bind(¬_zero_input);
|
||||
__ xor_(result, Immediate(31)); // for x in [0..31], 31^x == 31-x.
|
||||
__ Lzcnt(result, input);
|
||||
}
|
||||
|
||||
|
||||
|
@ -2355,6 +2355,17 @@ void MacroAssembler::Move(const Operand& dst, const Immediate& x) {
|
||||
}
|
||||
|
||||
|
||||
void MacroAssembler::Lzcnt(Register dst, const Operand& src) {
|
||||
// TODO(intel): Add support for LZCNT (with ABM/BMI1).
|
||||
Label not_zero_src;
|
||||
bsr(dst, src);
|
||||
j(not_zero, ¬_zero_src, Label::kNear);
|
||||
Move(dst, Immediate(63)); // 63^31 == 32
|
||||
bind(¬_zero_src);
|
||||
xor_(dst, Immediate(31)); // for x in [0..31], 31^x == 31-x.
|
||||
}
|
||||
|
||||
|
||||
void MacroAssembler::SetCounter(StatsCounter* counter, int value) {
|
||||
if (FLAG_native_code_counters && counter->Enabled()) {
|
||||
mov(Operand::StaticVariable(ExternalReference(counter)), Immediate(value));
|
||||
|
@ -776,6 +776,9 @@ class MacroAssembler: public Assembler {
|
||||
void Push(Register src) { push(src); }
|
||||
void Pop(Register dst) { pop(dst); }
|
||||
|
||||
void Lzcnt(Register dst, Register src) { Lzcnt(dst, Operand(src)); }
|
||||
void Lzcnt(Register dst, const Operand& src);
|
||||
|
||||
// Emit call to the code we are currently generating.
|
||||
void CallSelf() {
|
||||
Handle<Code> self(reinterpret_cast<Code**>(CodeObject().location()));
|
||||
|
Loading…
Reference in New Issue
Block a user