root / tests / cris / check_addoq.c @ dd43edf4
History | View | Annotate | Download (965 Bytes)
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 |
|
14 |
int 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(1, 1, 1, 1); |
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 |
} |