Skip to content

Commit 40f61c7

Browse files
japaricgnzlbg
authored andcommitted
add __breakpoint
this is an ARM compiler specific intrinsic which can be used to implement CMSIS's __BKPT intrinsic
1 parent e020398 commit 40f61c7

File tree

4 files changed

+299
-264
lines changed

4 files changed

+299
-264
lines changed

coresimd/arm/armclang.rs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
//! ARM compiler specific intrinsics
2+
//!
3+
//! # References
4+
//!
5+
//! - [ARM Compiler v 6.10 - armclang Reference Guide](https://developer.arm.com/docs/100067/0610)
6+
7+
/// This intrinsic inserts a BKPT instruction into the instruction stream generated by the compiler
8+
///
9+
/// It enables you to include a breakpoint instruction in your Rust code
10+
///
11+
/// `val` is a compile-time constant integer whose range is:
12+
///
13+
/// - `0...65535` if you are compiling source as A32 code.
14+
/// - `0...255` if you are compiling source as T32 code.
15+
///
16+
/// **NOTE** Due compiler limitations this function only supports the range `0...255` in A32 mode.
17+
// TODO support the extended range `0...65535` when compiling as A32 code (`cfg(not(target_feature =
18+
// "thumb-mode"))`). T32 mode (`cfg(target_feature = "thumb-mode")`) should continue to support the
19+
// range `0...255`.
20+
#[cfg_attr(test, assert_instr(bkpt))]
21+
#[inline(always)]
22+
#[rustc_args_required_const(0)]
23+
pub unsafe fn __breakpoint(val: i32) {
24+
macro_rules! call {
25+
($imm8:expr) => {
26+
asm!(concat!("BKPT ", stringify!($imm8)) : : : : "volatile")
27+
}
28+
}
29+
30+
constify_imm8!(val, call);
31+
}

coresimd/arm/mod.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@
77
//! [arm_dat]: https://developer.arm.com/technologies/neon/intrinsics
88
#![allow(non_camel_case_types)]
99

10+
mod armclang;
11+
12+
pub use self::armclang::*;
13+
1014
#[cfg(any(target_feature = "mclass", dox))]
1115
mod cmsis;
1216
#[cfg(any(target_feature = "mclass", dox))]

coresimd/macros.rs

