cachepc-qemu

Fork of AMDESE/qemu with changes for cachepc side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-qemu
Log | Files | Refs | Submodules | LICENSE | sfeed.txt

check_bound.c (2442B)


      1#include <stdio.h>
      2#include <stdlib.h>
      3#include <stdint.h>
      4#include "sys.h"
      5#include "crisutils.h"
      6
      7static always_inline int cris_bound_b(int v, int b)
      8{
      9	int r = v;
     10	asm ("bound.b\t%1, %0\n" : "+r" (r) : "ri" (b));
     11	return r;
     12}
     13
     14static always_inline int cris_bound_w(int v, int b)
     15{
     16	int r = v;
     17	asm ("bound.w\t%1, %0\n" : "+r" (r) : "ri" (b));
     18	return r;
     19}
     20
     21static always_inline int cris_bound_d(int v, int b)
     22{
     23	int r = v;
     24	asm ("bound.d\t%1, %0\n" : "+r" (r) : "ri" (b));
     25	return r;
     26}
     27
     28int main(void)
     29{
     30	int r;
     31
     32	cris_tst_cc_init();
     33	r = cris_bound_d(-1, 2);
     34	cris_tst_cc(0, 0, 0, 0);
     35	if (r != 2)
     36		err();
     37
     38	cris_tst_cc_init();
     39	r = cris_bound_d(2, 0xffffffff);
     40	cris_tst_cc(0, 0, 0, 0);
     41	if (r != 2)
     42		err();
     43
     44	cris_tst_cc_init();
     45	r = cris_bound_d(0xffff, 0xffff);
     46	cris_tst_cc(0, 0, 0, 0);
     47	if (r != 0xffff)
     48		err();
     49
     50	cris_tst_cc_init();
     51	r = cris_bound_d(-1, 0xffffffff);
     52	cris_tst_cc(1, 0, 0, 0);
     53	if (r != 0xffffffff)
     54		err();
     55
     56	cris_tst_cc_init();
     57	r = cris_bound_d(0x78134452, 0x5432f789);
     58	cris_tst_cc(0, 0, 0, 0);
     59	if (r != 0x5432f789)
     60		err();
     61
     62	cris_tst_cc_init();
     63	r = cris_bound_w(-1, 2);
     64	cris_tst_cc(0, 0, 0, 0);
     65	if (r != 2)
     66		err();
     67
     68	cris_tst_cc_init();
     69	r = cris_bound_w(-1, 0xffff);
     70	cris_tst_cc(0, 0, 0, 0);
     71	if (r != 0xffff)
     72		err();
     73
     74	cris_tst_cc_init();
     75	r = cris_bound_w(2, 0xffff);
     76	cris_tst_cc(0, 0, 0, 0);
     77	if (r != 2)
     78		err();
     79
     80	cris_tst_cc_init();
     81	r = cris_bound_w(0xfedaffff, 0xffff);
     82	cris_tst_cc(0, 0, 0, 0);
     83	if (r != 0xffff)
     84		err();
     85
     86	cris_tst_cc_init();
     87	r = cris_bound_w(0x78134452, 0xf789);
     88	cris_tst_cc(0, 0, 0, 0);
     89	if (r != 0xf789)
     90		err();
     91
     92	cris_tst_cc_init();
     93	r = cris_bound_b(-1, 2);
     94	cris_tst_cc(0, 0, 0, 0);
     95	if (r != 2)
     96		err();
     97
     98	cris_tst_cc_init();
     99	r = cris_bound_b(2, 0xff);
    100	cris_tst_cc(0, 0, 0, 0);
    101	if (r != 2)
    102		err();
    103
    104	cris_tst_cc_init();
    105	r = cris_bound_b(-1, 0xff);
    106	cris_tst_cc(0, 0, 0, 0);
    107	if (r != 0xff)
    108		err();
    109
    110	cris_tst_cc_init();
    111	r = cris_bound_b(0xff, 0xff);
    112	cris_tst_cc(0, 0, 0, 0);
    113	if (r != 0xff)
    114		err();
    115
    116	cris_tst_cc_init();
    117	r = cris_bound_b(0xfeda49ff, 0xff);
    118	cris_tst_cc(0, 0, 0, 0);
    119	if (r != 0xff)
    120		err();
    121
    122	cris_tst_cc_init();
    123	r = cris_bound_b(0x78134452, 0x89);
    124	cris_tst_cc(0, 0, 0, 0);
    125	if (r != 0x89)
    126		err();
    127
    128	cris_tst_cc_init();
    129	r = cris_bound_w(0x78134452, 0);
    130	cris_tst_cc(0, 1, 0, 0);
    131	if (r != 0)
    132		err();
    133
    134	cris_tst_cc_init();
    135	r = cris_bound_b(0xffff, -1);
    136	cris_tst_cc(0, 0, 0, 0);
    137	if (r != 0xff)
    138		err();
    139
    140	pass();
    141	return 0;
    142}