#include <metal_stdlib>

using namespace metal;
int2 tint_first_trailing_bit(int2 v) {
  uint2 x = uint2(v);
  uint2 const b16 = select(uint2(16u), uint2(0u), bool2((x & uint2(65535u))));
  x = (x >> b16);
  uint2 const b8 = select(uint2(8u), uint2(0u), bool2((x & uint2(255u))));
  x = (x >> b8);
  uint2 const b4 = select(uint2(4u), uint2(0u), bool2((x & uint2(15u))));
  x = (x >> b4);
  uint2 const b2 = select(uint2(2u), uint2(0u), bool2((x & uint2(3u))));
  x = (x >> b2);
  uint2 const b1 = select(uint2(1u), uint2(0u), bool2((x & uint2(1u))));
  uint2 const is_zero = select(uint2(0u), uint2(4294967295u), (x == uint2(0u)));
  return int2((((((b16 | b8) | b4) | b2) | b1) | is_zero));
}

void firstTrailingBit_50c072() {
  int2 res = tint_first_trailing_bit(int2(0));
}

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

float4 vertex_main_inner() {
  firstTrailingBit_50c072();
  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() {
  firstTrailingBit_50c072();
  return;
}

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

