Commit 3fa56f2b authored by jpp's avatar jpp Committed by Commit bot

[wasm] asm.js. Adds support for clz32 in asm.js.

BUG= https://bugs.chromium.org/p/v8/issues/detail?id=4203

Review-Url: https://codereview.chromium.org/2200213002
Cr-Commit-Position: refs/heads/master@{#38259}
parent 51685002
......@@ -178,6 +178,9 @@ void AsmTyper::InitializeStdlib() {
s2s->AsFunctionType()->AddArgument(s);
auto* i = AsmType::Int();
auto* i2s = AsmType::Function(zone_, s);
i2s->AsFunctionType()->AddArgument(i);
auto* ii2s = AsmType::Function(zone_, s);
ii2s->AsFunctionType()->AddArgument(i);
ii2s->AsFunctionType()->AddArgument(i);
......@@ -248,6 +251,10 @@ void AsmTyper::InitializeStdlib() {
{"SQRT1_2", kMathSQRT1_2, d},
{"imul", kMathImul, ii2s},
{"abs", kMathAbs, abs},
// NOTE: clz32 should return fixnum. The current typer can only return
// Signed, Float, or Double, so it returns Signed in our version of
// asm.js.
{"clz32", kMathClz32, i2s},
{"ceil", kMathCeil, ceil},
{"floor", kMathFloor, floor},
{"fround", kMathFround, fround},
......
......@@ -47,6 +47,7 @@ class AsmTyper final {
kMathFloor,
kMathSqrt,
kMathAbs,
kMathClz32,
kMathMin,
kMathMax,
kMathAtan2,
......
......@@ -1085,6 +1085,12 @@ class AsmWasmBuilderImpl final : public AstVisitor<AsmWasmBuilderImpl> {
}
break;
}
case AsmTyper::kMathClz32: {
VisitCallArgs(call);
DCHECK(call_type == kAstI32);
current_function_builder_->Emit(kExprI32Clz);
break;
}
case AsmTyper::kMathAbs: {
if (call_type == kAstI32) {
uint32_t tmp = current_function_builder_->AddLocal(kAstI32);
......
......@@ -50,6 +50,7 @@
"use asm";
var StdlibMathCeil = stdlib.Math.ceil;
var StdlibMathClz32 = stdlib.Math.clz32;
var StdlibMathFloor = stdlib.Math.floor;
var StdlibMathSqrt = stdlib.Math.sqrt;
var StdlibMathAbs = stdlib.Math.abs;
......@@ -106,6 +107,7 @@
if (!(deltaEqual(+StdlibMathTan(0.2), 0.20271003550867250)|0)) return 0;
if (!(deltaEqual(+StdlibMathExp(0.2), 1.2214027581601699)|0)) return 0;
if (!(deltaEqual(+StdlibMathLog(0.2), -1.6094379124341003)|0)) return 0;
if ((StdlibMathClz32(134217728)|0) != 4) return 0;
if ((StdlibMathImul(6, 7)|0) != 42) return 0;
if (!(deltaEqual(+StdlibMathAtan2(6.0, 7.0), 0.7086262721276703)|0))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment