check_addoq.c (965B)
1#include <stdio.h> 2#include <stdlib.h> 3#include <stdint.h> 4#include "sys.h" 5#include "crisutils.h" 6 7/* this would be better to do in asm, it's an orgy in GCC inline asm now. */ 8 9/* ACR will be clobbered. */ 10#define cris_addoq(o, v) \ 11 asm volatile ("addoq\t%1, %0, $acr\n" : : "r" (v), "i" (o) : "acr"); 12 13 14int main(void) 15{ 16 int x[3] = {0x55aa77ff, 0xccff2244, 0x88ccee19}; 17 int *p, *t = x + 1; 18 19 cris_tst_cc_init(); 20 asm volatile ("setf\tzvnc\n"); 21 cris_addoq(0, t); 22 cris_tst_cc(1, 1, 1, 1); 23 asm volatile ("move.d\t$acr, %0\n" : "=r" (p)); 24 if (*p != 0xccff2244) 25 err(); 26 27 cris_tst_cc_init(); 28 asm volatile ("setf\tzvnc\n"); 29 cris_addoq(4, t); 30 cris_tst_cc(0, 0, 0, 0); 31 asm volatile ("move.d\t$acr, %0\n" : "=r" (p)); 32 if (*p != 0x88ccee19) 33 err(); 34 35 cris_tst_cc_init(); 36 asm volatile ("clearf\tzvnc\n"); 37 cris_addoq(-8, t + 1); 38 cris_tst_cc(0, 0, 0, 0); 39 asm volatile ("move.d\t$acr, %0\n" : "=r" (p)); 40 if (*p != 0x55aa77ff) 41 err(); 42 pass(); 43 return 0; 44}