check_moveq.c (936B)
1#include <stdio.h> 2#include <stdlib.h> 3#include <stdint.h> 4#include "sys.h" 5#include "crisutils.h" 6 7#define cris_moveq(dst, src) \ 8 asm volatile ("moveq %1, %0\n" : "=r" (dst) : "i" (src)); 9 10 11 12int main(void) 13{ 14 int t; 15 16 cris_tst_cc_init(); 17 asm volatile ("setf\tzvnc\n"); 18 cris_moveq(t, 10); 19 cris_tst_cc(1, 1, 1, 1); 20 if (t != 10) 21 err(); 22 23 /* make sure moveq doesn't clobber the zflag. */ 24 cris_tst_cc_init(); 25 asm volatile ("setf vnc\n"); 26 asm volatile ("clearf z\n"); 27 cris_moveq(t, 0); 28 cris_tst_cc(1, 0, 1, 1); 29 if (t != 0) 30 err(); 31 32 /* make sure moveq doesn't clobber the nflag. 33 Also check large immediates */ 34 cris_tst_cc_init(); 35 asm volatile ("setf zvc\n"); 36 asm volatile ("clearf n\n"); 37 cris_moveq(t, -31); 38 cris_tst_cc(0, 1, 1, 1); 39 if (t != -31) 40 err(); 41 42 cris_tst_cc_init(); 43 asm volatile ("setf nzvc\n"); 44 cris_moveq(t, 31); 45 cris_tst_cc(1, 1, 1, 1); 46 if (t != 31) 47 err(); 48 49 pass(); 50 return 0; 51}