• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/**
2 * Copyright (c) 2021-2022 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// Autogenerated file -- DO NOT EDIT!
17
18namespace builtins {
19#include "intrinsics_can_encode.inl"
20
21// NOLINTNEXTLINE(readability-function-size)
22inline bool CanEncodeAmd64(IntrinsicId id)
23{
24    switch (id) {
25% Compiler::intrinsics.select {|intrinsic| intrinsic.codegen_arch.include? 'amd64'}.each do |intrinsic|
26        case IntrinsicId::<%= intrinsic.entrypoint_name %>:
27            return true;
28% end
29        default:
30            return false;
31    }
32}
33
34// NOLINTNEXTLINE(readability-function-size)
35inline bool CanEncodeArm64(IntrinsicId id)
36{
37    switch (id) {
38% Compiler::intrinsics.select {|intrinsic| intrinsic.codegen_arch.include? 'arm64'}.each do |intrinsic|
39        case IntrinsicId::<%= intrinsic.entrypoint_name %>:
40            return true;
41% end
42        default:
43            return false;
44    }
45}
46
47// NOLINTNEXTLINE(readability-function-size)
48inline bool CanEncodeArm32(IntrinsicId id)
49{
50    switch (id) {
51% Compiler::intrinsics.select {|intrinsic| intrinsic.codegen_arch.include? 'arm32'}.each do |intrinsic|
52        case IntrinsicId::<%= intrinsic.entrypoint_name %>:
53            return true;
54% end
55        default:
56            return false;
57    }
58}
59
60inline bool CheckRestrictions([[maybe_unused]] RuntimeInterface *runtime, IntrinsicId id, [[maybe_unused]] Arch arch)
61{
62    switch (id) {
63% Compiler::intrinsics.select {|intrinsic| intrinsic.respond_to? 'can_encode_func'}.each do |intrinsic|
64        case IntrinsicId::<%= intrinsic.entrypoint_name %>:
65            return <%= intrinsic.can_encode_func %>(runtime, arch);
66% end
67        default:
68            return true;
69    }
70}
71
72}  // namespace builtins
73
74inline bool EncodesBuiltin(RuntimeInterface *runtime, IntrinsicId id, Arch arch)
75{
76    if (!options.IsCompilerEncodeIntrinsics()) {
77        return false;
78    }
79    if (!builtins::CheckRestrictions(runtime, id, arch)) {
80        return false;
81    }
82    switch (arch) {
83        case Arch::AARCH64:
84            return builtins::CanEncodeArm64(id);
85        case Arch::AARCH32:
86            return builtins::CanEncodeArm32(id);
87        case Arch::X86_64:
88            return builtins::CanEncodeAmd64(id);
89        default:
90            UNREACHABLE();
91    }
92}
93
94inline bool EncodesBuiltin(RuntimeInterface *runtime, RuntimeInterface::IntrinsicId id, Arch arch)
95{
96    return EncodesBuiltin(runtime, static_cast<IntrinsicId>(id), arch);
97}
98