blob: 51cb7da760792d0a6a48ddab9fb7b865ee9b1193 [file] [log] [blame]
/*
* Copyright 2020, Data61
* Commonwealth Scientific and Industrial Research Organisation (CSIRO)
* ABN 41 687 119 230.
*
* This software may be distributed and modified according to the terms of
* the BSD 2-Clause license. Note that NO WARRANTY is provided.
* See "LICENSE_BSD2.txt" for details.
*
* @TAG(DATA61_BSD)
*/
#pragma once
#include <autoconf.h>
#include <sel4bench/types.h>
#include <sel4/sel4.h>
#include <utils/util.h>
#define FASTFN inline __attribute__((always_inline))
#define SEL4BENCH_READ_CCNT(var) asm volatile("rdcycle %0" :"=r"(var));
#define SEL4BENCH_RESET_CCNT do {\
; \
} while(0)
#define SEL4BENCH_EVENT_EXECUTE_INSTRUCTION 0x00
#define SEL4BENCH_EVENT_CACHE_L1I_MISS 0xf0
#define SEL4BENCH_EVENT_CACHE_L1D_MISS 0xf1
#define SEL4BENCH_EVENT_TLB_L1I_MISS 0xf2
#define SEL4BENCH_EVENT_TLB_L1D_MISS 0xf3
#define SEL4BENCH_EVENT_BRANCH_MISPREDICT 0xf4
#define SEL4BENCH_EVENT_MEMORY_ACCESS 0xf5
#define CCNT_FORMAT "%"PRIu64
typedef uint64_t ccnt_t;
static FASTFN void sel4bench_init()
{
}
static FASTFN void sel4bench_destroy()
{
}
static FASTFN seL4_Word sel4bench_get_num_counters()
{
return 0;
}
static FASTFN ccnt_t sel4bench_get_cycle_count()
{
ccnt_t val;
return val;
}
/* Being declared FASTFN allows this function (once inlined) to cache miss; I
* think it's worthwhile in the general case, for performance reasons.
* moreover, it's small enough that it'll be suitably aligned most of the time
*/
static FASTFN ccnt_t sel4bench_get_counter(counter_t counter)
{
uint32_t val = 0;
return val;
}
/* This reader function is too complex to be inlined, so we force it to be
* cacheline-aligned in order to avoid icache misses with the counters off.
* (relevant note: GCC compiles this function to be exactly one ARMV7 cache
* line in size) however, the pointer dereference is overwhelmingly likely to
* produce a dcache miss, which will occur with the counters off
*/
static inline ccnt_t sel4bench_get_counters(counter_bitfield_t mask, ccnt_t *values)
{
return 0;
}
static FASTFN void sel4bench_set_count_event(counter_t counter, event_id_t event)
{
return;
}
static FASTFN void sel4bench_start_counters(counter_bitfield_t mask)
{
return;
}
static FASTFN void sel4bench_stop_counters(counter_bitfield_t mask)
{
return;
}
static FASTFN void sel4bench_reset_counters(void)
{
return;
}