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_x4(size_t batch,const int16_t * input,uint32_t * output)18void xnn_cs16_vsquareabs_ukernel__scalar_x4( 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 >= 4; batch -= 4) { 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 const int32_t vr3 = (int32_t) input[6]; 35 const int32_t vi3 = (int32_t) input[7]; 36 input += 4 * 2; 37 38 const uint32_t vrsquare0 = (uint32_t) (vr0 * vr0); 39 const uint32_t visquare0 = (uint32_t) (vi0 * vi0); 40 const uint32_t vrsquare1 = (uint32_t) (vr1 * vr1); 41 const uint32_t visquare1 = (uint32_t) (vi1 * vi1); 42 const uint32_t vrsquare2 = (uint32_t) (vr2 * vr2); 43 const uint32_t visquare2 = (uint32_t) (vi2 * vi2); 44 const uint32_t vrsquare3 = (uint32_t) (vr3 * vr3); 45 const uint32_t visquare3 = (uint32_t) (vi3 * vi3); 46 47 const uint32_t vout0 = vrsquare0 + visquare0; 48 const uint32_t vout1 = vrsquare1 + visquare1; 49 const uint32_t vout2 = vrsquare2 + visquare2; 50 const uint32_t vout3 = vrsquare3 + visquare3; 51 52 output[0] = vout0; 53 output[1] = vout1; 54 output[2] = vout2; 55 output[3] = vout3; 56 output += 4; 57 } 58 59 if XNN_UNLIKELY(batch != 0) { 60 do { 61 const int32_t vr = (int32_t) input[0]; 62 const int32_t vi = (int32_t) input[1]; 63 input += 2; 64 65 const uint32_t vrsquare = (uint32_t) (vr * vr); 66 const uint32_t visquare = (uint32_t) (vi * vi); 67 68 const uint32_t vout = vrsquare + visquare; 69 70 *output++ = vout; 71 } while (--batch != 0); 72 } 73 } 74