summaryrefslogtreecommitdiff
path: root/firmware/export/system.h
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/export/system.h')
-rw-r--r--firmware/export/system.h116
1 files changed, 4 insertions, 112 deletions
diff --git a/firmware/export/system.h b/firmware/export/system.h
index d5f1b4ba97..01d2f130d3 100644
--- a/firmware/export/system.h
+++ b/firmware/export/system.h
@@ -46,135 +46,27 @@
46#define nop \ 46#define nop \
47 asm volatile ("nop") 47 asm volatile ("nop")
48 48
49#define __set_mask_constant(mask,address) \ 49#define or_b(mask, address) \
50 asm \ 50 asm \
51 ("or.b\t%0,@(r0,gbr)" \ 51 ("or.b\t%0,@(r0,gbr)" \
52 : \ 52 : \
53 : /* %0 */ "I"((char)(mask)), \ 53 : /* %0 */ "I"((char)(mask)), \
54 /* %1 */ "z"(address-GBR)) 54 /* %1 */ "z"(address-GBR))
55 55
56#define __clear_mask_constant(mask,address) \ 56#define and_b(mask, address) \
57 asm \ 57 asm \
58 ("and.b\t%0,@(r0,gbr)" \ 58 ("and.b\t%0,@(r0,gbr)" \
59 : \ 59 : \
60 : /* %0 */ "I"((char)~(mask)), \ 60 : /* %0 */ "I"((char)(mask)), \
61 /* %1 */ "z"(address-GBR)) 61 /* %1 */ "z"(address-GBR))
62 62
63#define __toggle_mask_constant(mask,address) \ 63#define xor_b(mask, address) \
64 asm \ 64 asm \
65 ("xor.b\t%0,@(r0,gbr)" \ 65 ("xor.b\t%0,@(r0,gbr)" \
66 : \ 66 : \
67 : /* %0 */ "I"((char)(mask)), \ 67 : /* %0 */ "I"((char)(mask)), \
68 /* %1 */ "z"(address-GBR)) 68 /* %1 */ "z"(address-GBR))
69 69
70#define __test_mask_constant(mask,address) \
71 ({ \
72 int result; \
73 asm \
74 ("tst.b\t%1,@(r0,gbr)\n\tmovt\t%0" \
75 : "=r"(result) \
76 : "I"((char)(mask)),"z"(address-GBR)); \
77 result; \
78 })
79
80#define __set_bit_constant(bit,address) \
81 asm \
82 ("or.b\t%0,@(r0,gbr)" \
83 : \
84 : /* %0 */ "I"((char)(1<<(bit))), \
85 /* %1 */ "z"(address-GBR))
86
87#define __clear_bit_constant(bit,address) \
88 asm \
89 ("and.b\t%0,@(r0,gbr)" \
90 : \
91 : /* %0 */ "I"((char)~(1<<(bit))), \
92 /* %1 */ "z"(address-GBR))
93
94#define __toggle_bit_constant(bit,address) \
95 asm \
96 ("xor.b\t%0,@(r0,gbr)" \
97 : \
98 : /* %0 */ "I"((char)(1<<(bit))), \
99 /* %1 */ "z"(address-GBR))
100
101#define __test_bit_constant(bit,address) \
102 ({ \
103 int result; \
104 asm \
105 ("tst.b\t%1,@(r0,gbr)\n\tmovt\t%0" \
106 : "=r"(result) \
107 : "I"((char)(1<<(bit))),"z"(address-GBR)); \
108 result; \
109 })
110
111#define __set_mask(mask,address) /* FIXME */
112#define __test_mask(mask,address) 0 /* FIXME */
113#define __clear_mask(mask,address) /* FIXME */
114#define __toggle_mask(mask,address) /* FIXME */
115
116#define __set_bit(bit,address) /* FIXME */
117#define __test_bit(bit,address) 0 /* FIXME */
118#define __clear_bit(bit,address) /* FIXME */
119#define __toggle_bit(bit,address) /* FIXME */
120
121#define set_mask(mask,address) \
122 if (__builtin_constant_p (mask)) \
123 __set_mask_constant (mask,address); \
124 else \
125 __set_mask (mask,address)
126
127#define clear_mask(mask,address) \
128 if (__builtin_constant_p (mask)) \
129 __clear_mask_constant (mask,address); \
130 else \
131 __clear_mask (mask,address)
132
133#define toggle_mask(mask,address) \
134 if (__builtin_constant_p (mask)) \
135 __toggle_mask_constant (mask,address); \
136 else \
137 __toggle_mask (mask,address)
138
139#define test_mask(mask,address) \
140 ( \
141 (__builtin_constant_p (mask)) \
142 ? (int)__test_mask_constant (mask,address) \
143 : (int)__test_mask (mask,address) \
144 )
145
146
147#define set_bit(bit,address) \
148 if (__builtin_constant_p (bit)) \
149 __set_bit_constant (bit,address); \
150 else \
151 __set_bit (bit,address)
152
153#define clear_bit(bit,address) \
154 if (__builtin_constant_p (bit)) \
155 __clear_bit_constant (bit,address); \
156 else \
157 __clear_bit (bit,address)
158
159#define toggle_bit(bit,address) \
160 if (__builtin_constant_p (bit)) \
161 __toggle_bit_constant (bit,address); \
162 else \
163 __toggle_bit (bit,address)
164
165#define test_bit(bit,address) \
166 ( \
167 (__builtin_constant_p (bit)) \
168 ? (int)__test_bit_constant (bit,address) \
169 : (int)__test_bit (bit,address) \
170 )
171
172
173extern char __swap_bit[256];
174
175#define swap_bit(byte) \
176 __swap_bit[byte]
177
178#ifndef SIMULATOR 70#ifndef SIMULATOR
179 71
180static inline short SWAB16(short value) 72static inline short SWAB16(short value)