root/tools/perf/tests/workloads/brstack.c
/* SPDX-License-Identifier: GPL-2.0 */
#include <stdlib.h>
#include "../tests.h"

#define BENCH_RUNS 999999

static volatile int cnt;

static void brstack_bar(void) {
}                               /* return */

static void brstack_foo(void) {
        brstack_bar();          /* call */
}                               /* return */

static void brstack_bench(void) {
        void (*brstack_foo_ind)(void) = brstack_foo;

        if ((cnt++) % 3)        /* branch (cond) */
                brstack_foo();  /* call */
        brstack_bar();          /* call */
        brstack_foo_ind();      /* call (ind) */
}

static int brstack(int argc, const char **argv)
{
        int num_loops = BENCH_RUNS;

        if (argc > 0)
                num_loops = atoi(argv[0]);

        while (1) {
                if ((cnt++) > num_loops)
                        break;
                brstack_bench();/* call */
        }                       /* branch (uncond) */
        return 0;
}

DEFINE_WORKLOAD(brstack);