#include <metal_stdlib>

using namespace metal;
int2 tint_insert_bits(int2 v, int2 n, uint offset, uint count) {
  uint const s = min(offset, 32u);
  uint const e = min(32u, (s + count));
  return insert_bits(v, n, s, (e - s));
}

void insertBits_fe6ba6() {
  int2 arg_0 = int2(1);
  int2 arg_1 = int2(1);
  uint arg_2 = 1u;
  uint arg_3 = 1u;
  int2 res = tint_insert_bits(arg_0, arg_1, arg_2, arg_3);
}

struct tint_symbol {
  float4 value [[position]];
};

float4 vertex_main_inner() {
  insertBits_fe6ba6();
  return float4(0.0f);
}

vertex tint_symbol vertex_main() {
  float4 const inner_result = vertex_main_inner();
  tint_symbol wrapper_result = {};
  wrapper_result.value = inner_result;
  return wrapper_result;
}

fragment void fragment_main() {
  insertBits_fe6ba6();
  return;
}

kernel void compute_main() {
  insertBits_fe6ba6();
  return;
}

