qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

crisutils.h (1629B)


      1 #ifndef CRISUTILS_H
      2 #define CRISUTILS_H 1
      3 
      4 static char *tst_cc_loc = NULL;
      5 
      6 #define cris_tst_cc_init() \
      7 do { tst_cc_loc = "test_cc failed at " CURRENT_LOCATION; } while(0)
      8 
      9 /* We need a real symbol to signal error.  */
     10 void _err(void) {
     11 	if (!tst_cc_loc)
     12 		tst_cc_loc = "tst_cc_failed\n";
     13 	_fail(tst_cc_loc);
     14 }
     15 
     16 static always_inline void cris_tst_cc_n1(void)
     17 {
     18 	asm volatile ("bpl _err\n"
     19 		      "nop\n");
     20 }
     21 static always_inline void cris_tst_cc_n0(void)
     22 {
     23 	asm volatile ("bmi _err\n"
     24 		      "nop\n");
     25 }
     26 
     27 static always_inline void cris_tst_cc_z1(void)
     28 {
     29 	asm volatile ("bne _err\n"
     30 		      "nop\n");
     31 }
     32 static always_inline void cris_tst_cc_z0(void)
     33 {
     34 	asm volatile ("beq _err\n"
     35 		      "nop\n");
     36 }
     37 static always_inline void cris_tst_cc_v1(void)
     38 {
     39 	asm volatile ("bvc _err\n"
     40 		      "nop\n");
     41 }
     42 static always_inline void cris_tst_cc_v0(void)
     43 {
     44 	asm volatile ("bvs _err\n"
     45 		      "nop\n");
     46 }
     47 
     48 static always_inline void cris_tst_cc_c1(void)
     49 {
     50 	asm volatile ("bcc _err\n"
     51 		      "nop\n");
     52 }
     53 static always_inline void cris_tst_cc_c0(void)
     54 {
     55 	asm volatile ("bcs _err\n"
     56 		      "nop\n");
     57 }
     58 
     59 static 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 
     66 static 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