1 /*
2 * Copyright (c) 2023 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include "ecmascript/compiler/gate.h"
17 #include "ecmascript/compiler/mcr_gate_meta_data.h"
18 #include "ecmascript/compiler/gate_meta_data_builder.h"
19
20 namespace panda::ecmascript::kungfu {
IsTypedOperator() const21 bool GateMetaData::IsTypedOperator() const
22 {
23 return (opcode_ == OpCode::TYPED_BINARY_OP) || (opcode_ == OpCode::TYPE_CONVERT) ||
24 (opcode_ == OpCode::TYPED_UNARY_OP);
25 }
26
IsCheckWithTwoIns() const27 bool GateMetaData::IsCheckWithTwoIns() const
28 {
29 return (opcode_ == OpCode::OBJECT_TYPE_CHECK) ||
30 (opcode_ == OpCode::INDEX_CHECK) ||
31 (opcode_ == OpCode::TYPED_CALL_CHECK);
32 }
33
IsCheckWithOneIn() const34 bool GateMetaData::IsCheckWithOneIn() const
35 {
36 return (opcode_ == OpCode::PRIMITIVE_TYPE_CHECK) ||
37 (opcode_ == OpCode::HEAP_OBJECT_CHECK) ||
38 (opcode_ == OpCode::STABLE_ARRAY_CHECK) ||
39 (opcode_ == OpCode::TYPED_ARRAY_CHECK);
40 }
41
Str(TypedBinOp op)42 std::string GateMetaData::Str(TypedBinOp op)
43 {
44 const std::map<TypedBinOp, const char *> strMap = {
45 #define TYPED_BIN_OP_NAME_MAP(OP) { TypedBinOp::OP, #OP },
46 TYPED_BIN_OP_LIST(TYPED_BIN_OP_NAME_MAP)
47 #undef TYPED_BIN_OP_NAME_MAP
48 };
49 if (strMap.count(op) > 0) {
50 return strMap.at(op);
51 }
52 return "UNKNOW";
53 }
54
Str(TypedUnOp op)55 std::string GateMetaData::Str(TypedUnOp op)
56 {
57 const std::map<TypedUnOp, const char *> strMap = {
58 #define TYPED_UN_OP_NAME_MAP(OP) { TypedUnOp::OP, #OP },
59 TYPED_UN_OP_LIST(TYPED_UN_OP_NAME_MAP)
60 #undef TYPED_UN_OP_NAME_MAP
61 };
62 if (strMap.count(op) > 0) {
63 return strMap.at(op);
64 }
65 return "UNKNOW";
66 }
67
Str(TypedJumpOp op)68 std::string GateMetaData::Str(TypedJumpOp op)
69 {
70 const std::map<TypedJumpOp, const char *> strMap = {
71 #define TYPED_JUMP_OP_NAME_MAP(OP) { TypedJumpOp::OP, #OP },
72 TYPED_JUMP_OP_LIST(TYPED_JUMP_OP_NAME_MAP)
73 #undef TYPED_JUMP_OP_NAME_MAP
74 };
75 if (strMap.count(op) > 0) {
76 return strMap.at(op);
77 }
78 return "UNKNOW";
79 }
80
Str(TypedLoadOp op)81 std::string GateMetaData::Str(TypedLoadOp op)
82 {
83 const std::map<TypedLoadOp, const char *> strMap = {
84 #define TYPED_LOAD_OP_NAME_MAP(OP) { TypedLoadOp::OP, #OP },
85 TYPED_LOAD_OP_LIST(TYPED_LOAD_OP_NAME_MAP)
86 #undef TYPED_LOAD_OP_NAME_MAP
87 };
88 if (strMap.count(op) > 0) {
89 return strMap.at(op);
90 }
91 return "UNKNOW";
92 }
93
Str(TypedStoreOp op)94 std::string GateMetaData::Str(TypedStoreOp op)
95 {
96 const std::map<TypedStoreOp, const char *> strMap = {
97 #define TYPED_STORE_OP_NAME_MAP(OP) { TypedStoreOp::OP, #OP },
98 TYPED_STORE_OP_LIST(TYPED_STORE_OP_NAME_MAP)
99 #undef TYPED_STORE_OP_NAME_MAP
100 };
101 if (strMap.count(op) > 0) {
102 return strMap.at(op);
103 }
104 return "UNKNOW";
105 }
106
Str(TypedCallTargetCheckOp op)107 std::string GateMetaData::Str(TypedCallTargetCheckOp op)
108 {
109 const std::map<TypedCallTargetCheckOp, const char *> strMap = {
110 #define TYPED_CALL_TARGET_CHECK_OP_NAME_MAP(OP) { TypedCallTargetCheckOp::OP, #OP },
111 TYPED_CALL_TARGET_CHECK_OP_LIST(TYPED_CALL_TARGET_CHECK_OP_NAME_MAP)
112 #undef TYPED_CALL_TARGET_CHECK_OP_NAME_MAP
113 };
114 if (strMap.count(op) > 0) {
115 return strMap.at(op);
116 }
117 return "UNKNOW";
118 }
119
Str(ValueType type)120 std::string GateMetaData::Str(ValueType type)
121 {
122 const std::map<ValueType, const char *> strMap = {
123 #define VALUE_TYPE_NAME_MAP(TYPE) { ValueType::TYPE, #TYPE },
124 VALUE_TYPE_LIST(VALUE_TYPE_NAME_MAP)
125 #undef VALUE_TYPE_NAME_MAP
126 };
127 if (strMap.count(type) > 0) {
128 return strMap.at(type);
129 }
130 return "UNKNOW";
131 }
132 }
133