1*d4f6e58fSAlex Bennée #include <stdio.h> 2*d4f6e58fSAlex Bennée #include <stdlib.h> 3*d4f6e58fSAlex Bennée #include <stdint.h> 4*d4f6e58fSAlex Bennée #include "sys.h" 5*d4f6e58fSAlex Bennée #include "crisutils.h" 6*d4f6e58fSAlex Bennée 7*d4f6e58fSAlex Bennée static always_inline int cris_addc(int a, const int b) 8*d4f6e58fSAlex Bennée { 9*d4f6e58fSAlex Bennée asm ("addc\t%1, %0\n" : "+r" (a) : "r" (b)); 10*d4f6e58fSAlex Bennée return a; 11*d4f6e58fSAlex Bennée } 12*d4f6e58fSAlex Bennée 13*d4f6e58fSAlex Bennée #define verify_addc(a, b, res, n, z, v, c) \ 14*d4f6e58fSAlex Bennée { \ 15*d4f6e58fSAlex Bennée int r; \ 16*d4f6e58fSAlex Bennée r = cris_addc((a), (b)); \ 17*d4f6e58fSAlex Bennée cris_tst_cc((n), (z), (v), (c)); \ 18*d4f6e58fSAlex Bennée if (r != (res)) \ 19*d4f6e58fSAlex Bennée err(); \ 20*d4f6e58fSAlex Bennée } 21*d4f6e58fSAlex Bennée 22*d4f6e58fSAlex Bennée int main(void) 23*d4f6e58fSAlex Bennée { 24*d4f6e58fSAlex Bennée cris_tst_cc_init(); 25*d4f6e58fSAlex Bennée asm volatile ("clearf cz"); 26*d4f6e58fSAlex Bennée verify_addc(0, 0, 0, 0, 0, 0, 0); 27*d4f6e58fSAlex Bennée 28*d4f6e58fSAlex Bennée cris_tst_cc_init(); 29*d4f6e58fSAlex Bennée asm volatile ("setf z"); 30*d4f6e58fSAlex Bennée verify_addc(0, 0, 0, 0, 1, 0, 0); 31*d4f6e58fSAlex Bennée 32*d4f6e58fSAlex Bennée cris_tst_cc_init(); 33*d4f6e58fSAlex Bennée asm volatile ("setf cz"); 34*d4f6e58fSAlex Bennée verify_addc(0, 0, 1, 0, 0, 0, 0); 35*d4f6e58fSAlex Bennée cris_tst_cc_init(); 36*d4f6e58fSAlex Bennée asm volatile ("clearf c"); 37*d4f6e58fSAlex Bennée verify_addc(-1, 2, 1, 0, 0, 0, 1); 38*d4f6e58fSAlex Bennée 39*d4f6e58fSAlex Bennée cris_tst_cc_init(); 40*d4f6e58fSAlex Bennée asm volatile ("clearf nzv"); 41*d4f6e58fSAlex Bennée asm volatile ("setf c"); 42*d4f6e58fSAlex Bennée verify_addc(-1, 2, 2, 0, 0, 0, 1); 43*d4f6e58fSAlex Bennée 44*d4f6e58fSAlex Bennée cris_tst_cc_init(); 45*d4f6e58fSAlex Bennée asm volatile ("setf c"); 46*d4f6e58fSAlex Bennée verify_addc(0xffff, 0xffff, 0x1ffff, 0, 0, 0, 0); 47*d4f6e58fSAlex Bennée 48*d4f6e58fSAlex Bennée cris_tst_cc_init(); 49*d4f6e58fSAlex Bennée asm volatile ("clearf nzvc"); 50*d4f6e58fSAlex Bennée verify_addc(-1, -1, 0xfffffffe, 1, 0, 0, 1); 51*d4f6e58fSAlex Bennée 52*d4f6e58fSAlex Bennée cris_tst_cc_init(); 53*d4f6e58fSAlex Bennée asm volatile ("setf c"); 54*d4f6e58fSAlex Bennée verify_addc(0x78134452, 0x5432f789, 0xcc463bdc, 1, 0, 1, 0); 55*d4f6e58fSAlex Bennée 56*d4f6e58fSAlex Bennée pass(); 57*d4f6e58fSAlex Bennée return 0; 58*d4f6e58fSAlex Bennée } 59