aboutsummaryrefslogtreecommitdiff
path: root/lite_translator/riscv64_to_x86_64/inline_intrinsic.h
diff options
context:
space:
mode:
Diffstat (limited to 'lite_translator/riscv64_to_x86_64/inline_intrinsic.h')
-rw-r--r--lite_translator/riscv64_to_x86_64/inline_intrinsic.h11
1 files changed, 11 insertions, 0 deletions
diff --git a/lite_translator/riscv64_to_x86_64/inline_intrinsic.h b/lite_translator/riscv64_to_x86_64/inline_intrinsic.h
index c870a048..fa930da1 100644
--- a/lite_translator/riscv64_to_x86_64/inline_intrinsic.h
+++ b/lite_translator/riscv64_to_x86_64/inline_intrinsic.h
@@ -373,6 +373,10 @@ class TryBindingBasedInlineIntrinsic {
Mov<std::tuple_element_t<arg_info.from, typename AsmCallInfo::InputArguments>>(
as_, as_.rcx, std::get<arg_info.from>(input_args_));
return std::tuple{};
+ } else if constexpr (RegisterClass::kAsRegister == 'a') {
+ Mov<std::tuple_element_t<arg_info.from, typename AsmCallInfo::InputArguments>>(
+ as_, as_.rax, std::get<arg_info.from>(input_args_));
+ return std::tuple{};
} else {
static_assert(std::is_same_v<Usage, intrinsics::bindings::UseDef>);
static_assert(!RegisterClass::kIsImplicitReg);
@@ -415,6 +419,13 @@ class TryBindingBasedInlineIntrinsic {
return std::tuple{result_};
}
}
+ } else if constexpr (arg_info.arg_type == ArgInfo::OUT_TMP_ARG) {
+ if constexpr (RegisterClass::kAsRegister == 'd') {
+ result_reg_ = as_.rdx;
+ return std::tuple{};
+ } else {
+ static_assert(kDependentValueFalse<arg_info.arg_type>);
+ }
} else if constexpr (arg_info.arg_type == ArgInfo::TMP_ARG) {
static_assert(std::is_same_v<Usage, intrinsics::bindings::Def> ||
std::is_same_v<Usage, intrinsics::bindings::DefEarlyClobber>);