#include <metal_stdlib>

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

void main_1(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_6.field0[x_21];
  x_7.field0[x_21] = as_type<uint>(abs(as_type<int>(x_23)));
  return;
}

void tint_symbol_inner(device S& x_6, device S& x_7, uint3 x_3_param, thread uint3* const tint_symbol_2) {
  *(tint_symbol_2) = x_3_param;
  main_1(x_6, x_7, 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)]]) {
  thread uint3 tint_symbol_3 = 0u;
  tint_symbol_inner(x_6, x_7, x_3_param, &(tint_symbol_3));
  return;
}

