#include <metal_stdlib>

using namespace metal;
struct tint_symbol_6 {
  half2x4 w;
};

void tint_zero_workgroup_memory(uint local_idx, threadgroup half2x4* const tint_symbol) {
  if ((local_idx < 1u)) {
    *(tint_symbol) = half2x4(half4(0.0h), half4(0.0h));
  }
  threadgroup_barrier(mem_flags::mem_threadgroup);
}

void f_inner(uint local_invocation_index, threadgroup half2x4* const tint_symbol_1, const constant half2x4* const tint_symbol_2) {
  tint_zero_workgroup_memory(local_invocation_index, tint_symbol_1);
  *(tint_symbol_1) = *(tint_symbol_2);
  (*(tint_symbol_1))[1] = (*(tint_symbol_2))[0];
  (*(tint_symbol_1))[1] = (*(tint_symbol_2))[0].ywxz;
  (*(tint_symbol_1))[0][1] = (*(tint_symbol_2))[1][0];
}

kernel void f(const constant half2x4* tint_symbol_5 [[buffer(0)]], threadgroup tint_symbol_6* tint_symbol_4 [[threadgroup(0)]], uint local_invocation_index [[thread_index_in_threadgroup]]) {
  threadgroup half2x4* const tint_symbol_3 = &((*(tint_symbol_4)).w);
  f_inner(local_invocation_index, tint_symbol_3, tint_symbol_5);
  return;
}

