14514f5e3Sopenharmony_ci/*
24514f5e3Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd.
34514f5e3Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
44514f5e3Sopenharmony_ci * you may not use this file except in compliance with the License.
54514f5e3Sopenharmony_ci * You may obtain a copy of the License at
64514f5e3Sopenharmony_ci *
74514f5e3Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
84514f5e3Sopenharmony_ci *
94514f5e3Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
104514f5e3Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
114514f5e3Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
124514f5e3Sopenharmony_ci * See the License for the specific language governing permissions and
134514f5e3Sopenharmony_ci * limitations under the License.
144514f5e3Sopenharmony_ci */
154514f5e3Sopenharmony_ci
164514f5e3Sopenharmony_ci#ifndef ECMASCRIPT_COMPILER_LCR_OPCODE_H
174514f5e3Sopenharmony_ci#define ECMASCRIPT_COMPILER_LCR_OPCODE_H
184514f5e3Sopenharmony_ci
194514f5e3Sopenharmony_cinamespace panda::ecmascript::kungfu {
204514f5e3Sopenharmony_ci
214514f5e3Sopenharmony_ci#define LCR_BINARY_GATE_META_DATA_CACHE_LIST(V)                                                      \
224514f5e3Sopenharmony_ci    V(Add, ADD, GateFlags::NONE_FLAG, 0, 0, 2)                                                       \
234514f5e3Sopenharmony_ci    V(Sub, SUB, GateFlags::NONE_FLAG, 0, 0, 2)                                                       \
244514f5e3Sopenharmony_ci    V(Mul, MUL, GateFlags::NONE_FLAG, 0, 0, 2)                                                       \
254514f5e3Sopenharmony_ci    V(Exp, EXP, GateFlags::NONE_FLAG, 0, 0, 2)                                                       \
264514f5e3Sopenharmony_ci    V(Sdiv, SDIV, GateFlags::NONE_FLAG, 0, 0, 2)                                                     \
274514f5e3Sopenharmony_ci    V(Smod, SMOD, GateFlags::NONE_FLAG, 0, 0, 2)                                                     \
284514f5e3Sopenharmony_ci    V(Udiv, UDIV, GateFlags::NONE_FLAG, 0, 0, 2)                                                     \
294514f5e3Sopenharmony_ci    V(Umod, UMOD, GateFlags::NONE_FLAG, 0, 0, 2)                                                     \
304514f5e3Sopenharmony_ci    V(Fdiv, FDIV, GateFlags::NONE_FLAG, 0, 0, 2)                                                     \
314514f5e3Sopenharmony_ci    V(Fmod, FMOD, GateFlags::NONE_FLAG, 0, 0, 2)                                                     \
324514f5e3Sopenharmony_ci    V(And, AND, GateFlags::NONE_FLAG, 0, 0, 2)                                                       \
334514f5e3Sopenharmony_ci    V(Xor, XOR, GateFlags::NONE_FLAG, 0, 0, 2)                                                       \
344514f5e3Sopenharmony_ci    V(Or, OR, GateFlags::NONE_FLAG, 0, 0, 2)                                                         \
354514f5e3Sopenharmony_ci    V(Lsl, LSL, GateFlags::NONE_FLAG, 0, 0, 2)                                                       \
364514f5e3Sopenharmony_ci    V(Lsr, LSR, GateFlags::NONE_FLAG, 0, 0, 2)                                                       \
374514f5e3Sopenharmony_ci    V(Asr, ASR, GateFlags::NONE_FLAG, 0, 0, 2)                                                       \
384514f5e3Sopenharmony_ci    V(Sqrt, SQRT, GateFlags::NO_WRITE, 0, 0, 1)                                                      \
394514f5e3Sopenharmony_ci    V(Min, MIN, GateFlags::NO_WRITE, 0, 0, 2)                                                        \
404514f5e3Sopenharmony_ci    V(Max, MAX, GateFlags::NO_WRITE, 0, 0, 2)                                                        \
414514f5e3Sopenharmony_ci    V(AddWithOverflow, ADD_WITH_OVERFLOW, GateFlags::NONE_FLAG, 0, 0, 2)                             \
424514f5e3Sopenharmony_ci    V(SubWithOverflow, SUB_WITH_OVERFLOW, GateFlags::NONE_FLAG, 0, 0, 2)                             \
434514f5e3Sopenharmony_ci    V(MulWithOverflow, MUL_WITH_OVERFLOW, GateFlags::NONE_FLAG, 0, 0, 2)                             \
444514f5e3Sopenharmony_ci    V(ExtractValue, EXTRACT_VALUE, GateFlags::NONE_FLAG, 0, 0, 2)
454514f5e3Sopenharmony_ci
464514f5e3Sopenharmony_ci#define LCR_UNARY_GATE_META_DATA_CACHE_LIST(V)                                   \
474514f5e3Sopenharmony_ci    V(Zext, ZEXT, GateFlags::NONE_FLAG, 0, 0, 1)                                 \
484514f5e3Sopenharmony_ci    V(Sext, SEXT, GateFlags::NONE_FLAG, 0, 0, 1)                                 \
494514f5e3Sopenharmony_ci    V(DoubleTrunc, DOUBLE_TRUNC, GateFlags::NO_WRITE, 0, 0, 1)                   \
504514f5e3Sopenharmony_ci    V(Trunc, TRUNC, GateFlags::NONE_FLAG, 0, 0, 1)                               \
514514f5e3Sopenharmony_ci    V(Fext, FEXT, GateFlags::NONE_FLAG, 0, 0, 1)                                 \
524514f5e3Sopenharmony_ci    V(Ftrunc, FTRUNC, GateFlags::NONE_FLAG, 0, 0, 1)                             \
534514f5e3Sopenharmony_ci    V(Rev, REV, GateFlags::NONE_FLAG, 0, 0, 1)                                   \
544514f5e3Sopenharmony_ci    V(TaggedToInt64, TAGGED_TO_INT64, GateFlags::NONE_FLAG, 0, 0, 1)             \
554514f5e3Sopenharmony_ci    V(Int64ToTagged, INT64_TO_TAGGED, GateFlags::NONE_FLAG, 0, 0, 1)             \
564514f5e3Sopenharmony_ci    V(SignedIntToFloat, SIGNED_INT_TO_FLOAT, GateFlags::NONE_FLAG, 0, 0, 1)      \
574514f5e3Sopenharmony_ci    V(UnsignedIntToFloat, UNSIGNED_INT_TO_FLOAT, GateFlags::NONE_FLAG, 0, 0, 1)  \
584514f5e3Sopenharmony_ci    V(FloatToSignedInt, FLOAT_TO_SIGNED_INT, GateFlags::NONE_FLAG, 0, 0, 1)      \
594514f5e3Sopenharmony_ci    V(UnsignedFloatToInt, UNSIGNED_FLOAT_TO_INT, GateFlags::NONE_FLAG, 0, 0, 1)  \
604514f5e3Sopenharmony_ci    V(TruncFloatToInt64, TRUNC_FLOAT_TO_INT64, GateFlags::NONE_FLAG, 0, 0, 1)    \
614514f5e3Sopenharmony_ci    V(TruncFloatToInt32, TRUNC_FLOAT_TO_INT32, GateFlags::NONE_FLAG, 0, 0, 1)    \
624514f5e3Sopenharmony_ci    V(Bitcast, BITCAST, GateFlags::NONE_FLAG, 0, 0, 1)                           \
634514f5e3Sopenharmony_ci    V(Abs, ABS, GateFlags::NO_WRITE, 0, 0, 1)                                    \
644514f5e3Sopenharmony_ci    V(Clz32, CLZ32, GateFlags::NONE_FLAG, 0, 0, 1)                               \
654514f5e3Sopenharmony_ci    V(Ceil, CEIL, GateFlags::NO_WRITE, 0, 0, 1)                                  \
664514f5e3Sopenharmony_ci    V(Floor, FLOOR, GateFlags::NO_WRITE, 0, 0, 1)
674514f5e3Sopenharmony_ci
684514f5e3Sopenharmony_ci#define LCR_IMMUTABLE_META_DATA_CACHE_LIST(V)                                                   \
694514f5e3Sopenharmony_ci    V(ReadSp, READSP, GateFlags::NONE_FLAG, 0, 0, 0)                                            \
704514f5e3Sopenharmony_ci    LCR_BINARY_GATE_META_DATA_CACHE_LIST(V)                                                     \
714514f5e3Sopenharmony_ci    LCR_UNARY_GATE_META_DATA_CACHE_LIST(V)
724514f5e3Sopenharmony_ci
734514f5e3Sopenharmony_ci#define LCR_GATE_META_DATA_LIST_WITH_VALUE(V)                                           \
744514f5e3Sopenharmony_ci    V(Icmp, ICMP, GateFlags::NONE_FLAG, 0, 0, 2)                                        \
754514f5e3Sopenharmony_ci    V(Fcmp, FCMP, GateFlags::NONE_FLAG, 0, 0, 2)                                        \
764514f5e3Sopenharmony_ci    V(Load, LOAD, GateFlags::NO_WRITE, 0, 1, 1)                                         \
774514f5e3Sopenharmony_ci    V(Store, STORE, GateFlags::NONE_FLAG, 0, 1, 4)                                      \
784514f5e3Sopenharmony_ci    V(StoreWithoutBarrier, STORE_WITHOUT_BARRIER, GateFlags::NONE_FLAG, 0, 1, 2)        \
794514f5e3Sopenharmony_ci    V(Alloca, ALLOCA, GateFlags::NONE_FLAG, 0, 0, 0)
804514f5e3Sopenharmony_ci
814514f5e3Sopenharmony_ci#define LCR_GATE_META_DATA_LIST_WITH_ONE_PARAMETER(V)         \
824514f5e3Sopenharmony_ci    LCR_GATE_META_DATA_LIST_WITH_VALUE(V)
834514f5e3Sopenharmony_ci
844514f5e3Sopenharmony_ci}
854514f5e3Sopenharmony_ci
864514f5e3Sopenharmony_ci#endif  // ECMASCRIPT_COMPILER_LCR_OPCODE_H