ΠŸΡƒΡΠΊΠ°Π½Π΅ Π½Π° компилаторния ΠΏΠ°ΠΊΠ΅Ρ‚ GCC 12

Π‘Π»Π΅Π΄ Π³ΠΎΠ΄ΠΈΠ½Π° Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, бСзплатният ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€Π΅Π½ ΠΏΠ°ΠΊΠ΅Ρ‚ GCC 12.1 бСшС пуснат, ΠΏΡŠΡ€Π²ΠΎΡ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ Π² новия ΠΊΠ»ΠΎΠ½ Π½Π° GCC 12.x. Π’ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΈΠ΅ с Π½ΠΎΠ²Π°Ρ‚Π° схСма Π·Π° Π½ΠΎΠΌΠ΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° изданията, вСрсия 12.0 бСшС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π° Π² процСса Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈ ΠΌΠ°Π»ΠΊΠΎ ΠΏΡ€Π΅Π΄ΠΈ ΠΈΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° GCC 12.1, ΠΊΠ»ΠΎΠ½ΡŠΡ‚ Π½Π° GCC 13.0 Π²Π΅Ρ‡Π΅ сС Ρ€Π°Π·ΠΊΠ»ΠΎΠ½ΠΈ, Π½Π° Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΊΠΎΠΉΡ‚ΠΎ слСдващото голямо ΠΈΠ·Π΄Π°Π½ΠΈΠ΅, GCC 13.1, Ρ‰Π΅ Π΄Π° сС Ρ„ΠΎΡ€ΠΌΠΈΡ€Π°. На 23 ΠΌΠ°ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ Ρ‰Π΅ ΠΎΡ‚Π±Π΅Π»Π΅ΠΆΠΈ 35 Π³ΠΎΠ΄ΠΈΠ½ΠΈ ΠΎΡ‚ ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΡŠΡ€Π²ΠΎΡ‚ΠΎ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ Π½Π° GCC.

