1b1994897Sopenharmony_ci/**
2b1994897Sopenharmony_ci * Copyright (c) 2021-2022 Huawei Device Co., Ltd.
3b1994897Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4b1994897Sopenharmony_ci * you may not use this file except in compliance with the License.
5b1994897Sopenharmony_ci * You may obtain a copy of the License at
6b1994897Sopenharmony_ci *
7b1994897Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0
8b1994897Sopenharmony_ci *
9b1994897Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10b1994897Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11b1994897Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12b1994897Sopenharmony_ci * See the License for the specific language governing permissions and
13b1994897Sopenharmony_ci * limitations under the License.
14b1994897Sopenharmony_ci */
15b1994897Sopenharmony_ci
16b1994897Sopenharmony_ci<%= $HEADER %>
17b1994897Sopenharmony_ci
18b1994897Sopenharmony_ci// NOLINTNEXTLINE(cppcoreguidelines-macro-usage)
19b1994897Sopenharmony_ci#define OPCODE_LIST(DEF) \
20b1994897Sopenharmony_ci% IR::instructions.each do |inst|
21b1994897Sopenharmony_ci% flags = inst.flags.empty? ? ['none'] : inst.flags
22b1994897Sopenharmony_ci% flags << 'pseudo_dst' if !inst.operands.empty? && inst.operands.first.has('pseudo')
23b1994897Sopenharmony_ci% flags << 'no_dst' if inst.operands.empty? || !inst.operands.first.is_dst?
24b1994897Sopenharmony_ci    DEF( <%= inst.opcode.ljust(20) %>, <%= inst.base.ljust(20) %>, <%= flags.map{|x| x.upcase }.join('|') %> ) \
25b1994897Sopenharmony_ci% end
26b1994897Sopenharmony_ci
27b1994897Sopenharmony_ci// NOLINTNEXTLINE(cppcoreguidelines-macro-usage)
28b1994897Sopenharmony_ci#define OPCODE_CLASS_LIST(DEF)  \
29b1994897Sopenharmony_ci% IR::instructions.map { |x| x.base }.uniq.each do |base|
30b1994897Sopenharmony_ci    DEF(<%= base %>) \
31b1994897Sopenharmony_ci% end
32b1994897Sopenharmony_ci    DEF(DynamicInputsInst) \
33b1994897Sopenharmony_ci
34b1994897Sopenharmony_ci// NOLINTNEXTLINE(cppcoreguidelines-macro-usage)
35b1994897Sopenharmony_ci#define FLAGS_LIST(DEF) \
36b1994897Sopenharmony_ci% IR::flags.each_pair do |flag, v|
37b1994897Sopenharmony_ci    DEF(<%= flag.upcase %>) \
38b1994897Sopenharmony_ci% end
39b1994897Sopenharmony_ci
40b1994897Sopenharmony_ci#ifndef NDEBUG
41b1994897Sopenharmony_ci// NOLINTNEXTLINE(cppcoreguidelines-macro-usage)
42b1994897Sopenharmony_ci#define INST_MODES_LIST \
43b1994897Sopenharmony_ci% IR::instructions.each do |inst|
44b1994897Sopenharmony_ci    <%= inst.modes.map{|x| x.upcase }.join('|') %>, \
45b1994897Sopenharmony_ci% end
46b1994897Sopenharmony_ci
47b1994897Sopenharmony_ci// NOLINTNEXTLINE(cppcoreguidelines-macro-usage)
48b1994897Sopenharmony_ci#define MODES_LIST(DEF) \
49b1994897Sopenharmony_ci% IR::modes.each_pair do |mode, v|
50b1994897Sopenharmony_ci    DEF(<%= mode.upcase %>) \
51b1994897Sopenharmony_ci% end
52b1994897Sopenharmony_ci
53b1994897Sopenharmony_ci#endif
54