ΠΠΎ ΡΠ΅ΡΡ ΠΌΠ΅ΡΠ΅ΡΠΈ ΡΠ°Π·Π²ΠΎΡ, Π±Π΅ΡΠ΅ ΠΏΡΠ΅ΡΡΡΠ°Π²Π΅Π½ΠΎ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠΎΡ LLVM 12.0 - ΠΊΠΎΠΌΠΏΠ»Π΅Ρ Π°Π»Π°ΡΠΊΠΈ ΠΊΠΎΠΌΠΏΠ°ΡΠΈΠ±ΠΈΠ»Π΅Π½ ΡΠΎ GCC (ΠΊΠΎΠΌΠΏΠ°ΡΠ»Π΅ΡΠΈ, ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΎΡΠΈ ΠΈ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠΈ Π½Π° ΠΊΠΎΠ΄) ΠΊΠΎΡ Π³ΠΈ ΠΊΠΎΠΌΠΏΠ°ΡΠ»ΠΈΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ΅ Π²ΠΎ ΡΡΠ΅Π΄Π΅Π½ Π±ΠΈΡΠΊΠΎΠ΄ Π½Π° Π²ΠΈΡΡΡΠ΅Π»Π½ΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΡΠ»ΠΈΡΠ½ΠΈ Π½Π° RISC (Π²ΠΈΡΡΡΠ΅Π»Π½Π° ΠΌΠ°ΡΠΈΠ½Π° Π½Π° Π½ΠΈΡΠΊΠΎ Π½ΠΈΠ²ΠΎ ΡΠΎ ΡΠΈΡΡΠ΅ΠΌ Π·Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡΠ° Π½Π° ΠΏΠΎΠ²Π΅ΡΠ΅ Π½ΠΈΠ²ΠΎΠ°). ΠΠ΅Π½Π΅ΡΠΈΡΠ°Π½ΠΈΠΎΡ ΠΏΡΠ΅Π²Π΄ΠΎΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΠ° ΡΠΎ ΠΏΠΎΠΌΠΎΡ Π½Π° JIT ΠΊΠΎΠΌΠΏΠ°ΡΠ»Π΅Ρ Π²ΠΎ ΠΌΠ°ΡΠΈΠ½ΡΠΊΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Π²ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠΎΡ Π½Π° ΠΈΠ·Π²ΡΡΡΠ²Π°ΡΠ΅ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ°.
ΠΠΎΠ΄ΠΎΠ±ΡΡΠ²Π°ΡΠ° Π²ΠΎ Clang 12.0:
- ΠΠΎΠ΄Π΄ΡΡΠΊΠ°ΡΠ° Π·Π° βΠ²Π΅ΡΠΎΡΠ°ΡΠ½ΠΈΡΠ΅β ΠΈ βΠ½Π΅Π²Π΅ΡΠΎΡΠ°ΡΠ½ΠΈΡΠ΅β Π°ΡΡΠΈΠ±ΡΡΠΈ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈ Π²ΠΎ ΡΡΠ°Π½Π΄Π°ΡΠ΄ΠΎΡ C++20 Π΅ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ°Π½Π° ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½Π° ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΎ, Π΄ΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°ΡΡΠΈ ΠΌΡ Π½Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΎΡΠΎΡ Π΄Π° Π±ΠΈΠ΄Π΅ ΠΈΠ½ΡΠΎΡΠΌΠΈΡΠ°Π½ Π·Π° Π²Π΅ΡΠΎΡΠ°ΡΠ½ΠΎΡΡΠ° ΡΡΠ»ΠΎΠ²Π½ΠΈΠΎΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡ Π΄Π° Π±ΠΈΠ΄Π΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ (Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, β[[Π²Π΅ΡΠΎΡΠ°ΡΠ½ΠΎ ]] Π°ΠΊΠΎ (ΡΠ»ΡΡΠ°ΡΠ½ΠΎ > 0) {β).
- ΠΠΎΠ΄Π°Π΄Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ° Π·Π° AMD Zen 3 (-march=znver3), Intel Alder Lake (-march=alderlake) ΠΈ Intel Sapphire Rapids (-march=sapphirerapids) ΠΏΡΠΎΡΠ΅ΡΠΎΡΠΈ.
- ΠΠΎΠ΄Π°Π΄Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ° Π·Π° Π·Π½Π°ΠΌΠ΅Π½ΡΠ°ΡΠ° β-march=x86-64-v[234]β Π·Π° ΠΈΠ·Π±ΠΈΡΠ°ΡΠ΅ Π½ΠΈΠ²ΠΎΠ° Π½Π° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° x86-64 (v2 - ΠΎΠΏΡΠ°ΡΠ° SSE4.2, SSSE3, POPCNT ΠΈ CMPXCHG16B Π΅ΠΊΡΡΠ΅Π½Π·ΠΈΠΈ; v3 - AVX2 ΠΈ MOVBE; v4 - AVX-512 ) .
- ΠΠΎΠ΄Π°Π΄Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ° Π·Π° Arm Cortex-A78C (cortex-a78c), Arm Cortex-R82 (cortex-r82), Arm Neoverse V1 (neoverse-v1), Arm Neoverse N2 (neoverse-n2) ΠΈ Fujitsu A64FX (a64fx). ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π° Π΄Π° ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠΈΡΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡΠ° Π·Π° Neoverse-V1 ΠΏΡΠΎΡΠ΅ΡΠΎΡΠΈΡΠ΅, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°Π²Π΅Π΄Π΅ΡΠ΅ β-mcpu=neoverse-v1β.
- ΠΠ° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°ΡΠ° AArch64, Π΄ΠΎΠ΄Π°Π΄Π΅Π½ΠΈ ΡΠ΅ Π½ΠΎΠ²ΠΈ ΠΎΠ·Π½Π°ΠΊΠΈ Π½Π° ΠΊΠΎΠΌΠΏΠ°ΡΠ»Π΅ΡΠΎΡ β-moutline-atomicsβ ΠΈ β-mno-outline-atomicsβ Π·Π° Π΄Π° ΡΠ΅ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠ°Ρ ΠΈΠ»ΠΈ ΠΎΠ½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ°Ρ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π·Π° Π°ΡΠΎΠΌΡΠΊΠΎ ΡΠ°Π±ΠΎΡΠ΅ΡΠ΅, ΠΊΠ°ΠΊΠΎ ΡΡΠΎ Π΅ β__aarch64_cas8_relaxβ. ΠΠ°ΠΊΠ²ΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΡΠΊΡΠΈΠ²Π°Π°Ρ ΠΏΡΠΈ ΠΈΠ·Π²ΡΡΡΠ²Π°ΡΠ΅ΡΠΎ Π΄Π°Π»ΠΈ Π΅ Π΄ΠΎΡΡΠ°ΠΏΠ½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ°ΡΠ° Π·Π° LSE (ΠΠΎΠ»Π΅ΠΌΠΈ ΡΠΈΡΡΠ΅ΠΌΡΠΊΠΈ Π½Π°ΡΡΠ°Π²ΠΊΠΈ) ΠΈ Π³ΠΈ ΠΊΠΎΡΠΈΡΡΠ°Ρ Π΄Π°Π΄Π΅Π½ΠΈΡΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π·Π° Π°ΡΠΎΠΌΡΠΊΠΈΠΎΡ ΠΏΡΠΎΡΠ΅ΡΠΎΡ ΠΈΠ»ΠΈ ΠΏΠ°ΠΊ ΡΠ΅ Π²ΡΠ°ΡΠ°Π°Ρ Π½Π° ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π½Π° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π·Π° ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡΠ° LL/SC (Load-link/store-conditional).
- ΠΠΎΠ΄Π°Π΄Π΅Π½Π° Π΅ ΠΎΠΏΡΠΈΡΠ°ΡΠ° β-fbinutils-versionβ Π·Π° Π΄Π° ΡΠ΅ ΠΈΠ·Π±Π΅ΡΠ΅ ΡΠ΅Π»Π½Π°ΡΠ° Π²Π΅ΡΠ·ΠΈΡΠ° Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΎΡ binutils Π·Π° ΠΊΠΎΠΌΠΏΠ°ΡΠΈΠ±ΠΈΠ»Π½ΠΎΡΡ ΡΠΎ ΠΏΠΎΡΡΠ°Ρ ΠΏΠΎΠ²ΡΠ·ΡΠ²Π°Ρ ΠΈ ΠΎΠ΄Π½Π΅ΡΡΠ²Π°ΡΠ΅ Π½Π° Π°ΡΠ΅ΠΌΠ±Π»Π΅ΡΠΎΡ.
- ΠΠ° ΠΈΠ·Π²ΡΡΠ½ΠΈΡΠ΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ ELF, ΠΊΠΎΠ³Π° Π΅ Π½Π°Π²Π΅Π΄Π΅Π½ΠΎ Π·Π½Π°ΠΌΠ΅Π½ΡΠ΅ΡΠΎ β-gzβ, ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΎ Π΅ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ΠΎ ΠΊΠΎΠΌΠΏΡΠ΅ΡΠΈΡΠ°ΡΠ΅ Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈΡΠ΅ Π·Π° Π΄Π΅Π±Π°Π³ΠΈΡΠ°ΡΠ΅ ΡΠΎ ΠΏΠΎΠΌΠΎΡ Π½Π° Π·Π±ΠΈΡΠΊΠ°ΡΠ° Π·Π»ΠΈΠ± (gz=zlib). ΠΠΎΠ²ΡΠ·ΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° Π΄ΠΎΠ±ΠΈΠ΅Π½ΠΈΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡ-Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ Π±Π°ΡΠ° lld ΠΈΠ»ΠΈ GNU binutils 2.26+. ΠΠ° Π΄Π° ΡΠ° Π²ΡΠ°ΡΠΈΡΠ΅ ΠΊΠΎΠΌΠΏΠ°ΡΠΈΠ±ΠΈΠ»Π½ΠΎΡΡΠ° ΡΠΎ ΠΏΠΎΡΡΠ°ΡΠΈΡΠ΅ Π²Π΅ΡΠ·ΠΈΠΈ Π½Π° binutils, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°Π²Π΅Π΄Π΅ΡΠ΅ β-gz=zlib-gnuβ.
- ΠΠΎΠΊΠ°ΠΆΡΠ²Π°ΡΠΎΡ βΠΎΠ²Π°β ΡΠ΅Π³Π° ΡΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠ²Π° ΡΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π±Π΅Π· Π½ΡΠ»Π° ΠΈ Π΄Π΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΡΠΈΡΠ°Π±ΠΈΠ»Π½ΠΈ(N). ΠΠ° Π΄Π° Π³ΠΎ ΠΎΡΡΡΡΠ°Π½ΠΈΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΠΎΡ nonnull ΠΊΠΎΠ³Π° ΡΡΠ΅Π±Π° Π΄Π° ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ NULL Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ° ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ ΠΎΠΏΡΠΈΡΠ°ΡΠ° β-fdelete-null-pointer-checksβ.
- ΠΠ° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ° Linux, ΡΠ΅ΠΆΠΈΠΌΠΎΡ β-fasynchronous-unwind-tablesβ Π΅ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ Π·Π° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠΈΡΠ΅ AArch64 ΠΈ PowerPC Π΄Π° Π³Π΅Π½Π΅ΡΠΈΡΠ°Π°Ρ ΡΠ°Π±Π΅Π»ΠΈ Π·Π° ΠΏΠΎΠ²ΠΈΡΠΈ Π·Π° ΠΎΠ΄ΠΌΠΎΡΡΠ²Π°ΡΠ΅, ΠΊΠ°ΠΊΠΎ Π²ΠΎ GCC.
- ΠΠΎ β#pragma clang loop vectorize_widthβ ΡΠ° Π΄ΠΎΠ΄Π°Π΄Π΅ ΠΌΠΎΠΆΠ½ΠΎΡΡΠ° Π·Π° ΠΎΠ΄ΡΠ΅Π΄ΡΠ²Π°ΡΠ΅ Π½Π° ΠΎΠΏΡΠΈΠΈΡΠ΅ βΡΠΈΠΊΡΠ½Π°β (ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΎ) ΠΈ βΡΠΊΠ°Π»Π°Π±ΠΈΠ»Π½Π°β Π·Π° Π΄Π° ΡΠ΅ ΠΈΠ·Π±Π΅ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ΠΎΡ Π½Π° Π²Π΅ΠΊΡΠΎΡΠΈΠ·Π°ΡΠΈΡΠ°. Π Π΅ΠΆΠΈΠΌΠΎΡ βΡΠΊΠ°Π»Π°Π±ΠΈΠ»Π΅Π½β, Π½Π΅Π·Π°Π²ΠΈΡΠ΅Π½ ΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠΈΠ½Π°ΡΠ° Π½Π° Π²Π΅ΠΊΡΠΎΡΠΎΡ, Π΅ Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»Π΅Π½ ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π½Π° Ρ Π°ΡΠ΄Π²Π΅Ρ ΡΡΠΎ ΠΏΠΎΠ΄Π΄ΡΠΆΡΠ²Π° ΡΠΊΠ°Π»Π°Π±ΠΈΠ»Π½Π° Π²Π΅ΠΊΡΠΎΡΠΈΠ·Π°ΡΠΈΡΠ°.
- ΠΠΎΠ΄ΠΎΠ±ΡΠ΅Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ° Π·Π° Windows ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ°: ΠΠΎΠ΄Π³ΠΎΡΠ²Π΅Π½ΠΈ ΡΠ΅ ΠΎΡΠΈΡΠΈΡΠ°Π»Π½ΠΈ Π±ΠΈΠ½Π°ΡΠ½ΠΈ ΡΠΊΠ»ΠΎΠΏΠΎΠ²ΠΈ Π·Π° Windows Π½Π° Arm64 ΡΠΈΡΡΠ΅ΠΌΠΈΡΠ΅, Π²ΠΊΠ»ΡΡΡΠ²Π°ΡΡΠΈ Π³ΠΈ Clang ΠΊΠΎΠΌΠΏΠ°ΡΠ»Π΅ΡΠΎΡ, LLD ΠΏΠΎΠ²ΡΠ·ΡΠ²Π°ΡΠΎΡ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈΡΠ΅ Π·Π° ΡΡΠ°Π΅ΡΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠ°ΡΠ»Π΅Ρ-rt. ΠΠΎΠ³Π° ΡΠ΅ Π³ΡΠ°Π΄ΠΈ Π·Π° ΡΠ΅Π»Π½ΠΈΡΠ΅ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠΈ MinGW, ΡΠ΅ Π΄ΠΎΠ΄Π°Π²Π° Π½Π°ΡΡΠ°Π²ΠΊΠ°ΡΠ° .exe, Π΄ΡΡΠΈ ΠΈ ΠΏΡΠΈ Π²ΠΊΡΡΡΠ΅Π½ΠΎ ΠΊΠΎΠΌΠΏΠ°ΡΠ»ΠΈΡΠ°ΡΠ΅.
- ΠΡΠΎΡΠΈΡΠ΅Π½ΠΈ ΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈΡΠ΅ ΠΏΠΎΠ²ΡΠ·Π°Π½ΠΈ ΡΠΎ ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ°ΡΠ° Π·Π° OpenCL, OpenMP ΠΈ CUDA. ΠΠΎΠ΄Π°Π΄Π΅Π½ΠΈ ΡΠ΅ ΠΎΠΏΡΠΈΠΈΡΠ΅ β-cl-std=CL3.0β ΠΈ β-cl-std=CL1.0β Π·Π° ΠΈΠ·Π±ΠΎΡ Π½Π° ΠΌΠ°ΠΊΡΠΎ ΠΎΠΏΡΠΈΠΈ Π·Π° OpenCL 3.0 ΠΈ OpenCL 1.0. ΠΠΈΡΠ°Π³Π½ΠΎΡΡΠΈΡΠΊΠΈΡΠ΅ Π°Π»Π°ΡΠΊΠΈ ΡΠ΅ ΠΏΡΠΎΡΠΈΡΠ΅Π½ΠΈ.
- ΠΠΎΠ΄Π°Π΄Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ° Π·Π° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈΡΠ΅ HRESET, UINTR ΠΈ AVXVNNI ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ°Π½ΠΈ Π²ΠΎ Π½Π΅ΠΊΠΎΠΈ ΠΏΡΠΎΡΠ΅ΡΠΎΡΠΈ Π±Π°Π·ΠΈΡΠ°Π½ΠΈ Π½Π° x86.
- ΠΠ° x86 ΡΠΈΡΡΠ΅ΠΌΠΈ, ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ°ΡΠ° Π·Π° ΠΎΠΏΡΠΈΡΠ°ΡΠ° β-mtune=β Π΅ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½Π°, ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π°ΡΡΠΈ ΠΈΠ·Π±ΡΠ°Π½ΠΈ ΠΌΠΈΠΊΡΠΎΠ°ΡΡ ΠΈΡΠ΅ΠΊΡΠΎΠ½ΡΠΊΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π±Π΅Π· ΠΎΠ³Π»Π΅Π΄ Π½Π° Π²ΡΠ΅Π΄Π½ΠΎΡΡΠ° β-march=β.
- Π‘ΡΠ°ΡΠΈΡΠΊΠΈΠΎΡ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ ΡΠ° ΠΏΠΎΠ΄ΠΎΠ±ΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° Π½Π΅ΠΊΠΎΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π° POSIX ΠΈ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ Π³ΠΎ ΠΏΠΎΠ΄ΠΎΠ±ΡΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΎΡ ΠΎΠ΄ ΡΡΠ»ΠΎΠ²Π½ΠΈΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΊΠΎΠ³Π° ΠΈΠΌΠ° Π½Π΅ΠΊΠΎΠ»ΠΊΡ ΡΠΈΠΌΠ±ΠΎΠ»ΠΈΡΠ½ΠΈ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ Π²ΠΎ ΡΠΏΠΎΡΠ΅Π΄Π±Π°ΡΠ°. ΠΠΎΠ΄Π°Π΄Π΅Π½ΠΈ ΡΠ΅ Π½ΠΎΠ²ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ: fuchia.HandleChecker (Π΄Π΅ΡΠΈΠ½ΠΈΡΠ° ΡΠ°ΡΠΊΠΈ Π²ΠΎ ΡΡΡΡΠΊΡΡΡΠΈ), webkit.UncountedLambdaCapturesChecker webkit ΠΈ alpha.webkit.UncountedLocalVarsChecker (Π³ΠΈ Π·Π΅ΠΌΠ° ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ ΠΎΡΠΎΠ±Π΅Π½ΠΎΡΡΠΈΡΠ΅ Π½Π° ΡΠ°Π±ΠΎΡΠ° ΡΠΎ ΠΏΠΎΠΊΠ°ΠΆΡΠ²Π°ΡΠΈ Π²ΠΎ ΠΊΠΎΠ΄ΠΎΡ Π½Π° ΠΌΠΎΡΠΎΡΠΎΡ WebKit).
- ΠΠΎ ΠΈΠ·ΡΠ°Π·ΠΈΡΠ΅ ΡΡΠΎ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ Π²ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ Π½Π° ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠΈ, ΡΠΏΠΎΡΡΠ΅Π±Π°ΡΠ° Π½Π° Π²Π³ΡΠ°Π΄Π΅Π½ΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ __builtin_bitreverse*, __builtin_rotateleft*, __builtin_rotateright*, _mm_popcnt*, _bit_scan_forward, __bsfd, __bsfq, __bit_scan_reverse, __bit_scan_reverse, _bsd _ Π΅ Π΄ΠΎΠ·Π²ΠΎΠ»Π΅Π½ΠΎ bswapq , _castf*, __rol* ΠΈ __ror*.
- ΠΠΎΠ΄Π°Π΄Π΅Π½Π° Π΅ ΠΎΠΏΡΠΈΡΠ° BitFieldColonSpacing Π²ΠΎ Π°Π»Π°ΡΠΊΠ°ΡΠ° Π·Π° ΡΠΎΡΠΌΠ°Ρ clang Π·Π° Π΄Π° ΡΠ΅ ΠΈΠ·Π±Π΅ΡΠ΅ ΡΠ°ΡΡΠΎΡΠ°Π½ΠΈΠ΅ΡΠΎ ΠΎΠΊΠΎΠ»Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΈΡΠ΅, ΠΊΠΎΠ»ΠΎΠ½ΠΈΡΠ΅ ΠΈ Π΄Π΅ΡΠΈΠ½ΠΈΡΠΈΠΈΡΠ΅ Π½Π° ΠΏΠΎΠ»ΠΈΡΠ°ΡΠ°.
- Π‘Π΅ΡΠ²Π΅ΡΠΎΡ Π·Π° ΠΊΠ΅ΡΠΈΡΠ°ΡΠ΅ clangd (Clang Server) Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ° Linux Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΡΠ° Π½Π°ΠΌΠ°Π»ΠΈ ΠΏΠΎΡΡΠΎΡΡΠ²Π°ΡΠΊΠ°ΡΠ° Π½Π° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ° Π·Π° Π²ΡΠ΅ΠΌΠ΅ Π½Π° Π΄ΠΎΠ»Π³ΠΎΡΡΠ°ΡΠ½ΠΎΡΠΎ ΡΠ°Π±ΠΎΡΠ΅ΡΠ΅ (ΠΎΠ±Π΅Π·Π±Π΅Π΄Π΅Π½ΠΈ ΡΠ΅ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ½ΠΈ ΠΏΠΎΠ²ΠΈΡΠΈ Π΄ΠΎ malloc_trim Π·Π° Π²ΡΠ°ΡΠ°ΡΠ΅ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠΈΡΠ΅ ΡΠΎ Π±Π΅ΡΠΏΠ»Π°ΡΠ½Π° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ° Π²ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΈΠΎΡ ΡΠΈΡΡΠ΅ΠΌ).
ΠΠ»ΡΡΠ½ΠΈ ΠΈΠ½ΠΎΠ²Π°ΡΠΈΠΈ Π²ΠΎ LLVM 12.0:
- ΠΠΎΠ΄Π΄ΡΡΠΊΠ°ΡΠ° Π·Π° Π°Π»Π°ΡΠΊΠ°ΡΠ° Π·Π° Π³ΡΠ°Π΄Π΅ΡΠ΅ llvm-build Π½Π°ΠΏΠΈΡΠ°Π½Π° Π²ΠΎ Python Π΅ ΠΏΡΠ΅ΠΊΠΈΠ½Π°ΡΠ°, Π° Π½Π°ΠΌΠ΅ΡΡΠΎ ΡΠΎΠ°, ΠΏΡΠΎΠ΅ΠΊΡΠΎΡ ΡΠ΅Π»ΠΎΡΠ½ΠΎ ΡΠ΅ ΠΏΡΠ΅ΡΡΠ»ΠΈ Π½Π° ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠΎΡ Π·Π° Π³ΡΠ°Π΄Π΅ΡΠ΅ CMake.
- ΠΠΎ Π·Π°Π΄Π½ΠΈΠΎΡ Π΄Π΅Π» Π·Π° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°ΡΠ° AArch64, ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ°ΡΠ° Π·Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ° ΠΠΈΠ½Π΄ΠΎΡΡ Π΅ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½Π°: ΠΎΠ±Π΅Π·Π±Π΅Π΄Π΅Π½ΠΎ Π΅ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ Π³Π΅Π½Π΅ΡΠΈΡΠ°ΡΠ΅ Π½Π° ΠΈΠ·Π»Π΅Π· ΠΎΠ΄ Π°ΡΠ΅ΠΌΠ±Π»Π΅ΡΠΎΡ Π·Π° ΡΠ΅Π»Π½ΠΈΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠΈ Π½Π° ΠΠΈΠ½Π΄ΠΎΡΡ, ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½ΠΎ Π΅ Π³Π΅Π½Π΅ΡΠΈΡΠ°ΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π·Π° ΠΏΠΎΠ²ΠΈΡΠΈ Π·Π° ΠΎΠ΄ΠΌΠΎΡΡΠ²Π°ΡΠ΅ (Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π°ΡΠ° Π½Π° ΡΠ°ΠΊΠ²ΠΈΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π΅ Π½Π°ΠΌΠ°Π»Π΅Π½Π° Π·Π° 60 %), ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠ° Π·Π° ΡΠΎΠ·Π΄Π°Π²Π°ΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π·Π° ΠΎΠ΄ΠΌΠΎΡΡΠ²Π°ΡΠ΅ ΡΠΎ ΠΏΠΎΠΌΠΎΡ Π½Π° Π°ΡΠ΅ΠΌΠ±Π»Π΅Ρ ΡΠ΅ Π΄ΠΎΠ΄Π°Π΄Π΅Π½ΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²ΠΈ .seh_*.
- ΠΠ°Π΄Π½ΠΈΠ½Π°ΡΠ° Π·Π° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°ΡΠ° PowerPC ΡΠ΅ ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠΈΠ·ΠΈΡΠ° ΡΠΎ Π½ΠΎΠ²ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π·Π° ΡΠΈΠΊΠ»ΡΡΠΈ ΠΈ ΡΠ°ΡΠΏΠΎΡΠ΅Π΄ΡΠ²Π°ΡΠ΅ Π²ΠΎ Π»ΠΈΠ½ΠΈΡΠ°, ΠΏΡΠΎΡΠΈΡΠ΅Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ° Π·Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡΠΈΡΠ΅ Power10, Π΄ΠΎΠ΄Π°Π΄Π΅Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ° Π·Π° MMA ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π·Π° ΠΌΠ°Π½ΠΈΠΏΡΠ»Π°ΡΠΈΡΠ° ΡΠΎ ΠΌΠ°ΡΡΠΈΡΠΈ ΠΈ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ° Π·Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΈΠΎΡ ΡΠΈΡΡΠ΅ΠΌ AIX.
- ΠΠ°Π΄Π½ΠΈΠ½Π°ΡΠ° x86 Π΄ΠΎΠ΄Π°Π²Π° ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ° Π·Π° AMD Zen 3, Intel Alder Lake ΠΈ Intel Sapphire Rapids ΠΏΡΠΎΡΠ΅ΡΠΎΡΠΈΡΠ΅, ΠΊΠ°ΠΊΠΎ ΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π·Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡΠΈ HRESET, UINTR ΠΈ AVXVNNI. ΠΠΎΠ΄Π΄ΡΡΠΊΠ° Π·Π° MPX (ΠΠΊΡΡΠ΅Π½Π·ΠΈΠΈ Π·Π° Π·Π°ΡΡΠΈΡΠ° Π½Π° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°ΡΠ°) Π·Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΠΏΠΎΠΊΠ°ΠΆΡΠ²Π°ΡΠΈΡΠ΅ Π·Π° Π΄Π° ΡΠ΅ ΠΎΡΠΈΠ³ΡΡΠ° Π΄Π΅ΠΊΠ° Π³ΡΠ°Π½ΠΈΡΠΈΡΠ΅ Π½Π° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°ΡΠ° Π²Π΅ΡΠ΅ Π½Π΅ ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΠΆΠ°Π½ΠΈ (ΠΎΠ²Π°Π° ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡΠ° Π½Π΅ Π΅ ΡΠΈΡΠΎΠΊΠΎ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅ΡΠ° ΠΈ Π²Π΅ΡΠ΅ Π΅ ΠΎΡΡΡΡΠ°Π½Π΅ΡΠ° ΠΎΠ΄ GCC ΠΈ ΡΠ²ΠΎΠ½Π΅ΡΠ΅). ΠΠΎΠ΄Π°Π΄Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ° Π·Π° Π°ΡΠ΅ΠΌΠ±Π»Π΅ΡΠΎΡ Π·Π° ΠΏΡΠ΅ΡΠΈΠΊΡΠΈΡΠ΅ {disp32} ΠΈ {disp8} ΠΈ Π½Π°ΡΡΠ°Π²ΠΊΠΈΡΠ΅ .d32 ΠΈ .d8 Π·Π° ΠΊΠΎΠ½ΡΡΠΎΠ»Π° Π½Π° Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π°ΡΠ° Π½Π° ΠΏΠΎΠΌΠ΅ΡΡΡΠ²Π°ΡΠ°ΡΠ° ΠΈ ΡΠΊΠΎΠΊΠΎΠ²ΠΈΡΠ΅ Π½Π° ΠΎΠΏΠ΅ΡΠ°Π½Π΄ΠΎΡ. ΠΠΎΠ΄Π°Π΄Π΅Π½ Π΅ Π½ΠΎΠ² Π°ΡΡΠΈΠ±ΡΡ βtune-cpuβ Π·Π° ΠΊΠΎΠ½ΡΡΠΎΠ»Π° Π½Π° Π²ΠΊΠ»ΡΡΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° ΠΌΠΈΠΊΡΠΎΠ°ΡΡ ΠΈΡΠ΅ΠΊΡΠΎΠ½ΡΠΊΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ.
- ΠΠΎΠ² ΡΠ΅ΠΆΠΈΠΌ β-fsanitize=unsigned-shift-baseβ Π΅ Π΄ΠΎΠ΄Π°Π΄Π΅Π½ Π²ΠΎ Π΄Π΅ΡΠ΅ΠΊΡΠΎΡΠΎΡ Π·Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ ΡΠΎ ΡΠ΅Π»ΠΈ Π±ΡΠΎΠ΅Π²ΠΈ (Π΄Π΅Π·ΠΈΠ½ΡΠΈΠΊΠ°ΡΠΎΡ Π½Π° ΡΠ΅Π»ΠΈ Π±ΡΠΎΠ΅Π²ΠΈ, β-fsanitize=ΡΠ΅Π» Π±ΡΠΎΡβ) Π·Π° ΠΎΡΠΊΡΠΈΠ²Π°ΡΠ΅ Π½Π° ΠΏΡΠ΅Π»Π΅Π²Π°ΡΠ΅ Π½Π° Π½Π΅ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈ ΡΠ΅Π»ΠΈ Π±ΡΠΎΠ΅Π²ΠΈ ΠΏΠΎ ΠΌΠ°Π»ΠΊΡ ΠΏΠΎΠΌΠ΅ΡΡΡΠ²Π°ΡΠ΅ Π½Π°Π»Π΅Π²ΠΎ.
- ΠΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π΄Π΅ΡΠ΅ΠΊΡΠΎΡΠΈ (asan, cfi, lsan, msan, tsan, ubsan sanitizer) Π΄ΠΎΠ΄Π°Π΄Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ° Π·Π° Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠΈ Π½Π° Linux ΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½Π°ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Musl.
- ΠΡΠΎΡΠΈΡΠ΅Π½ΠΈ ΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈΡΠ΅ Π½Π° LLD ΠΏΠΎΠ²ΡΠ·ΡΠ²Π°ΡΠΎΡ. ΠΠΎΠ΄ΠΎΠ±ΡΠ΅Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ° Π·Π° ΡΠΎΡΠΌΠ°ΡΠΎΡ ELF, Π²ΠΊΠ»ΡΡΡΠ²Π°ΡΡΠΈ Π³ΠΈ Π΄ΠΎΠ΄Π°Π΄Π΅Π½ΠΈΡΠ΅ ΠΎΠΏΡΠΈΠΈ β--dependency-fileβ, β-error-handling-scriptβ, β-lto-pseudo-probe-for-profilingβ, β-no-lto-whole-program -Π²ΠΈΠ΄Π»ΠΈΠ²ΠΎΡΡββ ΠΠΎΠ΄ΠΎΠ±ΡΠ΅Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ° Π·Π° MinGW. ΠΠ° ΡΠΎΡΠΌΠ°ΡΠΎΡ Mach-O (macOS), ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ°Π½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ° Π·Π° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠΈ arm64, arm ΠΈ i386, ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π·Π° Π²ΡΠ΅ΠΌΠ΅ Π½Π° Π²ΡΡΠΊΠ° (LTO) ΠΈ ΠΎΠ΄ΠΌΠΎΡΡΠ²Π°ΡΠ΅ Π½Π° ΡΡΠ΅ΠΊ Π·Π° ΡΠΏΡΠ°Π²ΡΠ²Π°ΡΠ΅ ΡΠΎ ΠΈΡΠΊΠ»ΡΡΠΎΡΠΈ.
- Libc++ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ° Π½ΠΎΠ²ΠΈ ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ Π½Π° ΡΡΠ°Π½Π΄Π°ΡΠ΄ΠΎΡ C++20 ΠΈ Π·Π°ΠΏΠΎΡΠ½Π° ΡΠΎ ΡΠ°Π·Π²ΠΎΡ Π½Π° ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ Π½Π° ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° C++2b. ΠΠΎΠ΄Π°Π΄Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ° Π·Π° Π³ΡΠ°Π΄Π΅ΡΠ΅ ΡΠΎ ΠΎΠ½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π°ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ° Π·Π° Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°ΡΠΈΡΠ° (β-DLIBCXX_ENABLE_LOCALIZATION=OFFβ) ΠΈ ΡΡΠ΅Π΄ΠΈ Π·Π° Π³Π΅Π½Π΅ΡΠΈΡΠ°ΡΠ΅ ΠΏΡΠ΅Π²Π΄ΠΎ-ΡΠ»ΡΡΠ°ΡΠ½ΠΈ Π±ΡΠΎΠ΅Π²ΠΈ (β-DLIBCXX_ENABLE_RANDOM_DEVICE=OFFβ).
ΠΠ·Π²ΠΎΡ: opennet.ru