Основни ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ:

  • Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° CTF (Compact Type Format) Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π·Π° отстраняванС Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ, ΠΊΠΎΠΉΡ‚ΠΎ осигурява ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΎ ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π½Π° информация Π·Π° C Ρ‚ΠΈΠΏΠΎΠ²Π΅, Π²Ρ€ΡŠΠ·ΠΊΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ символи Π·Π° отстраняванС Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ. ΠšΠΎΠ³Π°Ρ‚ΠΎ Π΅ Π²Π³Ρ€Π°Π΄Π΅Π½ Π² ELF ΠΎΠ±Π΅ΠΊΡ‚ΠΈ, Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΡŠΡ‚ позволява ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° EFL символни Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ, Π·Π° Π΄Π° сС ΠΈΠ·Π±Π΅Π³Π½Π΅ Π΄ΡƒΠ±Π»ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π΄Π°Π½Π½ΠΈ.
  • ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°Ρ‚Π° Π½Π° Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π·Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π½Π° информация Π·Π° отстраняванС Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ "STABS", създадСн ΠΏΡ€Π΅Π· 1980 Π³., Π΅ ΠΎΡ‚Ρ…Π²ΡŠΡ€Π»Π΅Π½Π°.
  • ΠŸΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ°Π²Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° ΠΏΠΎ Ρ€Π°Π·ΡˆΠΈΡ€ΡΠ²Π°Π½Π΅ Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°Ρ‚Π° Π·Π° Π±ΡŠΠ΄Π΅Ρ‰ΠΈ стандарти C2X ΠΈ C++23 Π·Π° Π΅Π·ΠΈΡ†ΠΈΡ‚Π΅ C ΠΈ C++. НапримСр, Π΄ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° ΠΈΠ·Ρ€Π°Π·Π° β€žif constevalβ€œ; ΠΏΠΎΠ·Π²ΠΎΠ»Π΅Π½ΠΎ Π΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° auto Π² Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ‚Π΅ Π½Π° функцията (β€œf(auto(g()))”); ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π½Π΅Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π½ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ, goto ΠΈ Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈ Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»Π΅Π½ΠΎ във Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€Π°Π½ΠΈ ΠΊΠ°Ρ‚ΠΎ constexpr; Π΄ΠΎΠ±Π°Π²Π΅Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½ΠΈ индСксни ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΈ operator[]; Π² if, for ΠΈ switch, Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈΡ‚Π΅ Π½Π° Π±Π»ΠΎΠΊΠΎΠ²Π΅Ρ‚Π΅ Π·Π° инициализация са Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈ (β€žfor (ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ T = int; T e : v)β€œ).
  • Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Π°Ρ‚Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π½Π° C++ ΠΈΠΌΠ° ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° СкспСримСнталнитС сСкции Π½Π° стандартитС C++20 ΠΈ C++23. Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° std::move_only_function, , std::basic_string::resize_and_overwrite, , ΠΈ std::invoke_r. Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° std::unique_ptr, std::vector, std::basic_string, std::optional ΠΈ std::variant във Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅ constexpr.
  • ΠŸΡ€Π΅Π΄Π½ΠΈΡΡ‚ интСрфСйс Π½Π° Fortran осигурява пълна ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° спСцификацията TS 29113, която описва Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ Π·Π° осигуряванС Π½Π° прСносимост ΠΌΠ΅ΠΆΠ΄Ρƒ Fortran ΠΈ C ΠΊΠΎΠ΄.
  • Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΠ΅Ρ‚ΠΎ __builtin_shufflevector(vec1, vec2, index1, index2, ...), Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΎ ΠΏΠΎ-Ρ€Π°Π½ΠΎ към Clang, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΏΡ€Π΅Π΄Π»Π°Π³Π° Π΅Π΄Π½ΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π·Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅ Π½Π° ΠΎΠ±Ρ‰ΠΈ Π²Π΅ΠΊΡ‚ΠΎΡ€Π½ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π·Π° Ρ€Π°Π·Π±ΡŠΡ€ΠΊΠ²Π°Π½Π΅ ΠΈ Ρ€Π°Π·Π±ΡŠΡ€ΠΊΠ²Π°Π½Π΅.
  • ΠšΠΎΠ³Π°Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Π½ΠΈΠ²ΠΎΡ‚ΠΎ Π½Π° оптимизация "-O2", вСкторизацията Π΅ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π° ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ (Ρ€Π΅ΠΆΠΈΠΌΠΈΡ‚Π΅ -ftree-vectorize ΠΈ -fvect-cost-model=very-cheap са Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ΠΈ). Много Свтиният ΠΌΠΎΠ΄Π΅Π» позволява вСкторизация само Π°ΠΊΠΎ вСкторният ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅ напълно Π΄Π° Π·Π°ΠΌΠ΅Π½ΠΈ скаларния ΠΊΠΎΠ΄, ΠΊΠΎΠΉΡ‚ΠΎ сС Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠ·ΠΈΡ€Π°.
  • Π”ΠΎΠ±Π°Π²Π΅Π½ Π΅ Ρ€Π΅ΠΆΠΈΠΌ β€ž-ftrivial-auto-var-initβ€œ, Π·Π° Π΄Π° сС Π΄Π°Π΄Π΅ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° ΠΈΠ·Ρ€ΠΈΡ‡Π½Π° инициализация Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π² стСка Π·Π° прослСдяванС Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ ΠΈ Π±Π»ΠΎΠΊΠΈΡ€Π°Π½Π΅ Π½Π° уязвимости, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ с ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ.
  • Π—Π° Π΅Π·ΠΈΡ†ΠΈΡ‚Π΅ C ΠΈ C++ Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° Π²Π³Ρ€Π°Π΄Π΅Π½Π° функция __builtin_dynamic_object_size Π·Π° опрСдСлянС Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π½Π° ΠΎΠ±Π΅ΠΊΡ‚, ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠ° с ΠΏΠΎΠ΄ΠΎΠ±Π½Π° функция ΠΎΡ‚ Clang.
  • Π—Π° Π΅Π·ΠΈΡ†ΠΈΡ‚Π΅ C ΠΈ C++ Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° β€žunavailableβ€œ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°Ρ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Ρ‰Π΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Ρ‚ Π³Ρ€Π΅ΡˆΠΊΠ°, Π°ΠΊΠΎ сС ΠΎΠΏΠΈΡ‚Π°Ρ‚Π΅ Π΄Π° Π³ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅).
  • Π—Π° Π΅Π·ΠΈΡ†ΠΈΡ‚Π΅ C ΠΈ C++ Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΈ Π·Π° ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° β€ž#elifdefβ€œ ΠΈ β€ž#elifndefβ€œ.
  • Π”ΠΎΠ±Π°Π²Π΅Π½ Π΅ Ρ„Π»Π°Π³ "-Wbidi-chars" Π·Π° ΠΏΠΎΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅, Π°ΠΊΠΎ Π·Π½Π°Ρ†ΠΈΡ‚Π΅ UTF-8 сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ, промСняйки Ρ€Π΅Π΄Π°, Π² ΠΊΠΎΠΉΡ‚ΠΎ сС ΠΏΠΎΠΊΠ°Π·Π²Π° двупосочният тСкст.
  • Π”ΠΎΠ±Π°Π²Π΅Π½ Π΅ Ρ„Π»Π°Π³ "-Warray-compare" Π·Π° ΠΏΠΎΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ ΠΎΠΏΠΈΡ‚ Π·Π° сравняванС Π½Π° Π΄Π²Π° ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π°, ΠΊΠΎΠΈΡ‚ΠΎ сС отнасят Π΄ΠΎ масиви.
  • ВнСдряванСто Π½Π° стандартитС OpenMP 5.0 ΠΈ 5.1 (Open Multi-Processing), ΠΊΠΎΠΈΡ‚ΠΎ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Ρ‚ API ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‚Π΅ Π·Π° ΠΏΡ€ΠΈΠ»Π°Π³Π°Π½Π΅ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ Π·Π° ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π½Π° многоядрСни ΠΈ Ρ…ΠΈΠ±Ρ€ΠΈΠ΄Π½ΠΈ (CPU+GPU/DSP) систСми със сподСлСна ΠΏΠ°ΠΌΠ΅Ρ‚ ΠΈ Π΅Π΄ΠΈΠ½ΠΈΡ†ΠΈ Π·Π° вСкторизация (SIMD) , ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈ.
  • ΠŸΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½Π° рСализация Π½Π° спСцификацията Π·Π° ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ OpenACC 2.6, която Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π° инструмСнти Π·Π° Ρ€Π°Π·Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Ρ‰ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π° GPU ΠΈ спСциализирани процСсори ΠΊΠ°Ρ‚ΠΎ NVIDIA PTX.
  • ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈ инструкции Intel AVX86-FP512 ΠΈ Ρ‚ΠΈΠΏ _Float16 Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° към Π±Π΅ΠΊΠ΅Π½Π΄Π° Π·Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΊΠΎΠ΄ Π·Π° x16 Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ‚Π°.
  • Π—Π° x86 Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ‚Π° Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° Π·Π°Ρ‰ΠΈΡ‚Π° срСщу уязвимости Π² процСсоритС, ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅Π½ΠΈ ΠΎΡ‚ спСкулативно изпълнСниС Π½Π° инструкции слСд бСзусловни ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π·Π° прСскачанС Π½Π°ΠΏΡ€Π΅Π΄. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚ възниква ΠΏΠΎΡ€Π°Π΄ΠΈ ΠΏΡ€Π΅Π²Π°Π½Ρ‚ΠΈΠ²Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° инструкции, нСпосрСдствСно слСдващи инструкцията Π·Π° разклоняванС Π² ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° (SLS, Straight Line Speculation). Π—Π° Π΄Π° Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Ρ‚Π΅ Π·Π°Ρ‰ΠΈΡ‚Π°Ρ‚Π°, сС ΠΏΡ€Π΅Π΄Π»Π°Π³Π° опцията β€ž-mharden-slsβ€œ.
  • Π”ΠΎΠ±Π°Π²Π΅Π½ΠΎ ΠΎΡ‚ΠΊΡ€ΠΈΠ²Π°Π½Π΅ Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ към СкспСримСнталния статичСн Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€. Π”ΠΎΠ±Π°Π²Π΅Π½Π° ΠΏΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° асСмблСрния ΠΊΠΎΠ΄ във Π²Π³Ρ€Π°Π΄Π΅Π½ΠΈ вмъквания. ΠŸΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½ΠΎ прослСдяванС Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°. ΠšΠΎΠ΄ΡŠΡ‚ Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° ΠΈΠ·Ρ€Π°Π·ΠΈ Π·Π° ΠΏΡ€Π΅Π²ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ Π΅ прСнаписан.
  • Π”ΠΎΠ±Π°Π²Π΅Π½ΠΈ са 30 Π½ΠΎΠ²ΠΈ извиквания към libgccjit, сподСлСна Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π° Π²Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ Π½Π° ΠΊΠΎΠ΄ Π² Π΄Ρ€ΡƒΠ³ΠΈ процСси ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ ΠΌΡƒ Π·Π° JIT ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅ Π½Π° Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄ Π² машинСн ΠΊΠΎΠ΄.
  • ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°Ρ‚Π° Π½Π° ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° CO-RE (Compile Once - Run Everywhere) Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° към Π±Π΅ΠΊΠ΅Π½Π΄Π° Π·Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° BPF Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄, ΠΊΠΎΠΉΡ‚ΠΎ Π²ΠΈ позволява Π΄Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Ρ‚Π΅ ΠΊΠΎΠ΄Π° Π½Π° eBPF ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ‚Π΅ Π·Π° Linux ядрото само вСднъТ ΠΈ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ спСциалСн унивСрсалСн Ρ‚ΠΎΠ²Π°Ρ€Π°Ρ‡, ΠΊΠΎΠΉΡ‚ΠΎ Π°Π΄Π°ΠΏΡ‚ΠΈΡ€Π° Π·Π°Ρ€Π΅Π΄Π΅Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° към Ρ‚Π΅ΠΊΡƒΡ‰ΠΎΡ‚ΠΎ ядро ​​и BPF Types Format). CO-RE Ρ€Π΅ΡˆΠ°Π²Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с прСносимостта Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½ΠΈΡ‚Π΅ eBPF ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΈ Ρ‚ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅Ρ…Π° Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ само във вСрсията Π½Π° ядрото, Π·Π° която бяха ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½ΠΈ, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ позицията Π½Π° Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ‚Π΅ Π² структуритС ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ сС промСня ΠΎΡ‚ вСрсия Π½Π° вСрсия.
  • Π‘Π΅ΠΊΠ΅Π½Π΄ΡŠΡ‚ Π½Π° RISC-V добавя ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° Π½ΠΎΠ²ΠΈ Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΡ Π½Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ‚Π° Π½Π° Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ инструкции zba, zbb, zbc ΠΈ zbs, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΡ ISA Π·Π° Π²Π΅ΠΊΡ‚ΠΎΡ€Π½ΠΈ ΠΈ скаларни криптографски ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. По ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π΅ осигурСна ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° спСцификацията RISC-V ISA 20191213. Π€Π»Π°Π³ΡŠΡ‚ -mtune=thead-c906 Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½, Π·Π° Π΄Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π·Π° ядрата T-HEAD c906.
  • ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°Ρ‚Π° Π·Π° Ρ‚ΠΈΠΏΠ° __int128_t/integer(kind=16) Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° към Π±Π΅ΠΊΠ΅Π½Π΄Π° Π·Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΊΠΎΠ΄ Π·Π° AMD Π³Ρ€Π°Ρ„ΠΈΡ‡Π½ΠΈ процСсори, Π±Π°Π·ΠΈΡ€Π°Π½ΠΈ Π½Π° ΠΌΠΈΠΊΡ€ΠΎΠ°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ‚Π° GCN. Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π΄ΠΎ 40 Ρ€Π°Π±ΠΎΡ‚Π½ΠΈ Π³Ρ€ΡƒΠΏΠΈ Π½Π° изчислитСлна Π΅Π΄ΠΈΠ½ΠΈΡ†Π° (CU) ΠΈ Π΄ΠΎ 16 Ρ„Ρ€ΠΎΠ½Ρ‚Π° Π½Π° инструкции (wavefront, Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ нишки, изпълнявани ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½ΠΎ ΠΎΡ‚ SIMD Engine) Π½Π° Π³Ρ€ΡƒΠΏΠ°. ΠŸΡ€Π΅Π΄ΠΈ Ρ‚ΠΎΠ²Π° бСшС Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ само Π΅Π΄ΠΈΠ½ ΠΊΡ€Π°ΠΉ Π½Π° инструкция Π·Π° CU.
  • Π‘Π΅ΠΊΠ΅Π½Π΄ΡŠΡ‚ Π½Π° NVPTX, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ Π΄Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° ΠΊΠΎΠ΄ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ‚Π° Π½Π° Π½Π°Π±ΠΎΡ€Π° ΠΎΡ‚ инструкции NVIDIA PTX (Parallel Thread Execution), Π΄ΠΎΠ±Π°Π²ΠΈ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Ρ„Π»Π°Π³ΠΎΠ²Π΅Ρ‚Π΅ β€ž-marchβ€œ, β€ž-mptxβ€œ ΠΈ β€ž-march-mapβ€œ. Π Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° PTX ISA sm_53, sm_70, sm_75 ΠΈ sm_80. АрхитСктурата ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π΅ sm_30.
  • Π’ Π±Π΅ΠΊΠ΅Π½Π΄Π° Π·Π° процСсори PowerPC / PowerPC64 / RS6000 Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈΡ‚Π΅ Π½Π° Π²Π³Ρ€Π°Π΄Π΅Π½ΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ са прСнаписани. Π’Π³Ρ€Π°Π΄Π΅Π½ΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ __builtin_get_texasr, __builtin_get_texasru, __builtin_get_tfhar, __builtin_get_tfiar, __builtin_set_texasr, __builtin_set_texasru, __builtin_set_tfhar ΠΈ __builtin_set_tfiar са Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°Π½ΠΈ.
  • ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° Arm Ampere-64 (-mcpu/-mtune ampere1), Arm Cortex-A1 (cortex-a510), Arm Cortex-A510 (cortex-a710) ΠΈ Arm Cortex-X710 (cortex-x2). Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° Π½ΠΎΠ²ΠΈ ΠΎΠΏΡ†ΠΈΠΈ Π·Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° ARMv2 Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ с опцията "-march": armv8-a, armv8.7-a, armv8.8-a. Π”ΠΎΠ±Π°Π²Π΅Π½Π° рСализация Π½Π° C Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π²Π³Ρ€Π°Π΄Π΅Π½ΠΈ Π² ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€Π° (Intrinsics) Π·Π° Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎ Π·Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅ ΠΈ записванС Π½Π° Π΄Π°Π½Π½ΠΈ Π² ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°, въз основа Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈ ARM инструкции (ls9). Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° ускоряванС Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅ memcpy, memmove ΠΈ memset с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΠ΅Ρ‚ΠΎ mopsoption ARM.
  • Π”ΠΎΠ±Π°Π²Π΅Π½ Π΅ Π½ΠΎΠ² Ρ€Π΅ΠΆΠΈΠΌ Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° β€ž-fsanitize=shadow-call-stackβ€œ (ShadowCallStack), ΠΊΠΎΠΉΡ‚ΠΎ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π΅ Π΄ΠΎΡΡ‚ΡŠΠΏΠ΅Π½ само Π·Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ‚Π° AArch64 ΠΈ Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΏΡ€ΠΈ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΊΠΎΠ΄ с опцията β€ž-ffixed-r18β€œ. Π Π΅ΠΆΠΈΠΌΡŠΡ‚ осигурява Π·Π°Ρ‰ΠΈΡ‚Π° срСщу прСзаписванС Π½Π° адрСса Π·Π° Π²Ρ€ΡŠΡ‰Π°Π½Π΅ ΠΎΡ‚ функция Π² случай Π½Π° ΠΏΡ€Π΅ΠΏΡŠΠ»Π²Π°Π½Π΅ Π½Π° Π±ΡƒΡ„Π΅Ρ€Π° Π² стСка. Π‘ΡŠΡ‰Π½ΠΎΡΡ‚Ρ‚Π° Π½Π° Π·Π°Ρ‰ΠΈΡ‚Π°Ρ‚Π° Π΅ Π΄Π° Π·Π°ΠΏΠ°Π·ΠΈ адрСса Π·Π° Π²Ρ€ΡŠΡ‰Π°Π½Π΅ Π² ΠΎΡ‚Π΄Π΅Π»Π΅Π½ стСк β€žΡΡΠ½ΠΊΠ°β€œ слСд ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΡΠ½Π΅ Π½Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π° към функция ΠΈ ΠΈΠ·Π²Π»ΠΈΡ‡Π°Π½Π΅ Π½Π° Ρ‚ΠΎΠ·ΠΈ адрСс ΠΏΡ€Π΅Π΄ΠΈ ΠΈΠ·Π»ΠΈΠ·Π°Π½Π΅ ΠΎΡ‚ функцията.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€