File tree 7 files changed +352
-43
lines changed
docker/armv7-unknown-linux-gnueabihf
7 files changed +352
-43
lines changed Original file line number Diff line number Diff line change 1
- FROM ubuntu:18.04
1
+ FROM ubuntu:21.10
2
2
RUN apt-get update && apt-get install -y --no-install-recommends \
3
3
gcc \
4
+ g++ \
4
5
ca-certificates \
5
6
libc6-dev \
6
7
gcc-arm-linux-gnueabihf \
8
+ g++-arm-linux-gnueabihf \
7
9
libc6-dev-armhf-cross \
8
10
qemu-user \
9
11
make \
10
- file
12
+ file \
13
+ clang-13 \
14
+ lld
11
15
ENV CARGO_TARGET_ARMV7_UNKNOWN_LINUX_GNUEABIHF_LINKER=arm-linux-gnueabihf-gcc \
12
16
CARGO_TARGET_ARMV7_UNKNOWN_LINUX_GNUEABIHF_RUNNER="qemu-arm -L /usr/arm-linux-gnueabihf" \
13
17
OBJDUMP=arm-linux-gnueabihf-objdump
Original file line number Diff line number Diff line change @@ -37,6 +37,12 @@ case ${TARGET} in
37
37
mips-* | mipsel-* )
38
38
export RUSTFLAGS=" ${RUSTFLAGS} -C llvm-args=-fast-isel=false"
39
39
;;
40
+ # Some of our test dependencies use the deprecated `gcc` crates which is
41
+ # missing a fix from https://github.com/alexcrichton/cc-rs/pull/627. Apply
42
+ # the workaround manually here.
43
+ armv7-* eabihf | thumbv7-* eabihf)
44
+ export TARGET_CFLAGS=" -mfpu=vfpv3-d16"
45
+ ;;
40
46
esac
41
47
42
48
echo " RUSTFLAGS=${RUSTFLAGS} "
@@ -122,7 +128,10 @@ esac
122
128
123
129
if [ " ${TARGET} " = " aarch64-unknown-linux-gnu" ]; then
124
130
export CPPFLAGS=" -fuse-ld=lld -I/usr/aarch64-linux-gnu/include/ -I/usr/aarch64-linux-gnu/include/c++/9/aarch64-linux-gnu/"
125
- cargo run ${INTRINSIC_TEST} --release --bin intrinsic-test -- crates/intrinsic-test/acle/tools/intrinsic_db/advsimd.csv --runner " ${CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_RUNNER} " --cppcompiler " clang++-13" --skip crates/intrinsic-test/missing.txt
131
+ RUST_LOG=warn cargo run ${INTRINSIC_TEST} --release --bin intrinsic-test -- crates/intrinsic-test/acle/tools/intrinsic_db/advsimd.csv --runner " ${CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_RUNNER} " --cppcompiler " clang++-13" --skip crates/intrinsic-test/missing_aarch64.txt
132
+ elif [ " ${TARGET} " = " armv7-unknown-linux-gnueabihf" ]; then
133
+ export CPPFLAGS=" -fuse-ld=lld -I/usr/arm-linux-gnueabihf/include/ -I/usr/arm-linux-gnueabihf/include/c++/9/arm-linux-gnueabihf/"
134
+ RUST_LOG=warn cargo run ${INTRINSIC_TEST} --release --bin intrinsic-test -- crates/intrinsic-test/acle/tools/intrinsic_db/advsimd.csv --runner " ${CARGO_TARGET_ARMV7_UNKNOWN_LINUX_GNUEABIHF_RUNNER} " --cppcompiler " clang++-13" --skip crates/intrinsic-test/missing_arm.txt --a32
126
135
fi
127
136
128
137
if [ " $NORUN " != " 1" ] && [ " $NOSTD " != 1 ]; then
Original file line number Diff line number Diff line change @@ -12,6 +12,18 @@ vbfmlaltq_f32
12
12
vbfmlaltq_lane_f32
13
13
vbfmlaltq_laneq_f32
14
14
vbfmmlaq_f32
15
+ vsudot_laneq_s32
16
+ vsudot_lane_s32
17
+ vsudotq_laneq_s32
18
+ vsudotq_lane_s32
19
+ vusdot_laneq_s32
20
+ vusdot_lane_s32
21
+ vusdotq_laneq_s32
22
+ vusdotq_lane_s32
23
+ vusdotq_s32
24
+ vusdot_s32
25
+
26
+ # Implemented in Clang but missing from CSV
15
27
vcmla_f64
16
28
vcmla_lane_f64
17
29
vcmla_laneq_f64
@@ -32,16 +44,18 @@ vcmla_rot270_laneq_f64
32
44
vcmla_rot90_f64
33
45
vcmla_rot90_lane_f64
34
46
vcmla_rot90_laneq_f64
35
- vsudot_laneq_s32
36
- vsudot_lane_s32
37
- vsudotq_laneq_s32
38
- vsudotq_lane_s32
39
- vusdot_laneq_s32
40
- vusdot_lane_s32
41
- vusdotq_laneq_s32
42
- vusdotq_lane_s32
43
- vusdotq_s32
44
- vusdot_s32
47
+
48
+ # Implemented in Clang and stdarch but missing from CSV
49
+ vmov_n_p64
50
+ vmovq_n_p64
51
+ vreinterpret_f32_p64
52
+ vreinterpret_p64_s64
53
+ vreinterpretq_f32_p128
54
+ vreinterpretq_f32_p64
55
+ vreinterpretq_p128_p64
56
+ vreinterpretq_p64_p128
57
+ vtst_p16
58
+ vtstq_p16
45
59
46
60
# Missing from both Clang and stdarch
47
61
vrnd32x_f64
@@ -80,3 +94,17 @@ vsm3tt2bq_u32
80
94
vsm4ekeyq_u32
81
95
vsm4eq_u32
82
96
vusmmlaq_s32
97
+
98
+ # LLVM select error in debug builds
99
+ vqshlu_n_s16
100
+ vqshlu_n_s32
101
+ vqshlu_n_s64
102
+ vqshlu_n_s8
103
+ vqshlub_n_s8
104
+ vqshlud_n_s64
105
+ vqshluh_n_s16
106
+ vqshluq_n_s16
107
+ vqshluq_n_s32
108
+ vqshluq_n_s64
109
+ vqshluq_n_s8
110
+ vqshlus_n_s32
Original file line number Diff line number Diff line change
1
+ # Not implemented in stdarch yet
2
+ vbfdot_f32
3
+ vbfdot_lane_f32
4
+ vbfdot_laneq_f32
5
+ vbfdotq_f32
6
+ vbfdotq_lane_f32
7
+ vbfdotq_laneq_f32
8
+ vbfmlalbq_f32
9
+ vbfmlalbq_lane_f32
10
+ vbfmlalbq_laneq_f32
11
+ vbfmlaltq_f32
12
+ vbfmlaltq_lane_f32
13
+ vbfmlaltq_laneq_f32
14
+ vbfmmlaq_f32
15
+ vsudot_lane_s32
16
+ vsudotq_lane_s32
17
+ vusdot_lane_s32
18
+ vusdotq_lane_s32
19
+ vusdotq_s32
20
+ vusdot_s32
21
+
22
+ # Implemented in Clang and stdarch but missing from CSV
23
+ vtst_p16
24
+ vtstq_p16
25
+
26
+ # QEMU 6.0 doesn't support these instructions
27
+ vmmlaq_s32
28
+ vmmlaq_u32
29
+ vusmmlaq_s32
30
+
31
+ # Implemented in Clang and stdarch for A64 only even though CSV claims A32 support
32
+ __crc32d
33
+ __crc32cd
34
+ vaddq_p64
35
+ vbsl_p64
36
+ vbslq_p64
37
+ vceq_p64
38
+ vceqq_p64
39
+ vceqz_p64
40
+ vceqzq_p64
41
+ vcombine_p64
42
+ vcopy_lane_p64
43
+ vcopy_laneq_p64
44
+ vcopyq_lane_p64
45
+ vcopyq_laneq_p64
46
+ vcreate_p64
47
+ vdup_lane_p64
48
+ vdup_n_p64
49
+ vdupq_lane_p64
50
+ vdupq_n_p64
51
+ vext_p64
52
+ vextq_p64
53
+ vget_high_p64
54
+ vget_lane_p64
55
+ vget_low_p64
56
+ vgetq_lane_p64
57
+ vmovn_high_s16
58
+ vmovn_high_s32
59
+ vmovn_high_s64
60
+ vmovn_high_u16
61
+ vmovn_high_u32
62
+ vmovn_high_u64
63
+ vmull_high_p64
64
+ vmull_p64
65
+ vreinterpret_p16_p64
66
+ vreinterpret_p64_f32
67
+ vreinterpret_p64_p16
68
+ vreinterpret_p64_p8
69
+ vreinterpret_p64_s16
70
+ vreinterpret_p64_s32
71
+ vreinterpret_p64_s8
72
+ vreinterpret_p64_u16
73
+ vreinterpret_p64_u32
74
+ vreinterpret_p64_u64
75
+ vreinterpret_p64_u8
76
+ vreinterpret_p8_p64
77
+ vreinterpretq_f64_u64
78
+ vreinterpretq_p128_f32
79
+ vreinterpretq_p128_p16
80
+ vreinterpretq_p128_p8
81
+ vreinterpretq_p128_s16
82
+ vreinterpretq_p128_s32
83
+ vreinterpretq_p128_s64
84
+ vreinterpretq_p128_s8
85
+ vreinterpretq_p128_u16
86
+ vreinterpretq_p128_u32
87
+ vreinterpretq_p128_u64
88
+ vreinterpretq_p128_u8
89
+ vreinterpretq_p16_p64
90
+ vreinterpretq_p64_f32
91
+ vreinterpretq_p64_p16
92
+ vreinterpretq_p64_p8
93
+ vreinterpretq_p64_s16
94
+ vreinterpretq_p64_s32
95
+ vreinterpretq_p64_s64
96
+ vreinterpretq_p64_s8
97
+ vreinterpretq_p64_u16
98
+ vreinterpretq_p64_u32
99
+ vreinterpretq_p64_u64
100
+ vreinterpretq_p64_u8
101
+ vreinterpretq_p8_p64
102
+ vreinterpretq_s16_p64
103
+ vreinterpretq_s32_p64
104
+ vreinterpretq_s64_p64
105
+ vreinterpretq_s8_p64
106
+ vreinterpretq_u16_p64
107
+ vreinterpretq_u32_p64
108
+ vreinterpretq_u64_p64
109
+ vreinterpretq_u8_p64
110
+ vreinterpret_s16_p64
111
+ vreinterpret_s32_p64
112
+ vreinterpret_s64_p64
113
+ vreinterpret_s8_p64
114
+ vreinterpret_u16_p64
115
+ vreinterpret_u32_p64
116
+ vreinterpret_u64_p64
117
+ vreinterpret_u8_p64
118
+ vrndn_f64
119
+ vrndnq_f64
120
+ vset_lane_p64
121
+ vsetq_lane_p64
122
+ vsli_n_p64
123
+ vsliq_n_p64
124
+ vsri_n_p64
125
+ vsriq_n_p64
126
+ vtst_p64
127
+ vtstq_p64
128
+
129
+ # Present in Clang header but triggers an ICE due to lack of backend support.
130
+ vcmla_f32
131
+ vcmla_lane_f32
132
+ vcmla_laneq_f32
133
+ vcmla_rot180_f32
134
+ vcmla_rot180_lane_f32
135
+ vcmla_rot180_laneq_f32
136
+ vcmla_rot270_f32
137
+ vcmla_rot270_lane_f32
138
+ vcmla_rot270_laneq_f32
139
+ vcmla_rot90_f32
140
+ vcmla_rot90_lane_f32
141
+ vcmla_rot90_laneq_f32
142
+ vcmlaq_f32
143
+ vcmlaq_lane_f32
144
+ vcmlaq_laneq_f32
145
+ vcmlaq_rot180_f32
146
+ vcmlaq_rot180_lane_f32
147
+ vcmlaq_rot180_laneq_f32
148
+ vcmlaq_rot270_f32
149
+ vcmlaq_rot270_lane_f32
150
+ vcmlaq_rot270_laneq_f32
151
+ vcmlaq_rot90_f32
152
+ vcmlaq_rot90_lane_f32
153
+ vcmlaq_rot90_laneq_f32
154
+
155
+ # Implemented in stdarch for A64 only, Clang support both A32/A64
156
+ vadd_s64
157
+ vadd_u64
158
+ vcaddq_rot270_f32
159
+ vcaddq_rot90_f32
160
+ vcadd_rot270_f32
161
+ vcadd_rot90_f32
162
+ vcombine_f32
163
+ vcombine_p16
164
+ vcombine_p8
165
+ vcombine_s16
166
+ vcombine_s32
167
+ vcombine_s64
168
+ vcombine_s8
169
+ vcombine_u16
170
+ vcombine_u32
171
+ vcombine_u64
172
+ vcombine_u8
173
+ vcvtaq_s32_f32
174
+ vcvtaq_u32_f32
175
+ vcvta_s32_f32
176
+ vcvta_u32_f32
177
+ vcvtmq_s32_f32
178
+ vcvtmq_u32_f32
179
+ vcvtm_s32_f32
180
+ vcvtm_u32_f32
181
+ vcvtnq_s32_f32
182
+ vcvtnq_u32_f32
183
+ vcvtn_s32_f32
184
+ vcvtn_u32_f32
185
+ vcvtpq_s32_f32
186
+ vcvtpq_u32_f32
187
+ vcvtp_s32_f32
188
+ vcvtp_u32_f32
189
+ vdot_lane_s32
190
+ vdot_lane_u32
191
+ vdotq_lane_s32
192
+ vdotq_lane_u32
193
+ vdotq_s32
194
+ vdotq_u32
195
+ vdot_s32
196
+ vdot_u32
197
+ vqdmulh_lane_s16
198
+ vqdmulh_lane_s32
199
+ vqdmulhq_lane_s16
200
+ vqdmulhq_lane_s32
201
+ vrnda_f32
202
+ vrnda_f32
203
+ vrndaq_f32
204
+ vrndaq_f32
205
+ vrnd_f32
206
+ vrnd_f32
207
+ vrndi_f32
208
+ vrndi_f32
209
+ vrndiq_f32
210
+ vrndiq_f32
211
+ vrndm_f32
212
+ vrndm_f32
213
+ vrndmq_f32
214
+ vrndmq_f32
215
+ vrndns_f32
216
+ vrndp_f32
217
+ vrndpq_f32
218
+ vrndq_f32
219
+ vrndq_f32
220
+ vrndx_f32
221
+ vrndxq_f32
222
+
223
+ # LLVM select error in debug builds
224
+ vqrshrn_n_s16
225
+ vqrshrn_n_s32
226
+ vqrshrn_n_s64
227
+ vqrshrn_n_u16
228
+ vqrshrn_n_u32
229
+ vqrshrn_n_u64
230
+ vqrshrun_n_s16
231
+ vqrshrun_n_s32
232
+ vqrshrun_n_s64
233
+ vqshrn_n_s16
234
+ vqshrn_n_s32
235
+ vqshrn_n_s64
236
+ vqshrn_n_u16
237
+ vqshrn_n_u32
238
+ vqshrn_n_u64
239
+ vqshrun_n_s16
240
+ vqshrun_n_s32
241
+ vqshrun_n_s64
242
+ vrshrn_n_s16
243
+ vrshrn_n_s32
244
+ vrshrn_n_s64
245
+ vrshrn_n_u16
246
+ vrshrn_n_u32
247
+ vrshrn_n_u64
Original file line number Diff line number Diff line change @@ -82,11 +82,17 @@ impl Into<Intrinsic> for ACLEIntrinsicLine {
82
82
} )
83
83
. collect ( ) ;
84
84
let arguments = ArgumentList { args } ;
85
+ let a64_only = match & * self . supported_architectures {
86
+ "A64" => true ,
87
+ "v7/A32/A64" | "A32/A64" => false ,
88
+ _ => panic ! ( "Invalid supported architectures" ) ,
89
+ } ;
85
90
86
91
Intrinsic {
87
92
name : name. to_string ( ) ,
88
93
arguments,
89
94
results,
95
+ a64_only,
90
96
}
91
97
}
92
98
}
Original file line number Diff line number Diff line change @@ -13,6 +13,9 @@ pub struct Intrinsic {
13
13
14
14
/// The return type of this intrinsic.
15
15
pub results : IntrinsicType ,
16
+
17
+ /// Whether this intrinsic is only available on A64.
18
+ pub a64_only : bool ,
16
19
}
17
20
18
21
impl Intrinsic {
You can’t perform that action at this time.
0 commit comments