|  | #include <stdio.h> | 
|  | #include <stdlib.h> | 
|  | #include <stdint.h> | 
|  | #include "sys.h" | 
|  | #include "crisutils.h" | 
|  |  | 
|  | /* this would be better to do in asm, it's an orgy in GCC inline asm now.  */ | 
|  |  | 
|  | /* ACR will be clobbered.  */ | 
|  | #define cris_addoq(o, v) \ | 
|  | asm volatile ("addoq\t%1, %0, $acr\n" : : "r" (v), "i" (o) : "acr"); | 
|  |  | 
|  |  | 
|  | int main(void) | 
|  | { | 
|  | int x[3] = {0x55aa77ff, 0xccff2244, 0x88ccee19}; | 
|  | int *p, *t = x + 1; | 
|  |  | 
|  | cris_tst_cc_init(); | 
|  | asm volatile ("setf\tzvnc\n"); | 
|  | cris_addoq(0, t); | 
|  | cris_tst_cc(1, 1, 1, 1); | 
|  | asm volatile ("move.d\t$acr, %0\n" : "=r" (p)); | 
|  | if (*p != 0xccff2244) | 
|  | err(); | 
|  |  | 
|  | cris_tst_cc_init(); | 
|  | asm volatile ("setf\tzvnc\n"); | 
|  | cris_addoq(4, t); | 
|  | cris_tst_cc(1, 1, 1, 1); | 
|  | asm volatile ("move.d\t$acr, %0\n" : "=r" (p)); | 
|  | if (*p != 0x88ccee19) | 
|  | err(); | 
|  |  | 
|  | cris_tst_cc_init(); | 
|  | asm volatile ("clearf\tzvnc\n"); | 
|  | cris_addoq(-8, t + 1); | 
|  | cris_tst_cc(0, 0, 0, 0); | 
|  | asm volatile ("move.d\t$acr, %0\n" : "=r" (p)); | 
|  | if (*p != 0x55aa77ff) | 
|  | err(); | 
|  | pass(); | 
|  | return 0; | 
|  | } |