diff options
Diffstat (limited to 'reference_model/src/ops/ewise_binary.cc')
-rw-r--r-- | reference_model/src/ops/ewise_binary.cc | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/reference_model/src/ops/ewise_binary.cc b/reference_model/src/ops/ewise_binary.cc index fc587f1..76cebeb 100644 --- a/reference_model/src/ops/ewise_binary.cc +++ b/reference_model/src/ops/ewise_binary.cc @@ -298,6 +298,27 @@ int OpBitwiseXor<Rank, Dtype>::register_fcn() } template <int Rank, DType Dtype> +int OpDiv<Rank, Dtype>::register_fcn() +{ + switch (InDtype) + { + case DType_INT32: + this->fcn = [this](InEigenType a, InEigenType b) -> OutEigenType { + ASSERT_MSG_NODE(b != 0, "OpDiv: divisor must be non-zero value"); + int64_t res_in_64 = static_cast<int64_t>(a) / b; + int64_t i32_max_in_64 = static_cast<int64_t>(std::numeric_limits<InEigenType>::max()); + ASSERT_MSG_NODE(a <= i32_max_in_64, "OpDiv: result not in i32 range"); + return static_cast<InEigenType>(res_in_64); + }; + break; + default: + FATAL_ERROR_NODE("unsupported DType %s", EnumNamesDType()[InDtype]); + } + + return 0; +} + +template <int Rank, DType Dtype> int OpLogicalAnd<Rank, Dtype>::register_fcn() { switch (Dtype) @@ -579,6 +600,8 @@ DEF_INSTANTIATE_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseXor, INT8); DEF_INSTANTIATE_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseXor, INT16); DEF_INSTANTIATE_RANK0_6_ONE_RANK_ONE_TYPE(OpBitwiseXor, INT32); +DEF_INSTANTIATE_RANK0_6_ONE_RANK_ONE_TYPE(OpDiv, INT32); + DEF_INSTANTIATE_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalAnd, BOOL); DEF_INSTANTIATE_RANK0_6_ONE_RANK_ONE_TYPE(OpLogicalLeftShift, INT8); |