#include <metal_stdlib>

using namespace metal;
struct strided_arr {
  /* 0x0000 */ float2 el;
  /* 0x0008 */ int8_t tint_pad[8];
};

struct tint_array_wrapper {
  /* 0x0000 */ strided_arr arr[2];
};

struct SSBO {
  /* 0x0000 */ tint_array_wrapper m;
};

float2x2 arr_to_mat2x2_stride_16(tint_array_wrapper arr) {
  return float2x2(arr.arr[0u].el, arr.arr[1u].el);
}

tint_array_wrapper mat2x2_stride_16_to_arr(float2x2 m) {
  strided_arr const tint_symbol_1 = {.el=m[0u]};
  strided_arr const tint_symbol_2 = {.el=m[1u]};
  tint_array_wrapper const tint_symbol_3 = {.arr={tint_symbol_1, tint_symbol_2}};
  return tint_symbol_3;
}

void f_1(device SSBO* const tint_symbol_4) {
  float2x2 const x_15 = arr_to_mat2x2_stride_16((*(tint_symbol_4)).m);
  tint_array_wrapper const tint_symbol = mat2x2_stride_16_to_arr(x_15);
  (*(tint_symbol_4)).m = tint_symbol;
  return;
}

kernel void f(device SSBO* tint_symbol_5 [[buffer(0)]]) {
  f_1(tint_symbol_5);
  return;
}

