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

crisutils.h (1629B)


      1#ifndef CRISUTILS_H
      2#define CRISUTILS_H 1
      3
      4static char *tst_cc_loc = NULL;
      5
      6#define cris_tst_cc_init() \
      7do { tst_cc_loc = "test_cc failed at " CURRENT_LOCATION; } while(0)
      8
      9/* We need a real symbol to signal error.  */
     10void _err(void) {
     11	if (!tst_cc_loc)
     12		tst_cc_loc = "tst_cc_failed\n";
     13	_fail(tst_cc_loc);
     14}
     15
     16static always_inline void cris_tst_cc_n1(void)
     17{
     18	asm volatile ("bpl _err\n"
     19		      "nop\n");
     20}
     21static always_inline void cris_tst_cc_n0(void)
     22{
     23	asm volatile ("bmi _err\n"
     24		      "nop\n");
     25}
     26
     27static always_inline void cris_tst_cc_z1(void)
     28{
     29	asm volatile ("bne _err\n"
     30		      "nop\n");
     31}
     32static always_inline void cris_tst_cc_z0(void)
     33{
     34	asm volatile ("beq _err\n"
     35		      "nop\n");
     36}
     37static always_inline void cris_tst_cc_v1(void)
     38{
     39	asm volatile ("bvc _err\n"
     40		      "nop\n");
     41}
     42static always_inline void cris_tst_cc_v0(void)
     43{
     44	asm volatile ("bvs _err\n"
     45		      "nop\n");
     46}
     47
     48static always_inline void cris_tst_cc_c1(void)
     49{
     50	asm volatile ("bcc _err\n"
     51		      "nop\n");
     52}
     53static always_inline void cris_tst_cc_c0(void)
     54{
     55	asm volatile ("bcs _err\n"
     56		      "nop\n");
     57}
     58
     59static always_inline void cris_tst_mov_cc(int n, int z)
     60{
     61	if (n) cris_tst_cc_n1(); else cris_tst_cc_n0();
     62	if (z) cris_tst_cc_z1(); else cris_tst_cc_z0();
     63	asm volatile ("" : : "g" (_err));
     64}
     65
     66static always_inline void cris_tst_cc(const int n, const int z,
     67			       const int v, const int c)
     68{
     69	if (n) cris_tst_cc_n1(); else cris_tst_cc_n0();
     70	if (z) cris_tst_cc_z1(); else cris_tst_cc_z0();
     71	if (v) cris_tst_cc_v1(); else cris_tst_cc_v0();
     72	if (c) cris_tst_cc_c1(); else cris_tst_cc_c0();
     73	asm volatile ("" : : "g" (_err));
     74}
     75
     76#endif