1 // Auto-generated file. Do not edit! 2 // Template: src/f32-qs8-vcvt/scalar-fmagic.c.in 3 // Generator: tools/xngen 4 // 5 // Copyright 2021 Google LLC 6 // 7 // This source code is licensed under the BSD-style license found in the 8 // LICENSE file in the root directory of this source tree. 9 10 #include <assert.h> 11 12 #include <xnnpack/common.h> 13 #include <xnnpack/math.h> 14 #include <xnnpack/vcvt.h> 15 16 #include <fp16.h> 17 18 xnn_f32_qu8_vcvt_ukernel__scalar_fmagic_x1(size_t n,const float * x,uint8_t * y,const union xnn_f32_qu8_cvt_params params[restrict XNN_MIN_ELEMENTS (1)])19void xnn_f32_qu8_vcvt_ukernel__scalar_fmagic_x1( 20 size_t n, 21 const float* x, 22 uint8_t* y, 23 const union xnn_f32_qu8_cvt_params params[restrict XNN_MIN_ELEMENTS(1)]) 24 { 25 assert(n != 0); 26 assert(n % sizeof(float) == 0); 27 assert(x != NULL); 28 assert(y != NULL); 29 30 const float vscale = params->scalar_fmagic.scale; 31 const float voutput_min_less_zero_point = params->scalar_fmagic.output_min_less_zero_point; 32 const float voutput_max_less_zero_point = params->scalar_fmagic.output_max_less_zero_point; 33 const float vmagic_bias = params->scalar_fmagic.magic_bias; 34 const int32_t vmagic_bias_less_zero_point = params->scalar_fmagic.magic_bias_less_zero_point; 35 36 do { 37 float vx = *x++; 38 vx *= vscale; 39 vx = math_max_f32(vx, voutput_min_less_zero_point); 40 vx = math_min_f32(vx, voutput_max_less_zero_point); 41 vx += vmagic_bias; 42 43 int32_t vy = (int32_t) fp32_to_bits(vx); 44 vy -= vmagic_bias_less_zero_point; 45 46 *y++ = (uint8_t) vy; 47 48 n -= sizeof(float); 49 } while (n != 0); 50 } 51