12
12
using namespace llvm ;
13
13
using namespace RTLIB ;
14
14
15
- #define GET_INIT_RUNTIME_LIBCALL_UTILS
16
15
#define GET_INIT_RUNTIME_LIBCALL_NAMES
16
+ #define GET_SET_TARGET_RUNTIME_LIBCALL_SETS
17
17
#include " llvm/IR/RuntimeLibcalls.inc"
18
- #undef GET_INIT_RUNTIME_LIBCALL_UTILS
19
18
#undef GET_INIT_RUNTIME_LIBCALL_NAMES
19
+ #undef GET_SET_TARGET_RUNTIME_LIBCALL_SETS
20
20
21
21
static cl::opt<bool >
22
22
HexagonEnableFastMathRuntimeCalls (" hexagon-fast-math" , cl::Hidden,
23
23
cl::desc (" Enable Fast Math processing" ));
24
24
25
- static void setAArch64LibcallNames (RuntimeLibcallsInfo &Info,
26
- const Triple &TT) {
27
- #define LCALLNAMES (A, B, N ) \
28
- Info.setLibcallImpl (A##N##_RELAX, B##N##_relax); \
29
- Info.setLibcallImpl (A##N##_ACQ, B##N##_acq); \
30
- Info.setLibcallImpl (A##N##_REL, B##N##_rel); \
31
- Info.setLibcallImpl (A##N##_ACQ_REL, B##N##_acq_rel);
32
- #define LCALLNAME4 (A, B ) \
33
- LCALLNAMES (A, B, 1 ) \
34
- LCALLNAMES (A, B, 2 ) LCALLNAMES (A, B, 4 ) LCALLNAMES (A, B, 8 )
35
- #define LCALLNAME5 (A, B ) \
36
- LCALLNAMES (A, B, 1 ) \
37
- LCALLNAMES (A, B, 2 ) \
38
- LCALLNAMES (A, B, 4 ) LCALLNAMES (A, B, 8 ) LCALLNAMES (A, B, 16 )
39
-
40
- if (TT.isWindowsArm64EC ()) {
41
- LCALLNAME5 (RTLIB::OUTLINE_ATOMIC_CAS, RTLIB::arm64ec___aarch64_cas)
42
- LCALLNAME4 (RTLIB::OUTLINE_ATOMIC_SWP, RTLIB::arm64ec___aarch64_swp)
43
- LCALLNAME4 (RTLIB::OUTLINE_ATOMIC_LDADD, RTLIB::arm64ec___aarch64_ldadd)
44
- LCALLNAME4 (RTLIB::OUTLINE_ATOMIC_LDSET, RTLIB::arm64ec___aarch64_ldset)
45
- LCALLNAME4 (RTLIB::OUTLINE_ATOMIC_LDCLR, RTLIB::arm64ec___aarch64_ldclr)
46
- LCALLNAME4 (RTLIB::OUTLINE_ATOMIC_LDEOR, RTLIB::arm64ec___aarch64_ldeor)
47
- } else {
48
- LCALLNAME5 (RTLIB::OUTLINE_ATOMIC_CAS, RTLIB::__aarch64_cas)
49
- LCALLNAME4 (RTLIB::OUTLINE_ATOMIC_SWP, RTLIB::__aarch64_swp)
50
- LCALLNAME4 (RTLIB::OUTLINE_ATOMIC_LDADD, RTLIB::__aarch64_ldadd)
51
- LCALLNAME4 (RTLIB::OUTLINE_ATOMIC_LDSET, RTLIB::__aarch64_ldset)
52
- LCALLNAME4 (RTLIB::OUTLINE_ATOMIC_LDCLR, RTLIB::__aarch64_ldclr)
53
- LCALLNAME4 (RTLIB::OUTLINE_ATOMIC_LDEOR, RTLIB::__aarch64_ldeor)
54
- }
55
- #undef LCALLNAMES
56
- #undef LCALLNAME4
57
- #undef LCALLNAME5
58
- }
59
-
60
25
static void setARMLibcallNames (RuntimeLibcallsInfo &Info, const Triple &TT,
61
26
FloatABI::ABIType FloatABIType,
62
27
EABI EABIVersion) {
@@ -358,6 +323,8 @@ void RuntimeLibcallsInfo::initLibcalls(const Triple &TT,
358
323
ExceptionHandling ExceptionModel,
359
324
FloatABI::ABIType FloatABI,
360
325
EABI EABIVersion, StringRef ABIName) {
326
+ setTargetRuntimeLibcallSets (TT);
327
+
361
328
// Use the f128 variants of math functions on x86
362
329
if (TT.isX86 () && TT.isGNUEnvironment ())
363
330
setLongDoubleIsF128Libm (*this , /* FiniteOnlyFuncs=*/ true );
@@ -367,28 +334,6 @@ void RuntimeLibcallsInfo::initLibcalls(const Triple &TT,
367
334
setLibcallImpl (RTLIB::UNWIND_RESUME, RTLIB::_Unwind_SjLj_Resume);
368
335
}
369
336
370
- if (TT.isPPC ()) {
371
- setPPCLibCallNameOverrides ();
372
-
373
- // TODO: Do the finite only functions exist?
374
- setLongDoubleIsF128Libm (*this , /* FiniteOnlyFuncs=*/ false );
375
-
376
- // TODO: Tablegen predicate support
377
- if (TT.isOSAIX ()) {
378
- if (TT.isPPC64 ()) {
379
- setLibcallImpl (RTLIB::MEMCPY, RTLIB::Unsupported);
380
- setLibcallImpl (RTLIB::MEMMOVE, RTLIB::___memmove64);
381
- setLibcallImpl (RTLIB::MEMSET, RTLIB::___memset64);
382
- setLibcallImpl (RTLIB::BZERO, RTLIB::___bzero64);
383
- } else {
384
- setLibcallImpl (RTLIB::MEMCPY, RTLIB::Unsupported);
385
- setLibcallImpl (RTLIB::MEMMOVE, RTLIB::___memmove);
386
- setLibcallImpl (RTLIB::MEMSET, RTLIB::___memset);
387
- setLibcallImpl (RTLIB::BZERO, RTLIB::___bzero);
388
- }
389
- }
390
- }
391
-
392
337
// A few names are different on particular architectures or environments.
393
338
if (TT.isOSDarwin ()) {
394
339
// For f16/f32 conversions, Darwin uses the standard naming scheme,
@@ -453,14 +398,6 @@ void RuntimeLibcallsInfo::initLibcalls(const Triple &TT,
453
398
setLibcallImpl (RTLIB::FREXP_PPCF128, RTLIB::Unsupported);
454
399
}
455
400
456
- // Disable most libcalls on AMDGPU and NVPTX.
457
- if (TT.isAMDGPU () || TT.isNVPTX ()) {
458
- for (RTLIB::Libcall LC : RTLIB::libcalls ()) {
459
- if (!isAtomicLibCall (LC))
460
- setLibcallImpl (LC, RTLIB::Unsupported);
461
- }
462
- }
463
-
464
401
if (TT.isOSMSVCRT ()) {
465
402
// MSVCRT doesn't have powi; fall back to pow
466
403
setLibcallImpl (RTLIB::POWI_F32, RTLIB::Unsupported);
@@ -488,55 +425,14 @@ void RuntimeLibcallsInfo::initLibcalls(const Triple &TT,
488
425
}
489
426
}
490
427
491
- if (TT.isAArch64 ()) {
492
- if (TT.isWindowsArm64EC ()) {
493
- setWindowsArm64LibCallNameOverrides ();
494
- setLibcallImpl (RTLIB::SC_MEMCPY, RTLIB::arm64ec___arm_sc_memcpy);
495
- setLibcallImpl (RTLIB::SC_MEMMOVE, RTLIB::arm64ec___arm_sc_memmove);
496
- setLibcallImpl (RTLIB::SC_MEMSET, RTLIB::arm64ec___arm_sc_memset);
497
- } else {
498
- setLibcallImpl (RTLIB::SC_MEMCPY, RTLIB::__arm_sc_memcpy);
499
- setLibcallImpl (RTLIB::SC_MEMMOVE, RTLIB::__arm_sc_memmove);
500
- setLibcallImpl (RTLIB::SC_MEMSET, RTLIB::__arm_sc_memset);
501
- }
502
-
503
- setAArch64LibcallNames (*this , TT);
504
- } else if (TT.isARM () || TT.isThumb ()) {
428
+ if (TT.isARM () || TT.isThumb ())
505
429
setARMLibcallNames (*this , TT, FloatABI, EABIVersion);
506
- } else if (TT.getArch () == Triple::ArchType::avr) {
507
- // Division rtlib functions (not supported), use divmod functions instead
508
- setLibcallImpl (RTLIB::SDIV_I8, RTLIB::Unsupported);
509
- setLibcallImpl (RTLIB::SDIV_I16, RTLIB::Unsupported);
510
- setLibcallImpl (RTLIB::SDIV_I32, RTLIB::Unsupported);
511
- setLibcallImpl (RTLIB::UDIV_I8, RTLIB::Unsupported);
512
- setLibcallImpl (RTLIB::UDIV_I16, RTLIB::Unsupported);
513
- setLibcallImpl (RTLIB::UDIV_I32, RTLIB::Unsupported);
514
-
515
- // Modulus rtlib functions (not supported), use divmod functions instead
516
- setLibcallImpl (RTLIB::SREM_I8, RTLIB::Unsupported);
517
- setLibcallImpl (RTLIB::SREM_I16, RTLIB::Unsupported);
518
- setLibcallImpl (RTLIB::SREM_I32, RTLIB::Unsupported);
519
- setLibcallImpl (RTLIB::UREM_I8, RTLIB::Unsupported);
520
- setLibcallImpl (RTLIB::UREM_I16, RTLIB::Unsupported);
521
- setLibcallImpl (RTLIB::UREM_I32, RTLIB::Unsupported);
522
-
523
- // Division and modulus rtlib functions
524
- setLibcallImpl (RTLIB::SDIVREM_I8, RTLIB::__divmodqi4);
525
- setLibcallImpl (RTLIB::SDIVREM_I16, RTLIB::__divmodhi4);
526
- setLibcallImpl (RTLIB::SDIVREM_I32, RTLIB::__divmodsi4);
527
- setLibcallImpl (RTLIB::UDIVREM_I8, RTLIB::__udivmodqi4);
528
- setLibcallImpl (RTLIB::UDIVREM_I16, RTLIB::__udivmodhi4);
529
- setLibcallImpl (RTLIB::UDIVREM_I32, RTLIB::__udivmodsi4);
530
-
430
+ else if (TT.getArch () == Triple::ArchType::avr) {
531
431
// Several of the runtime library functions use a special calling conv
532
432
setLibcallCallingConv (RTLIB::SDIVREM_I8, CallingConv::AVR_BUILTIN);
533
433
setLibcallCallingConv (RTLIB::SDIVREM_I16, CallingConv::AVR_BUILTIN);
534
434
setLibcallCallingConv (RTLIB::UDIVREM_I8, CallingConv::AVR_BUILTIN);
535
435
setLibcallCallingConv (RTLIB::UDIVREM_I16, CallingConv::AVR_BUILTIN);
536
-
537
- // Trigonometric rtlib functions
538
- setLibcallImpl (RTLIB::SIN_F32, RTLIB::avr_sin);
539
- setLibcallImpl (RTLIB::COS_F32, RTLIB::avr_cos);
540
436
}
541
437
542
438
if (!TT.isWasm ()) {
@@ -550,11 +446,6 @@ void RuntimeLibcallsInfo::initLibcalls(const Triple &TT,
550
446
}
551
447
552
448
setLibcallImpl (RTLIB::MULO_I128, RTLIB::Unsupported);
553
- } else {
554
- // Define the emscripten name for return address helper.
555
- // TODO: when implementing other Wasm backends, make this generic or only do
556
- // this on emscripten depending on what they end up doing.
557
- setLibcallImpl (RTLIB::RETURN_ADDRESS, RTLIB::emscripten_return_address);
558
449
}
559
450
560
451
if (TT.getArch () == Triple::ArchType::hexagon) {
@@ -601,12 +492,6 @@ void RuntimeLibcallsInfo::initLibcalls(const Triple &TT,
601
492
602
493
if (TT.getArch () == Triple::ArchType::msp430)
603
494
setMSP430Libcalls (*this , TT);
604
-
605
- if (TT.isSystemZ () && TT.isOSzOS ())
606
- setZOSLibCallNameOverrides ();
607
-
608
- if (TT.getArch () == Triple::ArchType::xcore)
609
- setLibcallImpl (RTLIB::MEMCPY_ALIGN_4, RTLIB::__memcpy_4);
610
495
}
611
496
612
497
bool RuntimeLibcallsInfo::darwinHasExp10 (const Triple &TT) {
0 commit comments