#include <metal_stdlib>
using namespace metal;

struct tint_immediate_data_struct {
  /* 0x0000 */ uint tint_non_constant_zero;
  /* 0x0004 */ array<int8_t, 2044> tint_pad;
  /* 0x0800 */ array<uint, 1> tint_storage_buffer_sizes;
};

struct tint_module_vars_struct {
  const device array<uchar, 1>* v;
  device uint4* out;
  const constant tint_immediate_data_struct* tint_immediate_data;
};

struct tint_array_lengths_struct {
  uint tint_array_length_0_0;
};
typedef array<uint4, 1> __attribute__((__may_alias__)) tint_aliased_array_vec4_u32;

fragment void v_1(const device array<uchar, 1>* v [[buffer(0)]], device uint4* out [[buffer(1)]], const constant tint_immediate_data_struct* tint_immediate_data [[buffer(30)]]) {
  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.v=v, .out=out, .tint_immediate_data=tint_immediate_data};
  uint const offset = 16u;
  uint const v_2 = (offset & 4294967280u);
  bool const v_3 = (tint_array_lengths_struct{.tint_array_length_0_0=(*tint_module_vars.tint_immediate_data).tint_storage_buffer_sizes[0u]}.tint_array_length_0_0 < addsat(v_2, 16u));
  const device tint_aliased_array_vec4_u32* const v_4 = reinterpret_cast<const device array<uint4, 1>*>(reinterpret_cast<const device char*>(tint_module_vars.v) + select(v_2, 0u, v_3));
  const device tint_aliased_array_vec4_u32* const p = v_4;
  (*tint_module_vars.out) = (*p)[min(0u, ((select(16u, 16u, v_3) / 16u) - 1u))];
}
