blob: 3e8bdf5035f7ee8914b87175f73b0d955aebba3b [file] [log] [blame]
Won Jeon2c34b462024-02-06 18:37:00 +00001// Copyright (c) 2023-2024, ARM Limited.
Tai Lya4d748b2023-03-28 22:06:56 +00002//
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#ifndef TOSA_REFERENCE_DTYPE_H
16#define TOSA_REFERENCE_DTYPE_H
17
18#include "model_common.h"
19#include "tosa_generated.h"
20#include <cstdint>
21
22using namespace tosa;
23
24namespace TosaReference
25{
26
27// Reference Model version of tosa.fbs enum DType
28// Plus a FP64 data type for precise mode.
29enum TOSA_REF_TYPE : uint32_t
30{
31 TOSA_REF_TYPE_UNKNOWN = 0,
32 TOSA_REF_TYPE_BOOL = 1,
33 TOSA_REF_TYPE_UINT8 = 2,
34 TOSA_REF_TYPE_INT4 = 3,
35 TOSA_REF_TYPE_INT8 = 4,
36 TOSA_REF_TYPE_INT16 = 5,
37 TOSA_REF_TYPE_INT32 = 6,
38 TOSA_REF_TYPE_INT48 = 7,
39 TOSA_REF_TYPE_FP32 = 8,
40 TOSA_REF_TYPE_UINT16 = 9,
41 TOSA_REF_TYPE_FP16 = 10,
42 TOSA_REF_TYPE_BF16 = 11,
Won Jeona21b2e82023-08-10 10:33:01 +000043 TOSA_REF_TYPE_SHAPE = 12,
Won Jeon2c34b462024-02-06 18:37:00 +000044 TOSA_REF_TYPE_FP8E4M3 = 13,
45 TOSA_REF_TYPE_FP8E5M2 = 14,
Tai Lya4d748b2023-03-28 22:06:56 +000046 TOSA_REF_TYPE_FP64 = 99, // FP64 is special: add new data types above
47};
48
49inline const char* EnumNameTOSAREFTYPE(TOSA_REF_TYPE e)
50{
51 switch (e)
52 {
53 case TOSA_REF_TYPE_UNKNOWN:
54 return EnumNameDType(DType_UNKNOWN);
55 case TOSA_REF_TYPE_BOOL:
56 return EnumNameDType(DType_BOOL);
57 case TOSA_REF_TYPE_UINT8:
58 return EnumNameDType(DType_UINT8);
59 case TOSA_REF_TYPE_INT4:
60 return EnumNameDType(DType_INT4);
61 case TOSA_REF_TYPE_INT8:
62 return EnumNameDType(DType_INT8);
63 case TOSA_REF_TYPE_INT16:
64 return EnumNameDType(DType_INT16);
65 case TOSA_REF_TYPE_INT32:
66 return EnumNameDType(DType_INT32);
67 case TOSA_REF_TYPE_INT48:
68 return EnumNameDType(DType_INT48);
69 case TOSA_REF_TYPE_FP32:
70 return EnumNameDType(DType_FP32);
71 case TOSA_REF_TYPE_UINT16:
72 return EnumNameDType(DType_UINT16);
73 case TOSA_REF_TYPE_FP16:
74 return EnumNameDType(DType_FP16);
75 case TOSA_REF_TYPE_BF16:
76 return EnumNameDType(DType_BF16);
Won Jeona21b2e82023-08-10 10:33:01 +000077 case TOSA_REF_TYPE_SHAPE:
78 return EnumNameDType(DType_SHAPE);
Won Jeon2c34b462024-02-06 18:37:00 +000079 case TOSA_REF_TYPE_FP8E4M3:
80 return EnumNameDType(DType_FP8E4M3);
81 case TOSA_REF_TYPE_FP8E5M2:
82 return EnumNameDType(DType_FP8E5M2);
Tai Lya4d748b2023-03-28 22:06:56 +000083 case TOSA_REF_TYPE_FP64:
84 return "FP64";
85 default:
86 assert(false);
Eric Kunzeedac6ab2023-06-28 13:29:38 -070087 return "ERROR";
Tai Lya4d748b2023-03-28 22:06:56 +000088 }
89}
90
91// return corresponding TOSA_REF_TYPE for DType
92inline TOSA_REF_TYPE ConvertDType(const DType dtype)
93{
Won Jeon2c34b462024-02-06 18:37:00 +000094 assert(DType_MAX == DType_FP8E5M2); // must update whenever DType_MAX changes
Tai Lya4d748b2023-03-28 22:06:56 +000095
96 if (g_func_config.precise_mode)
97 {
98 // in precise mode, convert all floating DType to TOSA_REF_TYPE_FP64
99 switch (dtype)
100 {
101 case DType_FP16:
102 case DType_FP32:
103 case DType_BF16:
Won Jeon2c34b462024-02-06 18:37:00 +0000104 case DType_FP8E4M3:
105 case DType_FP8E5M2:
Tai Lya4d748b2023-03-28 22:06:56 +0000106 return TOSA_REF_TYPE_FP64;
107 default:
108 break;
109 }
110 }
111
112 switch (dtype)
113 {
114 case DType_BOOL:
115 return TOSA_REF_TYPE_BOOL;
116 case DType_UINT8:
117 return TOSA_REF_TYPE_UINT8;
118 case DType_INT4:
119 return TOSA_REF_TYPE_INT4;
120 case DType_INT8:
121 return TOSA_REF_TYPE_INT8;
122 case DType_INT16:
123 return TOSA_REF_TYPE_INT16;
124 case DType_INT32:
125 return TOSA_REF_TYPE_INT32;
126 case DType_INT48:
127 return TOSA_REF_TYPE_INT48;
128 case DType_FP32:
129 return TOSA_REF_TYPE_FP32;
130 case DType_UINT16:
131 return TOSA_REF_TYPE_UINT16;
132 case DType_FP16:
133 return TOSA_REF_TYPE_FP16;
134 case DType_BF16:
135 return TOSA_REF_TYPE_BF16;
Won Jeona21b2e82023-08-10 10:33:01 +0000136 case DType_SHAPE:
137 return TOSA_REF_TYPE_SHAPE;
Won Jeon2c34b462024-02-06 18:37:00 +0000138 case DType_FP8E4M3:
139 return TOSA_REF_TYPE_FP8E4M3;
140 case DType_FP8E5M2:
141 return TOSA_REF_TYPE_FP8E5M2;
Tai Lya4d748b2023-03-28 22:06:56 +0000142 default:
143 break;
144 }
145 return TOSA_REF_TYPE_UNKNOWN;
146}
147
148}; // namespace TosaReference
149
150#endif