main.c 1.4 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
#include <test.h>

#if defined(__ARCH_RISCV64_NOOP) || defined(__ARCH_RISCV32_NOOP) || defined(__ARCH_RISCV64_XS)
# define RTC_ADDR     0x3800bff8
#endif

#define TESTDUP 100
#define FINALITERATION 8000

volatile int counter;

void loop(int n) {
    for (volatile int i = 0; i < n; i++) {
        counter += 1;
    }
}

uint64_t get_time() {
    return *(uint64_t *)(RTC_ADDR);
}

int main() {
    printf("Oracle BP test shall always pass\n");
    printf("Check perf counter for OracleBP correctness\n");
    
    for (int i = 0; i < TESTDUP; i++) {
        int a = get_time() % 10;
        switch (a)
        {
        case 0:
            loop(5);
            break;
        case 1:
            loop(10);
            break;
        case 2:
            loop(15);
            break;
        case 3:
            loop(20);
            break;
        case 4:
            loop(25);
            break;
        case 5:
            loop(30);
            break;
        case 6:
            loop(35);
            break;
        case 7:
            loop(40);
            break;
        case 8:
            loop(45);
            break;
        case 9:
            loop(50);
            break;
        default:
            printf("Should not reach here! Check your test environment\n");
            break;
        }
    }

    for (volatile int i = 0; i < FINALITERATION; i++) {
        counter += i;
    }

    return 0;
}