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 xnn_f32_qu8_vcvt_ukernel__wasm_fmagic_x1(size_t n,const float * x,uint8_t * y,const union xnn_f32_qu8_cvt_params params[restrict XNN_MIN_ELEMENTS (1)])17void xnn_f32_qu8_vcvt_ukernel__wasm_fmagic_x1( 18 size_t n, 19 const float* x, 20 uint8_t* y, 21 const union xnn_f32_qu8_cvt_params params[restrict XNN_MIN_ELEMENTS(1)]) 22 { 23 assert(n != 0); 24 assert(n % sizeof(float) == 0); 25 assert(x != NULL); 26 assert(y != NULL); 27 28 const float vscale = params->scalar_fmagic.scale; 29 const float voutput_min_less_zero_point = params->scalar_fmagic.output_min_less_zero_point; 30 const float voutput_max_less_zero_point = params->scalar_fmagic.output_max_less_zero_point; 31 const float vmagic_bias = params->scalar_fmagic.magic_bias; 32 const int32_t vmagic_bias_less_zero_point = params->scalar_fmagic.magic_bias_less_zero_point; 33 34 do { 35 float vx = *x++; 36 vx *= vscale; 37 vx = __builtin_wasm_max_f32(vx, voutput_min_less_zero_point); 38 vx = __builtin_wasm_min_f32(vx, voutput_max_less_zero_point); 39 vx += vmagic_bias; 40 41 int32_t vy = (int32_t) float_as_uint32(vx); 42 vy -= vmagic_bias_less_zero_point; 43 44 *y++ = (uint8_t) vy; 45 46 n -= sizeof(float); 47 } while (n != 0); 48 } 49