intrinsics/gen/frexp/a2a617.wgsl:29:18 warning: use of deprecated intrinsic
  var res: f32 = frexp(1.0, &arg_1);
                 ^^^^^

#include <metal_stdlib>

using namespace metal;

float tint_frexp(float param_0, thread int* param_1) {
  int exp;
  float sig = frexp(param_0, exp);
  *param_1 = exp;
  return sig;
}

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

void frexp_a2a617(thread int* const tint_symbol_1) {
  float res = tint_frexp(1.0f, tint_symbol_1);
}

float4 vertex_main_inner(thread int* const tint_symbol_2) {
  frexp_a2a617(tint_symbol_2);
  return float4();
}

vertex tint_symbol vertex_main() {
  thread int tint_symbol_3 = 0;
  float4 const inner_result = vertex_main_inner(&(tint_symbol_3));
  tint_symbol wrapper_result = {};
  wrapper_result.value = inner_result;
  return wrapper_result;
}

fragment void fragment_main() {
  thread int tint_symbol_4 = 0;
  frexp_a2a617(&(tint_symbol_4));
  return;
}

kernel void compute_main() {
  thread int tint_symbol_5 = 0;
  frexp_a2a617(&(tint_symbol_5));
  return;
}

