162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci#include <stdlib.h> 362306a36Sopenharmony_ci#include "../tests.h" 462306a36Sopenharmony_ci 562306a36Sopenharmony_ci#define BENCH_RUNS 999999 662306a36Sopenharmony_ci 762306a36Sopenharmony_cistatic volatile int cnt; 862306a36Sopenharmony_ci 962306a36Sopenharmony_cistatic void brstack_bar(void) { 1062306a36Sopenharmony_ci} /* return */ 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_cistatic void brstack_foo(void) { 1362306a36Sopenharmony_ci brstack_bar(); /* call */ 1462306a36Sopenharmony_ci} /* return */ 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_cistatic void brstack_bench(void) { 1762306a36Sopenharmony_ci void (*brstack_foo_ind)(void) = brstack_foo; 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_ci if ((cnt++) % 3) /* branch (cond) */ 2062306a36Sopenharmony_ci brstack_foo(); /* call */ 2162306a36Sopenharmony_ci brstack_bar(); /* call */ 2262306a36Sopenharmony_ci brstack_foo_ind(); /* call (ind) */ 2362306a36Sopenharmony_ci} 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_cistatic int brstack(int argc, const char **argv) 2662306a36Sopenharmony_ci{ 2762306a36Sopenharmony_ci int num_loops = BENCH_RUNS; 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ci if (argc > 0) 3062306a36Sopenharmony_ci num_loops = atoi(argv[0]); 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_ci while (1) { 3362306a36Sopenharmony_ci if ((cnt++) > num_loops) 3462306a36Sopenharmony_ci break; 3562306a36Sopenharmony_ci brstack_bench();/* call */ 3662306a36Sopenharmony_ci } /* branch (uncond) */ 3762306a36Sopenharmony_ci return 0; 3862306a36Sopenharmony_ci} 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_ciDEFINE_WORKLOAD(brstack); 41