diff options
Diffstat (limited to 'firmware/export')
-rw-r--r-- | firmware/export/system.h | 116 |
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 | |||
173 | extern char __swap_bit[256]; | ||
174 | |||
175 | #define swap_bit(byte) \ | ||
176 | __swap_bit[byte] | ||
177 | |||
178 | #ifndef SIMULATOR | 70 | #ifndef SIMULATOR |
179 | 71 | ||
180 | static inline short SWAB16(short value) | 72 | static inline short SWAB16(short value) |