#include <metal_stdlib>

using namespace metal;

struct frexp_result_vec2_f16 {
  half2 sig;
  int2 exp;
};
frexp_result_vec2_f16 tint_frexp(half2 param_0) {
  frexp_result_vec2_f16 result;
  result.sig = frexp(param_0, result.exp);
  return result;
}

void frexp_5f47bf() {
  frexp_result_vec2_f16 res = tint_frexp(half2(0.0h));
}

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

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

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