Lines changed: 264 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,269 @@
11
//! Utility macros.
22
3+
macro_rules! constify_imm8 {
4+
($imm8:expr, $expand:ident) => {
5+
#[allow(overflowing_literals)]
6+
match ($imm8) & 0b1111_1111 {
7+
0 => $expand!(0),
8+
1 => $expand!(1),
9+
2 => $expand!(2),
10+
3 => $expand!(3),
11+
4 => $expand!(4),
12+
5 => $expand!(5),
13+
6 => $expand!(6),
14+
7 => $expand!(7),
15+
8 => $expand!(8),
16+
9 => $expand!(9),
17+
10 => $expand!(10),
18+
11 => $expand!(11),
19+
12 => $expand!(12),
20+
13 => $expand!(13),
21+
14 => $expand!(14),
22+
15 => $expand!(15),
23+
16 => $expand!(16),
24+
17 => $expand!(17),
25+
18 => $expand!(18),
26+
19 => $expand!(19),
27+
20 => $expand!(20),
28+
21 => $expand!(21),
29+
22 => $expand!(22),
30+
23 => $expand!(23),
31+
24 => $expand!(24),
32+
25 => $expand!(25),
33+
26 => $expand!(26),
34+
27 => $expand!(27),
35+
28 => $expand!(28),
36+
29 => $expand!(29),
37+
30 => $expand!(30),
38+
31 => $expand!(31),
39+
32 => $expand!(32),
40+
33 => $expand!(33),
41+
34 => $expand!(34),
42+
35 => $expand!(35),
43+
36 => $expand!(36),
44+
37 => $expand!(37),
45+
38 => $expand!(38),
46+
39 => $expand!(39),
47+
40 => $expand!(40),
48+
41 => $expand!(41),
49+
42 => $expand!(42),
50+
43 => $expand!(43),
51+
44 => $expand!(44),
52+
45 => $expand!(45),
53+
46 => $expand!(46),
54+
47 => $expand!(47),
55+
48 => $expand!(48),
56+
49 => $expand!(49),
57+
50 => $expand!(50),
58+
51 => $expand!(51),
59+
52 => $expand!(52),
60+
53 => $expand!(53),
61+
54 => $expand!(54),
62+
55 => $expand!(55),
63+
56 => $expand!(56),
64+
57 => $expand!(57),
65+
58 => $expand!(58),
66+
59 => $expand!(59),
67+
60 => $expand!(60),
68+
61 => $expand!(61),
69+
62 => $expand!(62),
70+
63 => $expand!(63),
71+
64 => $expand!(64),
72+
65 => $expand!(65),
73+
66 => $expand!(66),
74+
67 => $expand!(67),
75+
68 => $expand!(68),
76+
69 => $expand!(69),
77+
70 => $expand!(70),
78+
71 => $expand!(71),
79+
72 => $expand!(72),
80+
73 => $expand!(73),
81+
74 => $expand!(74),
82+
75 => $expand!(75),
83+
76 => $expand!(76),
84+
77 => $expand!(77),
85+
78 => $expand!(78),
86+
79 => $expand!(79),
87+
80 => $expand!(80),
88+
81 => $expand!(81),
89+
82 => $expand!(82),
90+
83 => $expand!(83),
91+
84 => $expand!(84),
92+
85 => $expand!(85),
93+
86 => $expand!(86),
94+
87 => $expand!(87),
95+
88 => $expand!(88),
96+
89 => $expand!(89),
97+
90 => $expand!(90),
98+
91 => $expand!(91),
99+
92 => $expand!(92),
100+
93 => $expand!(93),
101+
94 => $expand!(94),
102+
95 => $expand!(95),
103+
96 => $expand!(96),
104+
97 => $expand!(97),
105+
98 => $expand!(98),
106+
99 => $expand!(99),
107+
100 => $expand!(100),
108+
101 => $expand!(101),
109+
102 => $expand!(102),
110+
103 => $expand!(103),
111+
104 => $expand!(104),
112+
105 => $expand!(105),
113+
106 => $expand!(106),
114+
107 => $expand!(107),
115+
108 => $expand!(108),
116+
109 => $expand!(109),
117+
110 => $expand!(110),
118+
111 => $expand!(111),
119+
112 => $expand!(112),
120+
113 => $expand!(113),
121+
114 => $expand!(114),
122+
115 => $expand!(115),
123+
116 => $expand!(116),
124+
117 => $expand!(117),
125+
118 => $expand!(118),
126+
119 => $expand!(119),
127+
120 => $expand!(120),
128+
121 => $expand!(121),
129+
122 => $expand!(122),
130+
123 => $expand!(123),
131+
124 => $expand!(124),
132+
125 => $expand!(125),
133+
126 => $expand!(126),
134+
127 => $expand!(127),
135+
128 => $expand!(128),
136+
129 => $expand!(129),
137+
130 => $expand!(130),
138+
131 => $expand!(131),
139+
132 => $expand!(132),
140+
133 => $expand!(133),
141+
134 => $expand!(134),
142+
135 => $expand!(135),
143+
136 => $expand!(136),
144+
137 => $expand!(137),
145+
138 => $expand!(138),
146+
139 => $expand!(139),
147+
140 => $expand!(140),
148+
141 => $expand!(141),
149+
142 => $expand!(142),
150+
143 => $expand!(143),
151+
144 => $expand!(144),
152+
145 => $expand!(145),
153+
146 => $expand!(146),
154+
147 => $expand!(147),
155+
148 => $expand!(148),
156+
149 => $expand!(149),
157+
150 => $expand!(150),
158+
151 => $expand!(151),
159+
152 => $expand!(152),
160+
153 => $expand!(153),
161+
154 => $expand!(154),
162+
155 => $expand!(155),
163+
156 => $expand!(156),
164+
157 => $expand!(157),
165+
158 => $expand!(158),
166+
159 => $expand!(159),
167+
160 => $expand!(160),
168+
161 => $expand!(161),
169+
162 => $expand!(162),
170+
163 => $expand!(163),
171+
164 => $expand!(164),
172+
165 => $expand!(165),
173+
166 => $expand!(166),
174+
167 => $expand!(167),
175+
168 => $expand!(168),
176+
169 => $expand!(169),
177+
170 => $expand!(170),
178+
171 => $expand!(171),
179+
172 => $expand!(172),
180+
173 => $expand!(173),
181+
174 => $expand!(174),
182+
175 => $expand!(175),
183+
176 => $expand!(176),
184+
177 => $expand!(177),
185+
178 => $expand!(178),
186+
179 => $expand!(179),
187+
180 => $expand!(180),
188+
181 => $expand!(181),
189+
182 => $expand!(182),
190+
183 => $expand!(183),
191+
184 => $expand!(184),
192+
185 => $expand!(185),
193+
186 => $expand!(186),
194+
187 => $expand!(187),
195+
188 => $expand!(188),
196+
189 => $expand!(189),
197+
190 => $expand!(190),
198+
191 => $expand!(191),
199+
192 => $expand!(192),
200+
193 => $expand!(193),
201+
194 => $expand!(194),
202+
195 => $expand!(195),
203+
196 => $expand!(196),
204+
197 => $expand!(197),
205+
198 => $expand!(198),
206+
199 => $expand!(199),
207+
200 => $expand!(200),
208+
201 => $expand!(201),
209+
202 => $expand!(202),
210+
203 => $expand!(203),
211+
204 => $expand!(204),
212+
205 => $expand!(205),
213+
206 => $expand!(206),
214+
207 => $expand!(207),
215+
208 => $expand!(208),
216+
209 => $expand!(209),
217+
210 => $expand!(210),
218+
211 => $expand!(211),
219+
212 => $expand!(212),
220+
213 => $expand!(213),
221+
214 => $expand!(214),
222+
215 => $expand!(215),
223+
216 => $expand!(216),
224+
217 => $expand!(217),
225+
218 => $expand!(218),
226+
219 => $expand!(219),
227+
220 => $expand!(220),
228+
221 => $expand!(221),
229+
222 => $expand!(222),
230+
223 => $expand!(223),
231+
224 => $expand!(224),
232+
225 => $expand!(225),
233+
226 => $expand!(226),
234+
227 => $expand!(227),
235+
228 => $expand!(228),
236+
229 => $expand!(229),
237+
230 => $expand!(230),
238+
231 => $expand!(231),
239+
232 => $expand!(232),
240+
233 => $expand!(233),
241+
234 => $expand!(234),
242+
235 => $expand!(235),
243+
236 => $expand!(236),
244+
237 => $expand!(237),
245+
238 => $expand!(238),
246+
239 => $expand!(239),
247+
240 => $expand!(240),
248+
241 => $expand!(241),
249+
242 => $expand!(242),
250+
243 => $expand!(243),
251+
244 => $expand!(244),
252+
245 => $expand!(245),
253+
246 => $expand!(246),
254+
247 => $expand!(247),
255+
248 => $expand!(248),
256+
249 => $expand!(249),
257+
250 => $expand!(250),
258+
251 => $expand!(251),
259+
252 => $expand!(252),
260+
253 => $expand!(253),
261+
254 => $expand!(254),
262+
_ => $expand!(255),
263+
}
264+
};
265+
}
266+
3267
#[allow(unused)]
4268
macro_rules! types {
5269
($(

0 commit comments

Comments
 (0)