ΠžΠ±Ρ˜Π°Π²ΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΡ‚ ΠΊΠΎΠΌΠΏΠ°Ρ˜Π»Π΅Ρ€ LLVM 12.0

По ΡˆΠ΅ΡΡ‚ мСсСци Ρ€Π°Π·Π²ΠΎΡ˜, бСшС прСтставСно ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΡ‚ 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

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€