#include <metal_stdlib>

using namespace metal;

struct frexp_result_vec2 {
  float2 sig;
  int2 exp;
};
frexp_result_vec2 tint_frexp(float2 param_0) {
  int2 exp;
  float2 sig = frexp(param_0, exp);
  return {sig, exp};
}

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

void frexp_db0637() {
  frexp_result_vec2 res = tint_frexp(float2());
}

vertex tint_symbol vertex_main() {
  frexp_db0637();
  tint_symbol const tint_symbol_1 = {.value=float4()};
  return tint_symbol_1;
}

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

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

