#include <metal_stdlib>
using namespace metal;
struct tint_module_vars_struct {
  thread half4x3* m;
  device half4x3* out;
};

void tint_store_and_preserve_padding(device half4x3* const target, half4x3 value_param) {
  (*target)[0u] = value_param[0u];
  (*target)[1u] = value_param[1u];
  (*target)[2u] = value_param[2u];
  (*target)[3u] = value_param[3u];
}
kernel void f(device half4x3* out [[buffer(0)]]) {
  thread half4x3 m = half4x3(half3(0.0h, 1.0h, 2.0h), half3(3.0h, 4.0h, 5.0h), half3(6.0h, 7.0h, 8.0h), half3(9.0h, 10.0h, 11.0h));
  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.m=(&m), .out=out};
  tint_store_and_preserve_padding(tint_module_vars.out, half4x3((*tint_module_vars.m)));
}
