1*a104f0eaSNamhyung Kim /* SPDX-License-Identifier: GPL-2.0 */ 2*a104f0eaSNamhyung Kim #include <stdlib.h> 3*a104f0eaSNamhyung Kim #include "../tests.h" 4*a104f0eaSNamhyung Kim 5*a104f0eaSNamhyung Kim #define BENCH_RUNS 999999 6*a104f0eaSNamhyung Kim 7*a104f0eaSNamhyung Kim static volatile int cnt; 8*a104f0eaSNamhyung Kim brstack_bar(void)9*a104f0eaSNamhyung Kimstatic void brstack_bar(void) { 10*a104f0eaSNamhyung Kim } /* return */ 11*a104f0eaSNamhyung Kim brstack_foo(void)12*a104f0eaSNamhyung Kimstatic void brstack_foo(void) { 13*a104f0eaSNamhyung Kim brstack_bar(); /* call */ 14*a104f0eaSNamhyung Kim } /* return */ 15*a104f0eaSNamhyung Kim brstack_bench(void)16*a104f0eaSNamhyung Kimstatic void brstack_bench(void) { 17*a104f0eaSNamhyung Kim void (*brstack_foo_ind)(void) = brstack_foo; 18*a104f0eaSNamhyung Kim 19*a104f0eaSNamhyung Kim if ((cnt++) % 3) /* branch (cond) */ 20*a104f0eaSNamhyung Kim brstack_foo(); /* call */ 21*a104f0eaSNamhyung Kim brstack_bar(); /* call */ 22*a104f0eaSNamhyung Kim brstack_foo_ind(); /* call (ind) */ 23*a104f0eaSNamhyung Kim } 24*a104f0eaSNamhyung Kim brstack(int argc,const char ** argv)25*a104f0eaSNamhyung Kimstatic int brstack(int argc, const char **argv) 26*a104f0eaSNamhyung Kim { 27*a104f0eaSNamhyung Kim int num_loops = BENCH_RUNS; 28*a104f0eaSNamhyung Kim 29*a104f0eaSNamhyung Kim if (argc > 0) 30*a104f0eaSNamhyung Kim num_loops = atoi(argv[0]); 31*a104f0eaSNamhyung Kim 32*a104f0eaSNamhyung Kim while (1) { 33*a104f0eaSNamhyung Kim if ((cnt++) > num_loops) 34*a104f0eaSNamhyung Kim break; 35*a104f0eaSNamhyung Kim brstack_bench();/* call */ 36*a104f0eaSNamhyung Kim } /* branch (uncond) */ 37*a104f0eaSNamhyung Kim return 0; 38*a104f0eaSNamhyung Kim } 39*a104f0eaSNamhyung Kim 40*a104f0eaSNamhyung Kim DEFINE_WORKLOAD(brstack); 41