#include <metal_stdlib>

using namespace metal;
struct S {
  /* 0x0000 */ uint field0[1];
};

void main_1(device S& x_5, device S& x_6, device S& x_7, thread uint3* const tint_symbol_1) {
  uint const x_21 = (*(tint_symbol_1)).x;
  uint const x_23 = x_5.field0[x_21];
  uint const x_25 = x_6.field0[x_21];
  x_7.field0[x_21] = select(0u, 1u, (as_type<int>(x_23) <= as_type<int>(x_25)));
  return;
}

void tint_symbol_inner(device S& x_5, device S& x_6, device S& x_7, uint3 x_2_param, thread uint3* const tint_symbol_2) {
  *(tint_symbol_2) = x_2_param;
  main_1(x_5, x_6, x_7, tint_symbol_2);
}

kernel void tint_symbol(uint3 x_2_param [[thread_position_in_grid]], device S& x_5 [[buffer(0)]], device S& x_6 [[buffer(1)]], device S& x_7 [[buffer(2)]]) {
  thread uint3 tint_symbol_3 = 0u;
  tint_symbol_inner(x_5, x_6, x_7, x_2_param, &(tint_symbol_3));
  return;
}

