]>
Commit | Line | Data |
---|---|---|
cb9c377f PB |
1 | #ifndef CRISUTILS_H |
2 | #define CRISUTILS_H 1 | |
3 | ||
dd43edf4 TS |
4 | static char *tst_cc_loc = NULL; |
5 | ||
6 | #define cris_tst_cc_init() \ | |
7 | do { tst_cc_loc = "test_cc failed at " CURRENT_LOCATION; } while(0) | |
8 | ||
9 | /* We need a real symbol to signal error. */ | |
bd3a8454 | 10 | void _err(void) { |
dd43edf4 TS |
11 | if (!tst_cc_loc) |
12 | tst_cc_loc = "tst_cc_failed\n"; | |
13 | _fail(tst_cc_loc); | |
14 | } | |
15 | ||
4a6648f4 | 16 | static inline void cris_tst_cc_n1(void) |
dd43edf4 TS |
17 | { |
18 | asm volatile ("bpl _err\n" | |
19 | "nop\n"); | |
20 | } | |
4a6648f4 | 21 | static inline void cris_tst_cc_n0(void) |
dd43edf4 TS |
22 | { |
23 | asm volatile ("bmi _err\n" | |
24 | "nop\n"); | |
25 | } | |
26 | ||
4a6648f4 | 27 | static inline void cris_tst_cc_z1(void) |
dd43edf4 TS |
28 | { |
29 | asm volatile ("bne _err\n" | |
30 | "nop\n"); | |
31 | } | |
4a6648f4 | 32 | static inline void cris_tst_cc_z0(void) |
dd43edf4 TS |
33 | { |
34 | asm volatile ("beq _err\n" | |
35 | "nop\n"); | |
36 | } | |
4a6648f4 | 37 | static inline void cris_tst_cc_v1(void) |
dd43edf4 TS |
38 | { |
39 | asm volatile ("bvc _err\n" | |
40 | "nop\n"); | |
41 | } | |
4a6648f4 | 42 | static inline void cris_tst_cc_v0(void) |
dd43edf4 TS |
43 | { |
44 | asm volatile ("bvs _err\n" | |
45 | "nop\n"); | |
46 | } | |
47 | ||
4a6648f4 | 48 | static inline void cris_tst_cc_c1(void) |
dd43edf4 TS |
49 | { |
50 | asm volatile ("bcc _err\n" | |
51 | "nop\n"); | |
52 | } | |
4a6648f4 | 53 | static inline void cris_tst_cc_c0(void) |
dd43edf4 TS |
54 | { |
55 | asm volatile ("bcs _err\n" | |
56 | "nop\n"); | |
57 | } | |
58 | ||
4a6648f4 | 59 | static inline void cris_tst_mov_cc(int n, int z) |
dd43edf4 TS |
60 | { |
61 | if (n) cris_tst_cc_n1(); else cris_tst_cc_n0(); | |
62 | if (z) cris_tst_cc_z1(); else cris_tst_cc_z0(); | |
63 | asm volatile ("" : : "g" (_err)); | |
64 | } | |
65 | ||
4a6648f4 | 66 | static inline void cris_tst_cc(const int n, const int z, |
dd43edf4 TS |
67 | const int v, const int c) |
68 | { | |
69 | if (n) cris_tst_cc_n1(); else cris_tst_cc_n0(); | |
70 | if (z) cris_tst_cc_z1(); else cris_tst_cc_z0(); | |
71 | if (v) cris_tst_cc_v1(); else cris_tst_cc_v0(); | |
72 | if (c) cris_tst_cc_c1(); else cris_tst_cc_c0(); | |
73 | asm volatile ("" : : "g" (_err)); | |
74 | } | |
cb9c377f PB |
75 | |
76 | #endif |