#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_20 = (*(tint_symbol_1)).x;
  uint const x_22 = x_5.field0[x_20];
  uint const x_24 = x_6.field0[x_20];
  x_7.field0[x_20] = as_type<uint>((as_type<int>(x_22) / as_type<int>(x_24)));
  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;
}

