1 // Auto-generated file. Do not edit! 2 // Template: src/f32-qs8-vcvt/scalar-lrintf.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 #include <math.h> 12 13 #include <xnnpack/common.h> 14 #include <xnnpack/math.h> 15 #include <xnnpack/vcvt.h> 16 17 xnn_f32_qu8_vcvt_ukernel__scalar_lrintf_x1(size_t n,const float * x,uint8_t * y,const union xnn_f32_qu8_cvt_params params[restrict XNN_MIN_ELEMENTS (1)])18void xnn_f32_qu8_vcvt_ukernel__scalar_lrintf_x1( 19 size_t n, 20 const float* x, 21 uint8_t* y, 22 const union xnn_f32_qu8_cvt_params params[restrict XNN_MIN_ELEMENTS(1)]) 23 { 24 assert(n != 0); 25 assert(n % sizeof(float) == 0); 26 assert(x != NULL); 27 assert(y != NULL); 28 29 const float vscale = params->scalar_lrintf.scale; 30 const float voutput_min_less_zero_point = params->scalar_lrintf.output_min_less_zero_point; 31 const float voutput_max_less_zero_point = params->scalar_lrintf.output_max_less_zero_point; 32 const int32_t voutput_zero_point = params->scalar_lrintf.output_zero_point; 33 34 do { 35 float vx = *x++; 36 vx *= vscale; 37 vx = math_max_f32(vx, voutput_min_less_zero_point); 38 vx = math_min_f32(vx, voutput_max_less_zero_point); 39 40 int32_t vy = (int32_t) lrintf(vx); 41 vy += voutput_zero_point; 42 43 *y++ = (uint8_t) vy; 44 45 n -= sizeof(float); 46 } while (n != 0); 47 } 48