#include <metal_stdlib>

using namespace metal;
struct Uniforms {
  /* 0x0000 */ uint2 aShape;
  /* 0x0008 */ uint2 bShape;
  /* 0x0010 */ uint2 outShape;
};

struct Matrix {
  /* 0x0000 */ uint numbers[1];
};

void tint_symbol_inner(uint3 global_id, const constant Uniforms* const tint_symbol_1, const device Matrix* const tint_symbol_2, const device Matrix* const tint_symbol_3, device Matrix* const tint_symbol_4) {
  uint2 const resultCell = uint2(global_id[1], global_id[0]);
  uint const dimInner = (*(tint_symbol_1)).aShape[1];
  uint const dimOutter = (*(tint_symbol_1)).outShape[1];
  uint result = 0u;
  for(uint i = 0u; (i < dimInner); i = (i + 1u)) {
    uint const a = (i + (resultCell[0] * dimInner));
    uint const b = (resultCell[1] + (i * dimOutter));
    result = (result + ((*(tint_symbol_2)).numbers[a] * (*(tint_symbol_3)).numbers[b]));
  }
  uint const index = (resultCell[1] + (resultCell[0] * dimOutter));
  (*(tint_symbol_4)).numbers[index] = result;
}

kernel void tint_symbol(const constant Uniforms* tint_symbol_5 [[buffer(0)]], const device Matrix* tint_symbol_6 [[buffer(2)]], const device Matrix* tint_symbol_7 [[buffer(3)]], device Matrix* tint_symbol_8 [[buffer(1)]], uint3 global_id [[thread_position_in_grid]]) {
  tint_symbol_inner(global_id, tint_symbol_5, tint_symbol_6, tint_symbol_7, tint_symbol_8);
  return;
}

