GCC Compatibility of Builtins#

LLVM-libc is written with Clang as the reference compiler but is expected to build under GCC as well. Many headers reach for compiler intrinsics (__builtin_*) for fast paths and for IEEE-754 semantics. Not every __builtin_* exists in every compiler. a large family is Clang-only, and several others were added in specific GCC releases. This page records which builtins the libc code base references today and the minimum GCC basepoint that ships each one.

Builtin

gcc-5

gcc-6

gcc-7

gcc-8

gcc-9

gcc-10

gcc-11

gcc-12

gcc-13

gcc-14

gcc-15

gcc-16

gcc-17

__builtin_aarch64_get_fpcr

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_aarch64_get_fpsr

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_aarch64_set_fpcr

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_aarch64_set_fpsr

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_aarch64_wsr64

✅

✅

✅

__builtin_abs

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_addc

✅

✅

✅

__builtin_addcb

__builtin_addcl

✅

✅

✅

__builtin_addcll

✅

✅

✅

__builtin_addcs

__builtin_add_overflow

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_addressof

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_align_down

__builtin_align_up

__builtin_alloca

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_amdgcn_ldexp

__builtin_amdgcn_ldexpf

__builtin_amdgcn_s_sendmsg

__builtin_amdgcn_s_sleep

__builtin_amdgcn_workitem_id_x

__builtin_arm_get_fpscr

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_arm_isb

__builtin_arm_set_fpscr

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_arm_wsr64

__builtin_assume

__builtin_assume_aligned

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_bcmp

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_bit_cast

✅

✅

✅

✅

✅

✅

__builtin_bswap16

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_bswap32

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_bswap64

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_ceil

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_ceilf

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_clear_padding

✅

✅

✅

✅

✅

✅

__builtin_clz

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_clzg

✅

✅

✅

__builtin_clzl

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_clzll

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_clzs

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_complex

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_convertvector

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_copysign

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_copysignf

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_copysignf16

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_ctz

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_ctzg

✅

✅

✅

__builtin_ctzl

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_ctzll

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_ctzs

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_elementwise_abs

__builtin_elementwise_canonicalize

__builtin_elementwise_ceil

__builtin_elementwise_copysign

__builtin_elementwise_floor

__builtin_elementwise_fma

__builtin_elementwise_fmod

__builtin_elementwise_max

__builtin_elementwise_min

__builtin_elementwise_nearbyint

__builtin_elementwise_rint

__builtin_elementwise_round

__builtin_elementwise_roundeven

__builtin_elementwise_sqrt

__builtin_elementwise_trunc

__builtin_expect

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_fabs

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_fabsf

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_fabsf16

✅

✅

✅

✅

✅

✅

✅

__builtin_floor

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_floorf

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_flt_rounds

__builtin_fma

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_fmaf

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_fmax

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_fmaxf

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_fmaxf16

✅

✅

✅

✅

✅

__builtin_fmin

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_fminf

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_fminf16

✅

✅

✅

✅

✅

__builtin_fmod

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_fmodf

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_fpclassify

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_frame_address

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_frexp

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_frexpf

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_func

__builtin_huge_val

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_huge_valf

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_ia32_ldmxcsr

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_ia32_pause

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_ia32_stmxcsr

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_inff

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_is_aligned

__builtin_is_constant_evaluated

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_isfinite

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_isinf

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_isnan

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_isnormal

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_launder

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_ldexp

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_ldexpf

✅

✅

✅

✅

✅

✅

__builtin_masked_compress_store

__builtin_masked_expand_load

__builtin_masked_gather

__builtin_masked_load

__builtin_masked_scatter

__builtin_masked_store

__builtin_memcmp

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_memcmp_inline

__builtin_memcpy

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_memcpy_inline

__builtin_memmove

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_memset

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_memset_inline

__builtin_mul_overflow

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_nanf

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_nans

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_nansf

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_nansl

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_nearbyint

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_nearbyintf

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_nondeterministic_value

__builtin_nontemporal_store

__builtin_offsetof

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_popcount

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_popcountg

✅

✅

✅

__builtin_popcountl

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_popcountll

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_prefetch

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_readcyclecounter

__builtin_readsteadycounter

__builtin_reduce_add

__builtin_reduce_and

__builtin_reduce_max

__builtin_reduce_min

__builtin_reduce_mul

__builtin_reduce_or

__builtin_reduce_xor

__builtin_remainder

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_remainderf

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_return_address

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_rint

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_rintf

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_round

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_roundeven

✅

✅

✅

✅

✅

✅

✅

__builtin_roundevenf

✅

✅

✅

✅

✅

✅

✅

__builtin_roundf

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_sadd_overflow

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_shufflevector

✅

✅

✅

✅

✅

__builtin_signbit

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_snprintf

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_sqrt

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_sqrtf

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_strlen

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_subc

✅

✅

✅

__builtin_subcb

__builtin_subcl

✅

✅

✅

__builtin_subcll

✅

✅

✅

__builtin_subcs

__builtin_sub_overflow

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_trap

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_trunc

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_truncf

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_unreachable

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

✅

__builtin_vectorelements

__has_builtin

✅

✅

✅

✅

✅

✅

✅

✅