#include <stdio.h>

#if defined(__arm__) || defined(__aarch64__) || defined (__mips__) || defined(__powerpc64__)
// Clang does not accept regparm attribute on these platforms.
// Fortunately, the default calling convention passes arguments in registers
// anyway.
#define REGPARM(N)
#else
#define REGPARM(N) __attribute__((regparm(N)))
#endif

struct bar {
  int m1;
  int m2;
};

void f1(int a, struct bar *b) __attribute__((noinline)) REGPARM(2);
void f1(int a, struct bar *b)
{
  b->m2 = b->m1 + a; // set breakpoint here
}

void f2(struct bar *b) __attribute__((noinline)) REGPARM(1);
void f2(struct bar *b)
{
  int c = b->m2;
  printf("%d\n", c); // set breakpoint here
}

float f3() __attribute__((noinline));
float f3() {
  return 3.14f;
}

int main()
{
  struct bar myBar = { 3, 4 };
  f1(2, &myBar);
  f2(&myBar);

  float f = f3();
  printf("%f\n", f); // set breakpoint here
  return 0;
}
