#include <metal_stdlib>

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

void main_1(device S& x_6, device S& x_7, device S& x_8, device S& x_9, thread uint3* const tint_symbol_1) {
  uint const x_26 = (*(tint_symbol_1)).x;
  int const x_28 = x_6.field0[x_26];
  int const x_30 = x_7.field0[x_26];
  int const x_32 = x_8.field0[x_26];
  x_9.field0[x_26] = as_type<int>(clamp(as_type<uint>(x_28), as_type<uint>(x_30), as_type<uint>(x_32)));
  return;
}

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

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

