Index: src/wasm/asm-types.cc |
diff --git a/src/wasm/asm-types.cc b/src/wasm/asm-types.cc |
deleted file mode 100644 |
index e5588ae922d3180bfa28da6a9dfd604d19417c09..0000000000000000000000000000000000000000 |
--- a/src/wasm/asm-types.cc |
+++ /dev/null |
@@ -1,319 +0,0 @@ |
-// Copyright 2016 the V8 project authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "src/v8.h" |
- |
-#include "src/wasm/asm-types.h" |
- |
-namespace v8 { |
-namespace internal { |
-namespace wasm { |
- |
-AsmCallableType* AsmType::AsCallableType() { |
- if (AsValueType() != nullptr) { |
- return nullptr; |
- } |
- |
- DCHECK(this->AsFunctionType() != nullptr || |
- this->AsOverloadedFunctionType() != nullptr || |
- this->AsFFIType() != nullptr || |
- this->AsFunctionTableType() != nullptr); |
- return reinterpret_cast<AsmCallableType*>(this); |
-} |
- |
-std::string AsmType::Name() { |
- AsmValueType* avt = this->AsValueType(); |
- if (avt != nullptr) { |
- switch (avt->Bitset()) { |
-#define RETURN_TYPE_NAME(CamelName, string_name, number, parent_types) \ |
- case AsmValueType::kAsm##CamelName: \ |
- return string_name; |
- FOR_EACH_ASM_VALUE_TYPE_LIST(RETURN_TYPE_NAME) |
-#undef RETURN_TYPE_NAME |
- default: |
- UNREACHABLE(); |
- } |
- } |
- |
- return this->AsCallableType()->Name(); |
-} |
- |
-bool AsmType::IsExactly(AsmType* that) { |
- // TODO(jpp): maybe this can become this == that. |
- AsmValueType* avt = this->AsValueType(); |
- if (avt != nullptr) { |
- AsmValueType* tavt = that->AsValueType(); |
- if (tavt == nullptr) { |
- return false; |
- } |
- return avt->Bitset() == tavt->Bitset(); |
- } |
- |
- // TODO(jpp): is it useful to allow non-value types to be tested with |
- // IsExactly? |
- return that == this; |
-} |
- |
-bool AsmType::IsA(AsmType* that) { |
- // IsA is used for querying inheritance relationships. Therefore it is only |
- // meaningful for basic types. |
- AsmValueType* tavt = that->AsValueType(); |
- if (tavt != nullptr) { |
- AsmValueType* avt = this->AsValueType(); |
- if (avt == nullptr) { |
- return false; |
- } |
- return (avt->Bitset() & tavt->Bitset()) == tavt->Bitset(); |
- } |
- |
- // TODO(jpp): is it useful to allow non-value types to be tested with IsA? |
- return that == this; |
-} |
- |
-int32_t AsmType::ElementSizeInBytes() { |
- auto* value = AsValueType(); |
- if (value == nullptr) { |
- return AsmType::kNotHeapType; |
- } |
- switch (value->Bitset()) { |
- case AsmValueType::kAsmInt8Array: |
- case AsmValueType::kAsmUint8Array: |
- return 1; |
- case AsmValueType::kAsmInt16Array: |
- case AsmValueType::kAsmUint16Array: |
- return 2; |
- case AsmValueType::kAsmInt32Array: |
- case AsmValueType::kAsmUint32Array: |
- case AsmValueType::kAsmFloat32Array: |
- return 4; |
- case AsmValueType::kAsmFloat64Array: |
- return 8; |
- default: |
- return AsmType::kNotHeapType; |
- } |
-} |
- |
-AsmType* AsmType::LoadType() { |
- auto* value = AsValueType(); |
- if (value == nullptr) { |
- return AsmType::None(); |
- } |
- switch (value->Bitset()) { |
- case AsmValueType::kAsmInt8Array: |
- case AsmValueType::kAsmUint8Array: |
- case AsmValueType::kAsmInt16Array: |
- case AsmValueType::kAsmUint16Array: |
- case AsmValueType::kAsmInt32Array: |
- case AsmValueType::kAsmUint32Array: |
- return AsmType::Intish(); |
- case AsmValueType::kAsmFloat32Array: |
- return AsmType::FloatQ(); |
- case AsmValueType::kAsmFloat64Array: |
- return AsmType::DoubleQ(); |
- default: |
- return AsmType::None(); |
- } |
-} |
- |
-AsmType* AsmType::StoreType() { |
- auto* value = AsValueType(); |
- if (value == nullptr) { |
- return AsmType::None(); |
- } |
- switch (value->Bitset()) { |
- case AsmValueType::kAsmInt8Array: |
- case AsmValueType::kAsmUint8Array: |
- case AsmValueType::kAsmInt16Array: |
- case AsmValueType::kAsmUint16Array: |
- case AsmValueType::kAsmInt32Array: |
- case AsmValueType::kAsmUint32Array: |
- return AsmType::Intish(); |
- case AsmValueType::kAsmFloat32Array: |
- return AsmType::FloatishDoubleQ(); |
- case AsmValueType::kAsmFloat64Array: |
- return AsmType::FloatQDoubleQ(); |
- default: |
- return AsmType::None(); |
- } |
-} |
- |
-std::string AsmFunctionType::Name() { |
- if (IsFroundType()) { |
- return "fround"; |
- } |
- |
- std::string ret; |
- ret += "("; |
- for (size_t ii = 0; ii < args_.size(); ++ii) { |
- ret += args_[ii]->Name(); |
- if (ii != args_.size() - 1) { |
- ret += ", "; |
- } |
- } |
- if (IsMinMaxType()) { |
- DCHECK_EQ(args_.size(), 2); |
- ret += "..."; |
- } |
- ret += ") -> "; |
- ret += return_type_->Name(); |
- return ret; |
-} |
- |
-namespace { |
-class AsmFroundType final : public AsmFunctionType { |
- public: |
- bool IsFroundType() const override { return true; } |
- |
- private: |
- friend AsmType; |
- |
- explicit AsmFroundType(Zone* zone) |
- : AsmFunctionType(zone, AsmType::Float()) {} |
- |
- AsmType* ValidateCall(AsmType* return_type, |
- const ZoneVector<AsmType*>& args) override; |
-}; |
-} // namespace |
- |
-AsmType* AsmType::FroundType(Zone* zone) { |
- auto* Fround = new (zone) AsmFroundType(zone); |
- return reinterpret_cast<AsmType*>(Fround); |
-} |
- |
-AsmType* AsmFroundType::ValidateCall(AsmType* return_type, |
- const ZoneVector<AsmType*>& args) { |
- if (args.size() != 1) { |
- return AsmType::None(); |
- } |
- |
- auto* arg = args[0]; |
- if (!arg->IsA(AsmType::Floatish()) && !arg->IsA(AsmType::DoubleQ()) && |
- !arg->IsA(AsmType::Signed()) && !arg->IsA(AsmType::Unsigned())) { |
- return AsmType::None(); |
- } |
- |
- return AsmType::Float(); |
-} |
- |
-namespace { |
-class AsmMinMaxType final : public AsmFunctionType { |
- public: |
- bool IsMinMaxType() const override { return true; } |
- |
- private: |
- friend AsmType; |
- |
- AsmMinMaxType(Zone* zone, AsmType* dest, AsmType* src) |
- : AsmFunctionType(zone, dest) { |
- AddArgument(src); |
- AddArgument(src); |
- } |
- |
- AsmType* ValidateCall(AsmType* return_type, |
- const ZoneVector<AsmType*>& args) override { |
- if (!ReturnType()->IsExactly(return_type)) { |
- return AsmType::None(); |
- } |
- |
- if (args.size() < 2) { |
- return AsmType::None(); |
- } |
- |
- for (size_t ii = 0; ii < Arguments().size(); ++ii) { |
- if (!Arguments()[0]->IsExactly(args[ii])) { |
- return AsmType::None(); |
- } |
- } |
- |
- return ReturnType(); |
- } |
-}; |
-} // namespace |
- |
-AsmType* AsmType::MinMaxType(Zone* zone, AsmType* dest, AsmType* src) { |
- DCHECK(dest->AsValueType() != nullptr); |
- DCHECK(src->AsValueType() != nullptr); |
- auto* MinMax = new (zone) AsmMinMaxType(zone, dest, src); |
- return reinterpret_cast<AsmType*>(MinMax); |
-} |
- |
-AsmType* AsmFFIType::ValidateCall(AsmType* return_type, |
- const ZoneVector<AsmType*>& args) { |
- for (size_t ii = 0; ii < args.size(); ++ii) { |
- if (!args[ii]->IsA(AsmType::Extern())) { |
- return AsmType::None(); |
- } |
- } |
- |
- return return_type; |
-} |
- |
-AsmType* AsmFunctionType::ValidateCall(AsmType* return_type, |
- const ZoneVector<AsmType*>& args) { |
- if (!return_type_->IsExactly(return_type)) { |
- return AsmType::None(); |
- } |
- |
- if (args_.size() != args.size()) { |
- return AsmType::None(); |
- } |
- |
- for (size_t ii = 0; ii < args_.size(); ++ii) { |
- if (!args_[ii]->IsExactly(args[ii])) { |
- return AsmType::None(); |
- } |
- } |
- |
- return return_type_; |
-} |
- |
-std::string AsmOverloadedFunctionType::Name() { |
- std::string ret; |
- |
- for (size_t ii = 0; ii < overloads_.size(); ++ii) { |
- if (ii != 0) { |
- ret += " /\\ "; |
- } |
- ret += overloads_[ii]->Name(); |
- } |
- |
- return ret; |
-} |
- |
-AsmType* AsmOverloadedFunctionType::ValidateCall( |
- AsmType* return_type, const ZoneVector<AsmType*>& args) { |
- for (size_t ii = 0; ii < overloads_.size(); ++ii) { |
- auto* validated_type = |
- overloads_[ii]->AsCallableType()->ValidateCall(return_type, args); |
- if (validated_type != AsmType::None()) { |
- return validated_type; |
- } |
- } |
- |
- return AsmType::None(); |
-} |
- |
-void AsmOverloadedFunctionType::AddOverload(AsmType* overload) { |
- DCHECK(overload->AsFunctionType() != nullptr); |
- overloads_.push_back(overload); |
-} |
- |
-AsmFunctionTableType::AsmFunctionTableType(size_t length, AsmType* signature) |
- : length_(length), signature_(signature) { |
- DCHECK(signature_ != nullptr); |
- DCHECK(signature_->AsFunctionType() != nullptr); |
-} |
- |
-std::string AsmFunctionTableType::Name() { |
- return signature_->Name() + "[" + std::to_string(length_) + "]"; |
-} |
- |
-AsmType* AsmFunctionTableType::ValidateCall(AsmType* return_type, |
- const ZoneVector<AsmType*>& args) { |
- return signature_->AsCallableType()->ValidateCall(return_type, args); |
-} |
- |
-} // namespace wasm |
-} // namespace internal |
-} // namespace v8 |