@@ -16,13 +16,13 @@ you can use this crate to get those intrinsics and solve the linker errors. To
16
16
do that, add this crate somewhere in the dependency graph of the crate you are
17
17
building:
18
18
19
- ``` toml
19
+ ``` toml
20
20
# Cargo.toml
21
21
[dependencies ]
22
22
compiler_builtins = { git = " https://github.com/rust-lang/compiler-builtins" }
23
23
```
24
24
25
- ``` rust
25
+ ``` rust
26
26
extern crate compiler_builtins;
27
27
28
28
// ...
@@ -57,7 +57,7 @@ features = ["c"]
57
57
5 . Add the intrinsic to ` examples/intrinsics.rs ` to verify it can be linked on
58
58
all targets.
59
59
6 . Send a Pull Request (PR).
60
- 7 . Once the PR passes our extensive [ testing infrastructure] [ 4 ] , we'll merge it!
60
+ 7 . Once the PR passes our extensive testing infrastructure, we'll merge it!
61
61
8 . Celebrate :tada :
62
62
63
63
[ 1 ] : https://github.com/rust-lang/llvm-project/tree/9e3de9490ff580cd484fbfa2908292b4838d56e7/compiler-rt/test/builtins/Unit
@@ -91,7 +91,7 @@ obtained with the following:
91
91
``` sh
92
92
curl -L -o rustc-llvm-18.0.tar.gz https://github.com/rust-lang/llvm-project/archive/rustc/18.0-2024-02-13.tar.gz
93
93
tar xzf rustc-llvm-18.0.tar.gz --strip-components 1 llvm-project-rustc-18.0-2024-02-13/compiler-rt
94
- ````
94
+ ```
95
95
96
96
Local targets may also be tested with ` ./ci/run.sh [target] ` .
97
97
@@ -100,9 +100,11 @@ rely on CI.
100
100
101
101
## Progress
102
102
103
+ - [x] aarch64/chkstk.S
103
104
- [x] adddf3.c
104
105
- [x] addsf3.c
105
106
- [x] arm/adddf3vfp.S
107
+ - [x] arm/addsf3.S
106
108
- [x] arm/addsf3vfp.S
107
109
- [x] arm/aeabi_dcmp.S
108
110
- [x] arm/aeabi_fcmp.S
@@ -113,6 +115,7 @@ rely on CI.
113
115
- [x] arm/aeabi_memset.S
114
116
- [x] arm/aeabi_uidivmod.S
115
117
- [x] arm/aeabi_uldivmod.S
118
+ - [ ] arm/chkstk.S
116
119
- [x] arm/divdf3vfp.S
117
120
- [ ] arm/divmodsi4.S (generic version is done)
118
121
- [x] arm/divsf3vfp.S
@@ -154,6 +157,12 @@ rely on CI.
154
157
- [ ] arm/unordsf2vfp.S
155
158
- [x] ashldi3.c
156
159
- [x] ashrdi3.c
160
+ - [ ] avr/divmodhi4.S
161
+ - [ ] avr/divmodqi4.S
162
+ - [ ] avr/mulhi3.S
163
+ - [ ] avr/mulqi3.S
164
+ - [ ] avr/udivmodhi4.S
165
+ - [ ] avr/udivmodqi4.S
157
166
- [x] bswapdi2.c
158
167
- [x] bswapsi2.c
159
168
- [x] bswapti2.c
@@ -166,6 +175,7 @@ rely on CI.
166
175
- [x] divdi3.c
167
176
- [x] divmoddi4.c
168
177
- [x] divmodsi4.c
178
+ - [x] divmodti4.c
169
179
- [x] divsf3.c
170
180
- [x] divsi3.c
171
181
- [x] extendsfdf2.c
@@ -204,6 +214,8 @@ rely on CI.
204
214
- [x] mulsf3.c
205
215
- [x] powidf2.c
206
216
- [x] powisf2.c
217
+ - [ ] riscv/muldi3.S
218
+ - [ ] riscv/mulsi3.S
207
219
- [x] subdf3.c
208
220
- [x] subsf3.c
209
221
- [x] truncdfsf2.c
@@ -236,7 +248,8 @@ These builtins are needed to support 128-bit integers.
236
248
- [x] udivti3.c
237
249
- [x] umodti3.c
238
250
239
- These builtins are needed to support ` f16` and ` f128` , which are in the process of being added to Rust.
251
+ These builtins are needed to support ` f16 ` and ` f128 ` , which are in the process
252
+ of being added to Rust.
240
253
241
254
- [x] addtf3.c
242
255
- [x] comparetf2.c
@@ -253,29 +266,55 @@ These builtins are needed to support `f16` and `f128`, which are in the process
253
266
- [x] fixunstfti.c
254
267
- [ ] floatditf.c
255
268
- [ ] floatsitf.c
269
+ - [ ] floattitf.c
256
270
- [ ] floatunditf.c
257
271
- [ ] floatunsitf.c
272
+ - [ ] floatuntitf.c
258
273
- [x] multf3.c
259
274
- [ ] powitf2.c
260
- - [ ] ppc/fixtfdi.c
261
- - [ ] ppc/fixunstfdi.c
262
- - [ ] ppc/floatditf.c
263
- - [ ] ppc/floatunditf.c
264
275
- [x] subtf3.c
265
276
- [x] truncdfhf2.c
266
277
- [x] truncsfhf2.c
267
278
- [x] trunctfdf2.c
268
279
- [x] trunctfhf2.c
269
280
- [x] trunctfsf2.c
270
281
282
+
283
+ These builtins are used by the Hexagon DSP
284
+
285
+ - [ ] hexagon/common_entry_exit_abi1.S
286
+ - [ ] hexagon/common_entry_exit_abi2.S
287
+ - [ ] hexagon/common_entry_exit_legacy.S
288
+ - [x] hexagon/dfaddsub.S~~
289
+ - [x] hexagon/dfdiv.S~~
290
+ - [x] hexagon/dffma.S~~
291
+ - [x] hexagon/dfminmax.S~~
292
+ - [x] hexagon/dfmul.S~~
293
+ - [x] hexagon/dfsqrt.S~~
294
+ - [x] hexagon/divdi3.S~~
295
+ - [x] hexagon/divsi3.S~~
296
+ - [x] hexagon/fastmath2_dlib_asm.S~~
297
+ - [x] hexagon/fastmath2_ldlib_asm.S~~
298
+ - [x] hexagon/fastmath_dlib_asm.S~~
299
+ - [x] hexagon/memcpy_forward_vp4cp4n2.S~~
300
+ - [x] hexagon/memcpy_likely_aligned.S~~
301
+ - [x] hexagon/moddi3.S~~
302
+ - [x] hexagon/modsi3.S~~
303
+ - [x] hexagon/sfdiv_opt.S~~
304
+ - [x] hexagon/sfsqrt_opt.S~~
305
+ - [x] hexagon/udivdi3.S~~
306
+ - [x] hexagon/udivmoddi4.S~~
307
+ - [x] hexagon/udivmodsi4.S~~
308
+ - [x] hexagon/udivsi3.S~~
309
+ - [x] hexagon/umoddi3.S~~
310
+ - [x] hexagon/umodsi3.S~~
311
+
271
312
## Unimplemented functions
272
313
273
- These builtins involve floating-point types (" ` f80` " and complex numbers) that are not supported by Rust.
314
+ These builtins are for x87 ` f80 ` floating-point numbers that are not supported
315
+ by Rust.
274
316
275
- - ~ ~divdc3.c~~
276
- - ~ ~divsc3.c~~
277
- - ~ ~divtc3.c~~
278
- - ~ ~divxc3.c~~
317
+ - ~~ extendxftf2.c~~
279
318
- ~~ fixunsxfdi.c~~
280
319
- ~~ fixunsxfsi.c~~
281
320
- ~~ fixunsxfti.c~~
@@ -287,19 +326,45 @@ These builtins involve floating-point types ("`f80`" and complex numbers) that a
287
326
- ~~ floatuntixf.c~~
288
327
- ~~ i386/floatdixf.S~~
289
328
- ~~ i386/floatundixf.S~~
290
- - ~ ~muldc3.c~~
291
- - ~ ~mulsc3.c~~
292
- - ~ ~multc3.c~~
293
- - ~ ~mulxc3.c~~
294
- - ~ ~powixf2.c~~
329
+ - ~~ x86_64/floatdixf.c~~
330
+ - ~~ x86_64/floatundixf.S~~
331
+
332
+ These builtins are for IBM "extended double" non-IEEE 128-bit floating-point
333
+ numbers.
334
+
295
335
- ~~ ppc/divtc3.c~~
336
+ - ~~ ppc/fixtfdi.c~~
337
+ - ~~ ppc/fixtfti.c~~
338
+ - ~~ ppc/fixunstfdi.c~~
339
+ - ~~ ppc/fixunstfti.c~~
340
+ - ~~ ppc/floatditf.c~~
341
+ - ~~ ppc/floattitf.c~~
342
+ - ~~ ppc/floatunditf.c~~
296
343
- ~~ ppc/gcc_qadd.c~~
297
344
- ~~ ppc/gcc_qdiv.c~~
298
345
- ~~ ppc/gcc_qmul.c~~
299
346
- ~~ ppc/gcc_qsub.c~~
300
347
- ~~ ppc/multc3.c~~
301
- - ~ ~x86_64/floatdixf.c~~
302
- - ~ ~x86_64/floatundixf.S~~
348
+
349
+ These builtins are for 16-bit brain floating-point numbers that are not
350
+ supported by Rust.
351
+
352
+ - ~~ truncdfbf2.c~~
353
+ - ~~ truncsfbf2.c~~
354
+ - ~~ trunctfxf2.c~~
355
+
356
+ These builtins involve complex floating-point types that are not supported by
357
+ Rust.
358
+
359
+ - ~~ divdc3.c~~
360
+ - ~~ divsc3.c~~
361
+ - ~~ divtc3.c~~
362
+ - ~~ divxc3.c~~
363
+ - ~~ muldc3.c~~
364
+ - ~~ mulsc3.c~~
365
+ - ~~ multc3.c~~
366
+ - ~~ mulxc3.c~~
367
+ - ~~ powixf2.c~~
303
368
304
369
These builtins are never called by LLVM.
305
370
@@ -333,6 +398,7 @@ These builtins are never called by LLVM.
333
398
- ~~ ctzdi2.c~~
334
399
- ~~ ctzsi2.c~~
335
400
- ~~ ctzti2.c~~
401
+ - ~~ ffssi2.c~~
336
402
- ~~ ffsdi2.c~~ - this is [ called by gcc] [ jemalloc-fail ] though!
337
403
- ~~ ffsti2.c~~
338
404
- ~~ mulvdi3.c~~
@@ -395,13 +461,34 @@ Rust only exposes atomic types on platforms that support them, and therefore doe
395
461
396
462
Miscellaneous functionality that is not used by Rust.
397
463
464
+ - ~~ aarch64/fp_mode.c~~
465
+ - ~~ aarch64/lse.S~~ (LSE atomics)
466
+ - ~~ aarch64/sme-abi-init.c~~ (matrix extension)
467
+ - ~~ aarch64/sme-abi.S~~ (matrix extension)
468
+ - ~~ aarch64/sme-libc-routines.c~~ (matrix extension)
398
469
- ~~ apple_versioning.c~~
470
+ - ~~ arm/fp_mode.c~~
471
+ - ~~ avr/exit.S~~
399
472
- ~~ clear_cache.c~~
473
+ - ~~ cpu_model/aarch64.c~~
474
+ - ~~ cpu_model/x86.c~~
475
+ - ~~ crtbegin.c~~
476
+ - ~~ crtend.c~~
400
477
- ~~ emutls.c~~
401
478
- ~~ enable_execute_stack.c~~
402
479
- ~~ eprintf.c~~
480
+ - ~~ fp_mode.c~~ (float exception handling)
403
481
- ~~ gcc_personality_v0.c~~
482
+ - ~~ i386/fp_mode.c~~
483
+ - ~~ int_util.c~~
484
+ - ~~ loongarch/fp_mode.c~~
485
+ - ~~ os_version_check.c~~
486
+ - ~~ riscv/fp_mode.c~~
487
+ - ~~ riscv/restore.S~~ (callee-saved registers)
488
+ - ~~ riscv/save.S~~ (callee-saved registers)
404
489
- ~~ trampoline_setup.c~~
490
+ - ~~ ve/grow_stack.S~~
491
+ - ~~ ve/grow_stack_align.S~~
405
492
406
493
Floating-point implementations of builtins that are only called from soft-float code. It would be better to simply use the generic soft-float versions in this case.
407
494
0 commit comments