Commit 0e97280f authored by Michael Starzinger's avatar Michael Starzinger Committed by Commit Bot

[asm.js] Use STDLIB_MATH_*_LIST macros everywhere.

This uses the common macro lists instead of duplicating the list of
available math functions and values in {AsmJs::IsStdlibValid}.

R=rossberg@chromium.org
BUG=v8:6127

Change-Id: Ic480d74bb0b5f0f425d1e601e5128fa6f466bea1
Reviewed-on: https://chromium-review.googlesource.com/481260Reviewed-by: 's avatarAndreas Rossberg <rossberg@chromium.org>
Commit-Queue: Michael Starzinger <mstarzinger@chromium.org>
Cr-Commit-Position: refs/heads/master@{#44725}
parent b4c8d383
......@@ -6,6 +6,7 @@
#include "src/api-natives.h"
#include "src/api.h"
#include "src/asmjs/asm-names.h"
#include "src/asmjs/asm-parser.h"
#include "src/asmjs/asm-typer.h"
#include "src/asmjs/asm-wasm-builder.h"
......@@ -18,7 +19,6 @@
#include "src/isolate.h"
#include "src/objects-inl.h"
#include "src/objects.h"
#include "src/parsing/parse-info.h"
#include "src/wasm/module-decoder.h"
#include "src/wasm/wasm-js.h"
......@@ -108,8 +108,8 @@ bool IsStdlibMemberValid(i::Isolate* isolate, Handle<JSReceiver> stdlib,
Handle<i::Object> value = maybe_value.ToHandleChecked();
return value->IsNaN();
}
#define STDLIB_MATH_FUNC(CamelName, fname) \
case wasm::AsmTyper::StandardMember::k##CamelName: { \
#define STDLIB_MATH_FUNC(fname, FName, ignore1, ignore2) \
case wasm::AsmTyper::StandardMember::kMath##FName: { \
Handle<i::Name> name(isolate->factory()->InternalizeOneByteString( \
STATIC_CHAR_VECTOR(#fname))); \
Handle<i::Object> value = StdlibMathMember(isolate, stdlib, name); \
......@@ -118,27 +118,9 @@ bool IsStdlibMemberValid(i::Isolate* isolate, Handle<JSReceiver> stdlib,
} \
Handle<i::JSFunction> func(i::JSFunction::cast(*value)); \
return func->shared()->code() == \
isolate->builtins()->builtin(Builtins::k##CamelName); \
isolate->builtins()->builtin(Builtins::kMath##FName); \
}
STDLIB_MATH_FUNC(MathAcos, acos)
STDLIB_MATH_FUNC(MathAsin, asin)
STDLIB_MATH_FUNC(MathAtan, atan)
STDLIB_MATH_FUNC(MathCos, cos)
STDLIB_MATH_FUNC(MathSin, sin)
STDLIB_MATH_FUNC(MathTan, tan)
STDLIB_MATH_FUNC(MathExp, exp)
STDLIB_MATH_FUNC(MathLog, log)
STDLIB_MATH_FUNC(MathCeil, ceil)
STDLIB_MATH_FUNC(MathFloor, floor)
STDLIB_MATH_FUNC(MathSqrt, sqrt)
STDLIB_MATH_FUNC(MathAbs, abs)
STDLIB_MATH_FUNC(MathClz32, clz32)
STDLIB_MATH_FUNC(MathMin, min)
STDLIB_MATH_FUNC(MathMax, max)
STDLIB_MATH_FUNC(MathAtan2, atan2)
STDLIB_MATH_FUNC(MathPow, pow)
STDLIB_MATH_FUNC(MathImul, imul)
STDLIB_MATH_FUNC(MathFround, fround)
STDLIB_MATH_FUNCTION_LIST(STDLIB_MATH_FUNC)
#undef STDLIB_MATH_FUNC
#define STDLIB_MATH_CONST(cname, const_value) \
case wasm::AsmTyper::StandardMember::kMath##cname: { \
......@@ -148,14 +130,7 @@ bool IsStdlibMemberValid(i::Isolate* isolate, Handle<JSReceiver> stdlib,
return !value.is_null() && value->IsNumber() && \
value->Number() == const_value; \
}
STDLIB_MATH_CONST(E, 2.718281828459045)
STDLIB_MATH_CONST(LN10, 2.302585092994046)
STDLIB_MATH_CONST(LN2, 0.6931471805599453)
STDLIB_MATH_CONST(LOG2E, 1.4426950408889634)
STDLIB_MATH_CONST(LOG10E, 0.4342944819032518)
STDLIB_MATH_CONST(PI, 3.141592653589793)
STDLIB_MATH_CONST(SQRT1_2, 0.7071067811865476)
STDLIB_MATH_CONST(SQRT2, 1.4142135623730951)
STDLIB_MATH_VALUE_LIST(STDLIB_MATH_CONST)
#undef STDLIB_MATH_CONST
default: { UNREACHABLE(); }
}
......
......@@ -5,15 +5,16 @@
#ifndef V8_ASMJS_ASM_NAMES_H_
#define V8_ASMJS_ASM_NAMES_H_
// V(stdlib.Math.<name>, constant-value)
#define STDLIB_MATH_VALUE_LIST(V) \
V(E) \
V(LN10) \
V(LN2) \
V(LOG2E) \
V(LOG10E) \
V(PI) \
V(SQRT1_2) \
V(SQRT2)
V(E, 2.718281828459045) \
V(LN10, 2.302585092994046) \
V(LN2, 0.6931471805599453) \
V(LOG2E, 1.4426950408889634) \
V(LOG10E, 0.4342944819032518) \
V(PI, 3.141592653589793) \
V(SQRT1_2, 0.7071067811865476) \
V(SQRT2, 1.4142135623730951)
// V(stdlib.Math.<name>, Name, wasm-opcode, asm-js-type)
#define STDLIB_MATH_FUNCTION_MONOMORPHIC_LIST(V) \
......
......@@ -4,11 +4,6 @@
#include "src/asmjs/asm-parser.h"
// Required to get M_E etc. for MSVC.
// References from STDLIB_MATH_VALUE_LIST in asm-names.h
#if defined(_WIN32)
#define _USE_MATH_DEFINES
#endif
#include <math.h>
#include <string.h>
......@@ -610,10 +605,10 @@ void AsmJsParser::ValidateModuleVarStdlib(VarInfo* info) {
if (Check(TOK(Math))) {
EXPECT_TOKEN('.');
switch (Consume()) {
#define V(name) \
#define V(name, const_value) \
case TOK(name): \
DeclareGlobal(info, false, AsmType::Double(), kWasmF64, \
WasmInitExpr(M_##name)); \
WasmInitExpr(const_value)); \
stdlib_uses_.insert(AsmTyper::kMath##name); \
break;
STDLIB_MATH_VALUE_LIST(V)
......
......@@ -52,7 +52,7 @@ class AsmJsParser {
#define V(_unused0, Name, _unused1, _unused2) kMath##Name,
STDLIB_MATH_FUNCTION_LIST(V)
#undef V
#define V(Name) kMath##Name,
#define V(Name, _unused1) kMath##Name,
STDLIB_MATH_VALUE_LIST(V)
#undef V
};
......
......@@ -35,8 +35,10 @@ AsmJsScanner::AsmJsScanner()
STDLIB_MATH_FUNCTION_LIST(V)
STDLIB_ARRAY_TYPE_LIST(V)
#undef V
#define V(name) property_names_[#name] = kToken_##name;
#define V(name, _junk1) property_names_[#name] = kToken_##name;
STDLIB_MATH_VALUE_LIST(V)
#undef V
#define V(name) property_names_[#name] = kToken_##name;
STDLIB_OTHER_LIST(V)
#undef V
#define V(name) global_names_[#name] = kToken_##name;
......
......@@ -110,9 +110,11 @@ class V8_EXPORT_PRIVATE AsmJsScanner {
STDLIB_MATH_FUNCTION_LIST(V)
STDLIB_ARRAY_TYPE_LIST(V)
#undef V
#define V(name, _junk1) kToken_##name,
STDLIB_MATH_VALUE_LIST(V)
#undef V
#define V(name) kToken_##name,
STDLIB_OTHER_LIST(V)
STDLIB_MATH_VALUE_LIST(V)
KEYWORD_NAME_LIST(V)
#undef V
#define V(rawname, name) kToken_##name,
......
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