blob: 8a084c7e848db9b2be977a05ae61b13feb384d99 [file] [log] [blame]
Eric Kunzee5e26762020-10-13 16:11:07 -07001
Tai Lya4d748b2023-03-28 22:06:56 +00002// Copyright (c) 2020-2023, ARM Limited.
Eric Kunzee5e26762020-10-13 16:11:07 -07003//
4// Licensed under the Apache License, Version 2.0 (the "License");
5// you may not use this file except in compliance with the License.
6// You may obtain a copy of the License at
7//
8// http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13// See the License for the specific language governing permissions and
14// limitations under the License.
15
16#include "comparison.h"
17#include "arith_util.h"
18#include "quant_util.h"
19#include "template_types.h"
20
21using namespace TosaReference;
22using namespace Eigen;
23using namespace tosa;
24
Tai Lya4d748b2023-03-28 22:06:56 +000025template <int Rank, TOSA_REF_TYPE Dtype>
Eric Kunzee5e26762020-10-13 16:11:07 -070026int OpEqual<Rank, Dtype>::register_fcn()
27{
Jerry Gea793f462023-04-11 00:05:02 +000028 // Check Tosa Level
29 auto tosa_level = g_func_config.tosa_level;
30 LEVEL_CHECK(Rank <= tosa_level.MAX_RANK, "Rank should be smaller than or equal to MAX_RANK");
31
Eric Kunzee5e26762020-10-13 16:11:07 -070032 switch (Dtype)
33 {
Tai Lya4d748b2023-03-28 22:06:56 +000034 case TOSA_REF_TYPE_FP16:
35 case TOSA_REF_TYPE_BF16:
36 case TOSA_REF_TYPE_FP32:
37 case TOSA_REF_TYPE_INT32:
38 case TOSA_REF_TYPE_FP64:
Eric Kunzee5e26762020-10-13 16:11:07 -070039 this->fcn = [](InEigenType a, InEigenType b) -> OutEigenType { return a == b; };
40 break;
41 default:
Tai Lya4d748b2023-03-28 22:06:56 +000042 ERROR_IF(true, "unsupported TOSA_REF_TYPE %s", EnumNameTOSAREFTYPE(Dtype));
Eric Kunzee5e26762020-10-13 16:11:07 -070043 }
44
45 return 0;
46}
47
Tai Lya4d748b2023-03-28 22:06:56 +000048template <int Rank, TOSA_REF_TYPE Dtype>
Eric Kunzee5e26762020-10-13 16:11:07 -070049int OpGreater<Rank, Dtype>::register_fcn()
50{
Jerry Gea793f462023-04-11 00:05:02 +000051 // Check Tosa Level
52 auto tosa_level = g_func_config.tosa_level;
53 LEVEL_CHECK(Rank <= tosa_level.MAX_RANK, "Rank should be smaller than or equal to MAX_RANK");
54
Eric Kunzee5e26762020-10-13 16:11:07 -070055 switch (Dtype)
56 {
Tai Lya4d748b2023-03-28 22:06:56 +000057 case TOSA_REF_TYPE_FP16:
58 case TOSA_REF_TYPE_BF16:
59 case TOSA_REF_TYPE_FP32:
60 case TOSA_REF_TYPE_INT32:
61 case TOSA_REF_TYPE_FP64:
Eric Kunzee5e26762020-10-13 16:11:07 -070062 this->fcn = [](InEigenType a, InEigenType b) -> OutEigenType { return a > b; };
63 break;
64 default:
Tai Lya4d748b2023-03-28 22:06:56 +000065 ERROR_IF(true, "unsupported TOSA_REF_TYPE %s", EnumNameTOSAREFTYPE(Dtype));
Eric Kunzee5e26762020-10-13 16:11:07 -070066 }
67
68 return 0;
69}
70
Tai Lya4d748b2023-03-28 22:06:56 +000071template <int Rank, TOSA_REF_TYPE Dtype>
Eric Kunzee5e26762020-10-13 16:11:07 -070072int OpGreaterEqual<Rank, Dtype>::register_fcn()
73{
Jerry Gea793f462023-04-11 00:05:02 +000074 // Check Tosa Level
75 auto tosa_level = g_func_config.tosa_level;
76 LEVEL_CHECK(Rank <= tosa_level.MAX_RANK, "Rank should be smaller than or equal to MAX_RANK");
77
Eric Kunzee5e26762020-10-13 16:11:07 -070078 switch (Dtype)
79 {
Tai Lya4d748b2023-03-28 22:06:56 +000080 case TOSA_REF_TYPE_FP16:
81 case TOSA_REF_TYPE_BF16:
82 case TOSA_REF_TYPE_FP32:
83 case TOSA_REF_TYPE_INT32:
84 case TOSA_REF_TYPE_FP64:
Eric Kunzee5e26762020-10-13 16:11:07 -070085 this->fcn = [](InEigenType a, InEigenType b) -> OutEigenType { return a >= b; };
86 break;
87 default:
Tai Lya4d748b2023-03-28 22:06:56 +000088 ERROR_IF(true, "unsupported TOSA_REF_TYPE %s", EnumNameTOSAREFTYPE(Dtype));
Eric Kunzee5e26762020-10-13 16:11:07 -070089 }
90
91 return 0;
92}
93
94// template explicit instantiation
James Ward8b390432022-08-12 20:48:56 +010095DEF_INSTANTIATE_RANK0_6_ONE_RANK_ONE_TYPE(OpEqual, FP16);
James Ward24dbc422022-10-19 12:20:31 +010096DEF_INSTANTIATE_RANK0_6_ONE_RANK_ONE_TYPE(OpEqual, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +010097DEF_INSTANTIATE_RANK0_6_ONE_RANK_ONE_TYPE(OpEqual, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -070098DEF_INSTANTIATE_RANK0_6_ONE_RANK_ONE_TYPE(OpEqual, INT32);
Tai Lya4d748b2023-03-28 22:06:56 +000099DEF_INSTANTIATE_RANK0_6_ONE_RANK_ONE_TYPE(OpEqual, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700100
James Ward8b390432022-08-12 20:48:56 +0100101DEF_INSTANTIATE_RANK0_6_ONE_RANK_ONE_TYPE(OpGreater, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100102DEF_INSTANTIATE_RANK0_6_ONE_RANK_ONE_TYPE(OpGreater, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100103DEF_INSTANTIATE_RANK0_6_ONE_RANK_ONE_TYPE(OpGreater, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700104DEF_INSTANTIATE_RANK0_6_ONE_RANK_ONE_TYPE(OpGreater, INT32);
Tai Lya4d748b2023-03-28 22:06:56 +0000105DEF_INSTANTIATE_RANK0_6_ONE_RANK_ONE_TYPE(OpGreater, FP64);
Eric Kunzee5e26762020-10-13 16:11:07 -0700106
James Ward8b390432022-08-12 20:48:56 +0100107DEF_INSTANTIATE_RANK0_6_ONE_RANK_ONE_TYPE(OpGreaterEqual, FP16);
James Ward24dbc422022-10-19 12:20:31 +0100108DEF_INSTANTIATE_RANK0_6_ONE_RANK_ONE_TYPE(OpGreaterEqual, BF16);
Jeremy Johnsonbc2a3db2022-09-27 13:50:00 +0100109DEF_INSTANTIATE_RANK0_6_ONE_RANK_ONE_TYPE(OpGreaterEqual, FP32);
Eric Kunzee5e26762020-10-13 16:11:07 -0700110DEF_INSTANTIATE_RANK0_6_ONE_RANK_ONE_TYPE(OpGreaterEqual, INT32);
Tai Lya4d748b2023-03-28 22:06:56 +0000111DEF_INSTANTIATE_RANK0_6_ONE_RANK_ONE_TYPE(OpGreaterEqual, FP64);