#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 mat) {
  strided_arr const tint_symbol = {.el=mat[0u]};
  strided_arr const tint_symbol_1 = {.el=mat[1u]};
  tint_array_wrapper const tint_symbol_2 = {.arr={tint_symbol, tint_symbol_1}};
  return tint_symbol_2;
}

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

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

