| Index: src/typing-asm.h
|
| diff --git a/src/typing-asm.h b/src/typing-asm.h
|
| index bd0a09b063c50cb2a038f922f5e2195a0f47b96a..195dfb2ed11326806044023a409150ea1feb3942 100644
|
| --- a/src/typing-asm.h
|
| +++ b/src/typing-asm.h
|
| @@ -22,28 +22,52 @@ class AsmTyper : public AstVisitor {
|
| explicit AsmTyper(Isolate* isolate, Zone* zone, Script* script,
|
| FunctionLiteral* root);
|
| bool Validate();
|
| + void set_allow_simd(bool simd);
|
| const char* error_message() { return error_message_; }
|
|
|
| DEFINE_AST_VISITOR_SUBCLASS_MEMBERS();
|
|
|
| private:
|
| Zone* zone_;
|
| + Isolate* isolate_;
|
| Script* script_;
|
| FunctionLiteral* root_;
|
| bool valid_;
|
| + bool allow_simd_;
|
| +
|
| + struct VariableInfo : public ZoneObject {
|
| + Type* type;
|
| + bool is_stdlib;
|
| + bool is_check_function;
|
| + bool is_constructor_function;
|
| +
|
| + VariableInfo()
|
| + : type(NULL),
|
| + is_stdlib(false),
|
| + is_check_function(false),
|
| + is_constructor_function(false) {}
|
| + explicit VariableInfo(Type* t)
|
| + : type(t), is_check_function(false), is_constructor_function(false) {}
|
| + };
|
|
|
| // Information for bi-directional typing with a cap on nesting depth.
|
| Type* expected_type_;
|
| Type* computed_type_;
|
| + VariableInfo* property_info_;
|
| int intish_; // How many ops we've gone without a x|0.
|
|
|
| Type* return_type_; // Return type of last function.
|
| size_t array_size_; // Array size of last ArrayLiteral.
|
|
|
| - typedef ZoneMap<std::string, Type*> ObjectTypeMap;
|
| + typedef ZoneMap<std::string, VariableInfo*> ObjectTypeMap;
|
| ObjectTypeMap stdlib_types_;
|
| ObjectTypeMap stdlib_heap_types_;
|
| ObjectTypeMap stdlib_math_types_;
|
| +#define V(NAME, Name, name, lane_count, lane_type) \
|
| + ObjectTypeMap stdlib_simd_##name##_types_; \
|
| + VariableInfo* stdlib_simd_##name##_constructor_type_;
|
| + SIMD128_TYPES(V)
|
| +#undef V
|
|
|
| // Map from Variable* to global/local variable Type*.
|
| ZoneHashMap global_variable_type_;
|
| @@ -61,23 +85,35 @@ class AsmTyper : public AstVisitor {
|
| static const int kMaxUncombinedMultiplicativeSteps = 1;
|
|
|
| void InitializeStdlib();
|
| + void InitializeStdlibSIMD();
|
|
|
| void VisitDeclarations(ZoneList<Declaration*>* d) override;
|
| void VisitStatements(ZoneList<Statement*>* s) override;
|
|
|
| - void VisitExpressionAnnotation(Expression* e, bool is_return);
|
| + void VisitExpressionAnnotation(Expression* e, bool is_return,
|
| + Variable* variable);
|
| void VisitFunctionAnnotation(FunctionLiteral* f);
|
| void VisitAsmModule(FunctionLiteral* f);
|
|
|
| void VisitHeapAccess(Property* expr);
|
|
|
| + Expression* GetReceiverOfPropertyAccess(Expression* expr, const char* name);
|
| + bool IsMathObject(Expression* expr);
|
| + bool IsSIMDObject(Expression* expr);
|
| + bool IsSIMDTypeObject(Expression* expr, const char* name);
|
| + bool IsStdlibObject(Expression* expr);
|
| +
|
| + void VisitSIMDProperty(Property* expr);
|
| +
|
| int ElementShiftSize(Type* type);
|
| Type* StorageType(Type* type);
|
|
|
| void SetType(Variable* variable, Type* type);
|
| Type* GetType(Variable* variable);
|
| + VariableInfo* GetVariableInfo(Variable* variable, bool setting);
|
| + void SetVariableInfo(Variable* variable, const VariableInfo* info);
|
|
|
| - Type* LibType(ObjectTypeMap map, Handle<String> name);
|
| + VariableInfo* LibType(ObjectTypeMap map, Handle<String> name);
|
|
|
| void SetResult(Expression* expr, Type* type);
|
| void IntersectResult(Expression* expr, Type* type);
|
|
|