text: // Auto-generated file. Do not edit!
  //   Template: src/f32-vbinary/vopc-wasmsimd.c.in
  //   Generator: tools/xngen
  //
  // Copyright 2020 Google LLC
  //
  // This source code is licensed under the BSD-style license found in the
  // LICENSE file in the root directory of this source tree.
  
  #include <assert.h>
  
  #include <wasm_simd128.h>
  
  #include <xnnpack/common.h>
  #include <xnnpack/vbinary.h>
  
  
  void xnn_f32_vrsubc_minmax_ukernel__wasmsimd_x86_x4(
      size_t n,
      const float* a,
      const float* b,
      float* y,
      const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
  {
    assert(n != 0);
    assert(n % sizeof(float) == 0);
    assert(a != NULL);
    assert(b != NULL);
    assert(y != NULL);
  
    const v128_t vy_min = wasm_v128_load32_splat(&params->scalar.min);
    const v128_t vy_max = wasm_v128_load32_splat(&params->scalar.max);
    const v128_t vb = wasm_v128_load32_splat(b);
    for (; n >= 4 * sizeof(float); n -= 4 * sizeof(float)) {
      const v128_t va0123 = wasm_v128_load(a);
      a += 4;
  
      v128_t vy0123 = wasm_f32x4_sub(vb, va0123);
  
  
      vy0123 = wasm_f32x4_pmax(vy_min, vy0123);
  
      vy0123 = wasm_f32x4_pmin(vy_max, vy0123);
  
      wasm_v128_store(y, vy0123);
      y += 4;
    }
    if XNN_UNLIKELY(n != 0) {
      const v128_t va = wasm_v128_load(a);
  
      v128_t vy = wasm_f32x4_sub(vb, va);
  
      vy = wasm_f32x4_pmax(vy_min, vy);
      vy = wasm_f32x4_pmin(vy_max, vy);
  
      if (n & (2 * sizeof(float))) {
        *((double*) y) = wasm_f64x2_extract_lane(vy, 0);
        vy = wasm_v32x4_shuffle(vy, vy, 2, 3, 2, 3);
        y += 2;
      }
      if (n & (1 * sizeof(float))) {
        *y = wasm_f32x4_extract_lane(vy, 0);
      }
    }
  }
  