/* This is an autogenerated file. Do not edit.  */

#include "defines.h"
#include "macros.h"
#include "args.h"

char
fun_test_returning_char (void)
{
  volatile_var++;
  return 64;
}

short
fun_test_returning_short (void)
{
  volatile_var++;
  return 65;
}

int
fun_test_returning_int (void)
{
  volatile_var++;
  return 66;
}

long
fun_test_returning_long (void)
{
  volatile_var++;
  return 67;
}

long long
fun_test_returning_long_long (void)
{
  volatile_var++;
  return 68;
}

float
fun_test_returning_float (void)
{
  volatile_var++;
  return 69;
}

double
fun_test_returning_double (void)
{
  volatile_var++;
  return 70;
}

long double
fun_test_returning_long_double (void)
{
  volatile_var++;
  return 71;
}

#define def_test_returning_type_xmm(fun, type, ret, reg) \
  { type var = WRAP_RET (fun) (); \
  assert (ret == (type) reg && ret == var); }
int
main (void)
{
  def_test_returning_type_xmm(fun_test_returning_char, char, 64, rax);
  def_test_returning_type_xmm(fun_test_returning_short, short, 65, rax);
  def_test_returning_type_xmm(fun_test_returning_int, int, 66, rax);
  def_test_returning_type_xmm(fun_test_returning_long, long, 67, rax);
  def_test_returning_type_xmm(fun_test_returning_long_long, long long, 68, rax);
  def_test_returning_type_xmm(fun_test_returning_float, float, 69, xmm_regs[0]._float[0]);
  def_test_returning_type_xmm(fun_test_returning_double, double, 70, xmm_regs[0]._double[0]);
  def_test_returning_type_xmm(fun_test_returning_long_double, long double, 71, x87_regs[0]._ldouble);
  return 0;
}
