1 // Auto-generated file. Do not edit! 2 // Template: src/cs16-vsquareabs/scalar.c.in 3 // Generator: tools/xngen 4 // 5 // Copyright 2022 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 <stddef.h> 12 #include <stdint.h> 13 14 #include <xnnpack/math.h> 15 #include <xnnpack/vsquareabs.h> 16 17 xnn_cs16_vsquareabs_ukernel__scalar_x3(size_t batch,const int16_t * input,uint32_t * output)18void xnn_cs16_vsquareabs_ukernel__scalar_x3( 19 size_t batch, 20 const int16_t* input, 21 uint32_t* output) { 22 23 assert(batch != 0); 24 assert(input != NULL); 25 assert(output != NULL); 26 27 for (; batch >= 3; batch -= 3) { 28 const int32_t vr0 = (int32_t) input[0]; 29 const int32_t vi0 = (int32_t) input[1]; 30 const int32_t vr1 = (int32_t) input[2]; 31 const int32_t vi1 = (int32_t) input[3]; 32 const int32_t vr2 = (int32_t) input[4]; 33 const int32_t vi2 = (int32_t) input[5]; 34 input += 3 * 2; 35 36 const uint32_t vrsquare0 = (uint32_t) (vr0 * vr0); 37 const uint32_t visquare0 = (uint32_t) (vi0 * vi0); 38 const uint32_t vrsquare1 = (uint32_t) (vr1 * vr1); 39 const uint32_t visquare1 = (uint32_t) (vi1 * vi1); 40 const uint32_t vrsquare2 = (uint32_t) (vr2 * vr2); 41 const uint32_t visquare2 = (uint32_t) (vi2 * vi2); 42 43 const uint32_t vout0 = vrsquare0 + visquare0; 44 const uint32_t vout1 = vrsquare1 + visquare1; 45 const uint32_t vout2 = vrsquare2 + visquare2; 46 47 output[0] = vout0; 48 output[1] = vout1; 49 output[2] = vout2; 50 output += 3; 51 } 52 53 if XNN_UNLIKELY(batch != 0) { 54 do { 55 const int32_t vr = (int32_t) input[0]; 56 const int32_t vi = (int32_t) input[1]; 57 input += 2; 58 59 const uint32_t vrsquare = (uint32_t) (vr * vr); 60 const uint32_t visquare = (uint32_t) (vi * vi); 61 62 const uint32_t vout = vrsquare + visquare; 63 64 *output++ = vout; 65 } while (--batch != 0); 66 } 67 } 68