212{
213 assert(input != nullptr);
214 assert(output != nullptr);
215
218
219 switch (op_type)
220 {
222 if ((
input->data_type() == OperandType::FLOAT32))
223 {
224 _kernel = absFloat32;
225 }
226 else
227 {
228 throw std::runtime_error{"Abs: Unsupported data type"};
229 }
230 break;
233 break;
235 if ((
input->data_type() == OperandType::FLOAT32))
236 {
237 _kernel = cosFloat32;
238 }
239 else
240 {
241 throw std::runtime_error{"Cos: Unsupported data type"};
242 }
243 break;
245 if ((
input->data_type() == OperandType::QUANT_UINT8_ASYMM))
246 {
247 _kernel = dequantizeUint8;
248 }
249 else if ((
input->data_type() == OperandType::QUANT_INT8_ASYMM) ||
250 (
input->data_type() == OperandType::QUANT_INT8_SYMM))
251 {
252 _kernel = dequantizeInt8;
253 }
254 else if (
input->data_type() == OperandType::QUANT_INT16_SYMM)
255 {
256 _kernel = dequantizeInt16;
257 }
258 else
259 {
260 throw std::runtime_error{"Dequantize: Unsupported data type"};
261 }
262 break;
264 if ((
input->data_type() == OperandType::FLOAT32))
265 {
266 _kernel = expFloat32;
267 }
268 else
269 {
270 throw std::runtime_error{"Exp: Unsupported data type"};
271 }
272 break;
274 if ((
input->data_type() == OperandType::FLOAT32))
275 {
276 _kernel = erfFloat32;
277 }
278 else
279 {
280 throw std::runtime_error{"Exp: Unsupported data type"};
281 }
282 break;
284 if ((
input->data_type() == OperandType::FLOAT32))
285 {
286 _kernel = floorFloat32;
287 }
288 else
289 {
290 throw std::runtime_error{"Floor: Unsupported data type"};
291 }
292 break;
294 if ((
input->data_type() == OperandType::FLOAT32))
295 {
296 _kernel = logFloat32;
297 }
298 else
299 {
300 throw std::runtime_error{"Log: Unsupported data type"};
301 }
302 break;
304 if ((
input->data_type() == OperandType::BOOL8))
305 {
306 static_assert(sizeof(bool) == 1, "cpu backend supports bool type which is 1 byte");
307 _kernel = logicalNot;
308 }
309 else
310 {
311 throw std::runtime_error{"LogicalNot: Unsupported data type"};
312 }
313 break;
315 if ((
input->data_type() == OperandType::FLOAT32))
316 {
317 _kernel = neg<float>;
318 }
319 else if ((
input->data_type() == OperandType::INT64))
320 {
321 _kernel = neg<int64_t>;
322 }
323 else if ((
input->data_type() == OperandType::INT32))
324 {
325 _kernel = neg<int32_t>;
326 }
327 else
328 {
329 throw std::runtime_error{"Neg: Unsupported data type"};
330 }
331 break;
333 if ((
input->data_type() == OperandType::FLOAT32))
334 {
335 _kernel = roundFloat32;
336 }
337 else
338 {
339 throw std::runtime_error{"Round: Unsupported data type"};
340 }
341 break;
343 if ((
input->data_type() == OperandType::FLOAT32))
344 {
345 _kernel = rsqrtFloat32;
346 }
347 else
348 {
349 throw std::runtime_error{"RSqrt: Unsupported data type"};
350 }
351 break;
353 if ((
input->data_type() == OperandType::FLOAT32))
354 {
355 _kernel = sinFloat32;
356 }
357 else
358 {
359 throw std::runtime_error{"Sin: Unsupported data type"};
360 }
361 break;
363 if ((
input->data_type() == OperandType::FLOAT32))
364 {
365 _kernel = sqrtFloat32;
366 }
367 else
368 {
369 throw std::runtime_error{"Sqrt: Unsupported data type"};
370 }
371 break;
373 if ((
input->data_type() == OperandType::FLOAT32))
374 {
375 _kernel = squareFloat32;
376 }
377 else
378 {
379 throw std::runtime_error{"Square: Unsupported data type"};
380 }
381 break;
383 if (
input->data_type() == OperandType::FLOAT32)
384 {
385 _kernel = zerosLikeFloat32<float>;
386 }
387 else if (
input->data_type() == OperandType::INT32)
388 {
389 _kernel = zerosLikeFloat32<int32_t>;
390 }
391 else
392 {
393 throw std::runtime_error{"ZerosLike: Unsupported data type"};
394 }
395 break;
396 default:
397 throw std::runtime_error{"ElementwiseUnary: Unsupported ElementwiseUnary type"};
398 }
399}
T * cast(Object *)
Cast a generic object as a specific one.