• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /**
2  * Copyright 2022 Huawei Technologies Co., Ltd
3  *
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 
17 #include "nnacl/base/cast_base.h"
18 #include "nnacl/cast_base_simd.h"
19 
Int32ToFloat32(const int32_t * input,float * output,int number)20 void Int32ToFloat32(const int32_t *input, float *output, int number) {
21   int index = 0;
22 
23   SIMD_RUN_NO_SCALAR(Int32ToFloat32, index, input, output, number);
24 
25   for (; index < number; ++index) {
26     output[index] = (float)input[index];
27   }
28 }
29 
Float32ToInt32(const float * input,int32_t * output,int number)30 void Float32ToInt32(const float *input, int32_t *output, int number) {
31   int index = 0;
32 
33   SIMD_RUN_X86_NO_SCALAR(Float32ToInt32, index, input, output, number);
34 
35   for (; index < number; ++index) {
36     output[index] = (int32_t)input[index];
37   }
38 }
39 
BoolToFloat32(const bool * input,float * output,int number)40 void BoolToFloat32(const bool *input, float *output, int number) {
41   for (int i = 0; i < number; ++i) {
42     output[i] = (float)input[i];
43   }
44 }
45 
Uint8ToFloat32(const uint8_t * input,float * output,int number)46 void Uint8ToFloat32(const uint8_t *input, float *output, int number) {
47   for (int i = 0; i < number; ++i) {
48     output[i] = (float)input[i];
49   }
50 }
51 
52 void Int32ToFloat32(const int32_t *input, float *output, int number);
53 
Int64ToFloat32(const int64_t * input,float * output,int number)54 void Int64ToFloat32(const int64_t *input, float *output, int number) {
55   for (int i = 0; i < number; ++i) {
56     output[i] = (float)input[i];
57   }
58 }
59 
60 #ifdef ENABLE_FP16
Int64ToFp16(const int64_t * input,float16_t * output,int number)61 void Int64ToFp16(const int64_t *input, float16_t *output, int number) {
62   for (int i = 0; i < number; ++i) {
63     output[i] = (float16_t)input[i];
64   }
65 }
66 
Int32ToFp16(const int32_t * input,float16_t * output,int number)67 void Int32ToFp16(const int32_t *input, float16_t *output, int number) {
68   for (int i = 0; i < number; ++i) {
69     output[i] = (float16_t)input[i];
70   }
71 }
72 
BoolToFp16(const bool * input,float16_t * output,int number)73 void BoolToFp16(const bool *input, float16_t *output, int number) {
74   for (int i = 0; i < number; ++i) {
75     output[i] = (float16_t)input[i];
76   }
77 }
78 
Uint8ToFp16(const uint8_t * input,float16_t * output,int number)79 void Uint8ToFp16(const uint8_t *input, float16_t *output, int number) {
80   for (int i = 0; i < number; ++i) {
81     output[i] = (float16_t)input[i];
82   }
83 }
84 
Float32ToFp16(const float * input,float16_t * output,int number)85 void Float32ToFp16(const float *input, float16_t *output, int number) {
86   for (int i = 0; i < number; ++i) {
87     output[i] = (float16_t)(input[i]);
88   }
89 }
90 
Fp16ToFloat32(const float16_t * input,float * output,int number)91 void Fp16ToFloat32(const float16_t *input, float *output, int number) {
92   for (int i = 0; i < number; ++i) {
93     output[i] = (float)(input[i]);
94   }
95 }
96 #else
Fp16ToFloat32(const uint16_t * input,float * output,int number)97 void Fp16ToFloat32(const uint16_t *input, float *output, int number) {
98   for (int i = 0; i < number; ++i) {
99     output[i] = ShortToFloat32(input[i]);
100   }
101 }
102 
Float32ToFp16(const float * input,uint16_t * output,int number)103 void Float32ToFp16(const float *input, uint16_t *output, int number) {
104   for (int i = 0; i < number; ++i) {
105     output[i] = Float32ToShort(input[i]);
106   }
107 }
108 #endif
109 
110 void Float32ToInt32(const float *input, int32_t *output, int number);
111 
Float32ToInt64(const float * input,int64_t * output,int number)112 void Float32ToInt64(const float *input, int64_t *output, int number) {
113   for (int i = 0; i < number; ++i) {
114     output[i] = (int64_t)input[i];
115   }
116 }
117 
Int32ToInt64(const int32_t * input,int64_t * output,int number)118 void Int32ToInt64(const int32_t *input, int64_t *output, int number) {
119   for (int i = 0; i < number; ++i) {
120     output[i] = (int64_t)input[i];
121   }
122 }
123 
Int64ToInt32(const int64_t * input,int32_t * output,int number)124 void Int64ToInt32(const int64_t *input, int32_t *output, int number) {
125   for (int i = 0; i < number; ++i) {
126     output[i] = (int32_t)input[i];
127   }
128 }
129 
Float32ToInt16(const float * input,int16_t * output,int number)130 void Float32ToInt16(const float *input, int16_t *output, int number) {
131   for (int i = 0; i < number; ++i) {
132     output[i] = (int16_t)input[i];
133   }
134 }
135 
BoolToInt32(const bool * input,int32_t * output,int number)136 void BoolToInt32(const bool *input, int32_t *output, int number) {
137   for (int i = 0; i < number; ++i) {
138     if (input[i]) {
139       output[i] = 1;
140     } else {
141       output[i] = 0;
142     }
143   }
144 }
145 
Float32ToBool(const float * input,bool * output,int number)146 void Float32ToBool(const float *input, bool *output, int number) {
147   for (int i = 0; i < number; ++i) {
148     output[i] = (bool)input[i];
149   }
150 }
151 
Float32ToUint8(const float * input,uint8_t * output,int number)152 void Float32ToUint8(const float *input, uint8_t *output, int number) {
153   for (int i = 0; i < number; ++i) {
154     output[i] = (uint8_t)input[i];
155   }
156 }
157