เบ›เปˆเบญเบเบŠเบธเบ”เบ„เบญเบกเบžเบตเบงเป€เบ•เบต GCC 12

เบซเบผเบฑเบ‡เบˆเบฒเบเบซเบ™เบถเปˆเบ‡เบ›เบตเบ‚เบญเบ‡เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒ, เบŠเบธเบ” compiler เบŸเบฃเบต 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 ++. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเปเบฒเบฅเบฑเบš "เบ–เป‰เบฒ consteval" เป„เบ”เป‰เบ–เบทเบเป€เบžเบตเปˆเบก; เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เปƒเบŠเป‰เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เปƒเบ™เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบŸเบฑเบ‡เบŠเบฑเบ™ (โ€œf(auto(g()))โ€); เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ•เบปเบงเปเบ›เบ—เบตเปˆเบšเปเปˆเปเบกเปˆเบ™เบ•เบปเบงเปเบ›, goto เปเบฅเบฐเบ›เป‰เบฒเบเบŠเบทเปˆเปเบกเปˆเบ™เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบขเบนเปˆเปƒเบ™เบซเบ™เป‰เบฒเบ—เบตเปˆเบ›เบฐเบเบฒเบ”เบงเปˆเบฒเป€เบ›เบฑเบ™ constexpr; เป€เบžเบตเปˆเบกเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ”เบฑเบ”เบชเบฐเบ™เบตเบซเบผเบฒเบเบกเบดเบ•เบดเบฅเบฐเบ”เบฑเบš[]; in if, for and switch, เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เบ‚เบญเบ‡เบ—เปˆเบญเบ™เป„เบกเป‰เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™เป„เบ”เป‰เบ–เบทเบเบ‚เบฐเบซเบเบฒเบเบญเบญเบ (โ€œเบชเปเบฒเบฅเบฑเบš (เปƒเบŠเป‰ 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 frontend เบชเบฐเบซเบ™เบญเบ‡เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบขเปˆเบฒเบ‡เป€เบ•เบฑเบกเบ—เบตเปˆเบชเปเบฒเบฅเบฑเบšเบ‚เปเป‰เบเปเบฒเบ™เบปเบ” TS 29113, เป€เบŠเบดเปˆเบ‡เบญเบฐเบ—เบดเบšเบฒเบเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบเบฒเบ™เป€เบ„เบทเปˆเบญเบ™เบ—เบตเปˆเบฅเบฐเบซเบงเปˆเบฒเบ‡เบฅเบฐเบซเบฑเบ” Fortran เปเบฅเบฐ C.
  • เป€เบžเบตเปˆเบกเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเปเบฒเบฅเบฑเบšเบชเปˆเบงเบ™เบ‚เบฐเบซเบเบฒเบ __builtin_shufflevector(vec1, vec2, index1, index2, ...) เบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰เป„เบ”เป‰เป€เบžเบตเปˆเบกเป€เบ‚เบปเป‰เบฒเปƒเบ™ Clang, เป€เบŠเบดเปˆเบ‡เบชเบฐเบซเบ™เบญเบ‡เบเบฒเบ™เป‚เบ—เบ”เบฝเบงเป€เบžเบทเปˆเบญเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบชเบฑเปˆเบ™ vector เปเบฅเบฐ shuffle เบ—เบปเปˆเบงเป„เบ›.
  • เป€เบกเบทเปˆเบญเปƒเบŠเป‰เบฅเบฐเบ”เบฑเบšเบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš "-O2", vectorization เบ–เบทเบเป€เบ›เบตเบ”เปƒเบŠเป‰เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™ (the -ftree-vectorize and -fvect-cost-model=very-cheap modes are enabled). เบฎเบนเบšเปเบšเบšเบ—เบตเปˆเบกเบตเบฅเบฒเบ„เบฒเบ–เบทเบเบซเบผเบฒเบเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰ vectorization เบžเบฝเบ‡เปเบ•เปˆเบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒเบฅเบฐเบซเบฑเบ” vector เบขเปˆเบฒเบ‡เบชเบปเบกเบšเบนเบ™เบชเบฒเบกเบฒเบ”เบ—เบปเบ”เปเบ—เบ™เบฅเบฐเบซเบฑเบ” scalar เป€เบ›เบฑเบ™ vectorized.
  • เป€เบžเบตเปˆเบกเป‚เปเบ” "-ftrivial-auto-var-init" เป€เบžเบทเปˆเบญเป€เบ›เบตเบ”เปƒเบŠเป‰เบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบขเปˆเบฒเบ‡เบˆเบฐเปเบˆเป‰เบ‡เบ‚เบญเบ‡เบ•เบปเบงเปเบ›เปƒเบ™ stack เป€เบžเบทเปˆเบญเบ•เบดเบ”เบ•เบฒเบกเบšเบฑเบ™เบซเบฒ เปเบฅเบฐ เบšเบฅเบฑเบญเบเบŠเปˆเบญเบ‡เป‚เบซเบงเปˆเบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบเบฒเบ™เปƒเบŠเป‰เบ•เบปเบงเปเบ›เบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เปƒเบŠเป‰.
  • เบชเปเบฒเบฅเบฑเบšเบžเบฒเบชเบฒ C เปเบฅเบฐ C++, เบŸเบฑเบ‡เบŠเบฑเบ™ __builtin_dynamic_object_size เป„เบ”เป‰เบ–เบทเบเป€เบžเบตเปˆเบกเป€เบ‚เบปเป‰เบฒเปƒเบ™เบเบฒเบ™เบเปเบฒเบ™เบปเบ”เบ‚เบฐเบซเบ™เบฒเบ”เบ‚เบญเบ‡เบงเบฑเบ”เบ–เบธ, เป€เบ‚เบปเป‰เบฒเบเบฑเบ™เป„เบ”เป‰เบเบฑเบšเบŸเบฑเบ‡เบŠเบฑเบ™เบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบˆเบฒเบ Clang.
  • เบชเปเบฒเบฅเบฑเบšเบžเบฒเบชเบฒ C เปเบฅเบฐ C ++, เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเปเบฒเบฅเบฑเบšเบ„เบธเบ™เบฅเบฑเบเบชเบฐเบ™เบฐ "เบšเปเปˆเบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป„เบ”เป‰" เป„เบ”เป‰เบ–เบทเบเป€เบžเบตเปˆเบก (เบ•เบปเบงเบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบซเบกเบฒเบเบซเบ™เป‰เบฒเบ—เบตเปˆเบ—เบตเปˆเบˆเบฐเบชเป‰เบฒเบ‡เบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบžเบฐเบเบฒเบเบฒเบกเปƒเบŠเป‰เบžเบงเบเบกเบฑเบ™).
  • เบชเปเบฒเบฅเบฑเบšเบžเบฒเบชเบฒ C เปเบฅเบฐ C ++, เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบเบฒเบ™เบ›เบธเบ‡เปเบ•เปˆเบ‡เบ„เปเบฒเบชเบฑเปˆเบ‡ "#elifdef" เปเบฅเบฐ "#elifdef" เป„เบ”เป‰เบ–เบทเบเป€เบžเบตเปˆเบก.
  • เป€เบžเบตเปˆเบก "-Wbidi-chars" เบ—เบธเบ‡เป€เบžเบทเปˆเบญเบชเบฐเปเบ”เบ‡เบ„เปเบฒเป€เบ•เบทเบญเบ™เบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒเบ•เบปเบงเบญเบฑเบเบชเบญเบ™ UTF-8 เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡, เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ„เปเบฒเบชเบฑเปˆเบ‡เปƒเบ™เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบ‚เปเป‰เบ„เบงเบฒเบก bidirectional.
  • เป€เบžเบตเปˆเบกเบ—เบธเบ‡ "-Warray-compare" เป€เบžเบทเปˆเบญเป€เบ•เบทเบญเบ™เป€เบกเบทเปˆเบญเบžเบฐเบเบฒเบเบฒเบกเบ›เบฝเบšเบ—เบฝเบš operands เบชเบญเบ‡เบญเบฑเบ™เบ—เบตเปˆเบญเป‰เบฒเบ‡เบญเบตเบ‡เป€เบ–เบดเบ‡ arrays.
  • เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™ OpenMP 5.0 เปเบฅเบฐ 5.1 (Open Multi-Processing), เป€เบŠเบดเปˆเบ‡เบเปเบฒเบ™เบปเบ” API เปเบฅเบฐเบงเบดเบ—เบตเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบงเบดเบ—เบตเบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบกเบ‚เบฐเบซเบ™เบฒเบ™เปƒเบ™เบฅเบฐเบšเบปเบš multi-core เปเบฅเบฐ hybrid (CPU + GPU / DSP) เบ—เบตเปˆเบกเบตเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ—เบตเปˆเปƒเบŠเป‰เบฎเปˆเบงเบกเบเบฑเบ™เปเบฅเบฐ vectorization (SIMD) , เป„เบ”เป‰เบชเบทเบšเบ•เปเปˆ.
  • เบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบเปเบฒเบ™เบปเบ”เป‚เบ„เบ‡เบเบฒเบ™เปเบšเบšเบ‚เบฐเบซเบ™เบฒเบ™ OpenACC 2.6, เป€เบŠเบดเปˆเบ‡เบเปเบฒเบ™เบปเบ”เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‡เบฒเบ™ offloading เปƒเบ™ GPUs เปเบฅเบฐเป‚เบ›เป€เบŠเบ”เป€เบŠเบตเบžเบดเป€เบชเบ”เป€เบŠเบฑเปˆเบ™ NVIDIA PTX.
  • เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบ‚เบฐเบซเบเบฒเบ Intel AVX86-FP512 เปเบฅเบฐเบ›เบฐเป€เบžเบ” _Float16 เป„เบ”เป‰เบ–เบทเบเป€เบžเบตเปˆเบกเป€เบ‚เบปเป‰เบฒเปƒเบ™ backend เบเบฒเบ™เบชเป‰เบฒเบ‡เบฅเบฐเบซเบฑเบ”เบชเปเบฒเบฅเบฑเบšเบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐ x16.
  • เบชเปเบฒเบฅเบฑเบšเบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒ x86, เบเบฒเบ™เบ›เป‰เบญเบ‡เบเบฑเบ™เป„เบ”เป‰เบ–เบทเบเป€เบžเบตเปˆเบกเบ•เปเปˆเบเบฑเบšเบŠเปˆเบญเบ‡เป‚เบซเบงเปˆเปƒเบ™เป‚เบ›เป€เบŠเบ”เป€เบŠเบตเบ—เบตเปˆเป€เบเบตเบ”เบˆเบฒเบเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ„เบฒเบ”เป€เบ”เบปเบฒเบ‚เบญเบ‡เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เบ‚เป‰เบฒเบกเป„เบ›เบ‚เป‰เบฒเบ‡เบซเบ™เป‰เบฒเบ—เบตเปˆเบšเปเปˆเบกเบตเป€เบ‡เบทเปˆเบญเบ™เป„เบ‚. เบšเบฑเบ™เบซเบฒเป€เบเบตเบ”เบ‚เบถเป‰เบ™เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบเบฒเบ™เบ›เบฐเบกเบงเบ™เบœเบปเบ™เบ—เบฒเบ‡เบชเปˆเบงเบ™เบซเบ™เป‰เบฒเบ‚เบญเบ‡เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบ—เบฑเบ™เบ—เบตเบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบฒเบกเบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบชเบฒเบ‚เบฒเปƒเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ (SLS, Straight Line Speculation). เป€เบžเบทเปˆเบญเป€เบ›เบตเบ”เปƒเบŠเป‰เบเบฒเบ™เบ›เบปเบเบ›เป‰เบญเบ‡, เบ—เบฒเบ‡เป€เบฅเบทเบญเบ "-mharden-sls" เบ–เบทเบเบชเบฐเป€เบซเบ™เบต.
  • เป€เบžเบตเปˆเบกเบเบฒเบ™เบเบงเบ”เบซเบฒเบเบฒเบ™เปƒเบŠเป‰เบ•เบปเบงเปเบ›เบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เปƒเบŠเป‰เปƒเบ™เบ•เบปเบงเบงเบดเป€เบ„เบฒเบฐเบชเบฐเบ–เบดเบ”เบ—เบปเบ”เบฅเบญเบ‡. เป€เบžเบตเปˆเบกเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบฅเบฐเบซเบฑเบ”เบเบฒเบ™เบ›เบฐเบเบญเบšเปƒเบ™ inline inserts. เบ›เบฑเบšเบ›เบธเบ‡เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒ. เบฅเบฐเบซเบฑเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฐเบกเบงเบ™เบœเบปเบ™เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ‚เบญเบ‡เบชเบฐเบซเบผเบฑเบšเป„เบ”เป‰เบ–เบทเบเบ‚เบฝเบ™เบ„เบทเบ™เปƒเบซเบกเปˆ.
  • เป€เบžเบตเปˆเบก 30 เบเบฒเบ™เป‚เบ—เปƒเบซเบกเปˆเบเบฑเบš libgccjit, เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบ—เบตเปˆเปƒเบŠเป‰เบฎเปˆเบงเบกเบเบฑเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบฑเบ‡เบ•เบปเบงเบชเป‰เบฒเบ‡เบฅเบฐเบซเบฑเบ”เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบญเบทเปˆเบ™เป†เปเบฅเบฐเบ™เปเบฒเปƒเบŠเป‰เบกเบฑเบ™เป€เบžเบทเปˆเบญ JIT เบฅเบงเบšเบฅเบงเบก bytecode เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบฅเบฐเบซเบฑเบ”เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบ.
  • เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบเบปเบ™เป„เบ CO-RE (Compile Once - Run Everywhere) เป„เบ”เป‰เบ–เบทเบเป€เบžเบตเปˆเบกเป€เบ‚เบปเป‰เบฒเปƒเบ™ backend เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเป‰เบฒเบ‡ BPF bytecode, เป€เบŠเบดเปˆเบ‡เบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบฅเบงเบšเบฅเบงเบกเบฅเบฐเบซเบฑเบ”เบ‚เบญเบ‡เป‚เบ›เบฅเปเบเบฅเบก eBPF เบชเปเบฒเบฅเบฑเบš Linux kernel เป„เบ”เป‰เบžเบฝเบ‡เปเบ•เปˆเบ„เบฑเป‰เบ‡เบ”เบฝเบงเปเบฅเบฐเบ™เปเบฒเปƒเบŠเป‰เป€เบ„เบทเปˆเบญเบ‡เป‚เบซเบฅเบ”เบ—เบปเปˆเบงเป„เบ›เบžเบดเป€เบชเบ”เบ—เบตเปˆเบ”เบฑเบ”เปเบ›เบ‡. เป‚เบ›เบฃเปเบเบกเบ—เบตเปˆเป‚เบซเบฅเบ”เบกเบฒเปƒเบชเปˆเปƒเบ™ kernel เบ›เบฐเบˆเบธเบšเบฑเบ™ เปเบฅเบฐ BPF Types Format). CO-RE เปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบเบฒเบ™เป€เบ„เบทเปˆเบญเบ™เบ—เบตเปˆเบ‚เบญเบ‡เป‚เบ›เบฅเปเบเบฅเบก eBPF เบ—เบตเปˆเบ–เบทเบเบฅเบงเบšเบฅเบงเบก, เป€เบŠเบดเปˆเบ‡เบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เบžเบฝเบ‡เปเบ•เปˆเปƒเบ™เบชเบฐเบšเบฑเบšเบ‚เบญเบ‡ kernel เบ—เบตเปˆเบžเบงเบเป€เบ‚เบปเบฒเป„เบ”เป‰เบ–เบทเบเบฅเบงเบšเบฅเบงเบก, เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆเบ•เปเบฒเปเบซเบ™เปˆเบ‡เบ‚เบญเบ‡เบญเบปเบ‡เบ›เบฐเบเบญเบšเปƒเบ™เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ‚เปเป‰เบกเบนเบ™เบ›เปˆเบฝเบ™เบˆเบฒเบเบฎเบธเปˆเบ™เป„เบ›เบซเบฒเบฎเบธเปˆเบ™.
  • backend RISC-V เป€เบžเบตเปˆเบกเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเปเบฒเบฅเบฑเบšเบŠเบธเบ”เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเปƒเบซเบกเปˆเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ‚เบฐเบซเบเบฒเบเบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒ zba, zbb, zbc เปเบฅเบฐ zbs, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบชเปˆเบงเบ™เบ‚เบฐเบซเบเบฒเบ ISA เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ” vector เปเบฅเบฐ scalar. เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เบฎเบญเบ‡เบฎเบฑเบšเบชเบฐเป€เบžเบฒเบฐ RISC-V ISA 20191213. เบ—เบธเบ‡ -mtune=thead-c906 เป„เบ”เป‰เบ–เบทเบเป€เบžเบตเปˆเบกเป€เบ‚เบปเป‰เบฒเป€เบžเบทเปˆเบญเปƒเบซเป‰เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบชเปเบฒเบฅเบฑเบš T-HEAD c906 cores.
  • เบเบฒเบ™เบฎเบญเบ‡เบฎเบฑเบšเบ›เบฐเป€เบžเบ” __int128_t/integer(kind=16) เป„เบ”เป‰เบ–เบทเบเป€เบžเบตเปˆเบกเปƒเบชเปˆ backend เบเบฒเบ™เบชเป‰เบฒเบ‡เบฅเบฐเบซเบฑเบ”เบชเปเบฒเบฅเบฑเบš AMD GPUs เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒเบˆเบธเบฅเบฐเบžเบฒเบ GCN. เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเบ™เปเบฒเปƒเบŠเป‰เป€เบ–เบดเบ‡ 40 เบเบธเปˆเบกเบงเบฝเบเบ•เปเปˆเบซเบ™เปˆเบงเบเบ‡เบฒเบ™เบ„เบญเบกเบžเบดเบงเป€เบ•เบต (CU) เปเบฅเบฐเป€เบ–เบดเบ‡ 16 เบซเบ™เป‰เบฒเบ—เบตเปˆเปเบ™เบฐเบ™เปเบฒ (wavefront, เบŠเบธเบ”เบ‚เบญเบ‡เบเบฐเบ—เบนเป‰เบ›เบฐเบ•เบดเบšเบฑเบ”เปƒเบ™เบ‚เบฐเบซเบ™เบฒเบ™เป‚เบ”เบ SIMD Engine) เบ•เปเปˆเบเบธเปˆเบก. เบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰, เบžเบฝเบ‡เปเบ•เปˆเบซเบ™เบถเปˆเบ‡เบ‚เบญเบšเบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบ•เปเปˆ CU เป„เบ”เป‰เบ–เบทเบเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰.
  • NVPTX backend, เบ–เบทเบเบญเบญเบเปเบšเบšเบกเบฒเป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบฅเบฐเบซเบฑเบ”เป‚เบ”เบเปƒเบŠเป‰เบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒเบŠเบธเบ”เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒ NVIDIA PTX (Parallel Thread Execution), เป„เบ”เป‰เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ—เบธเบ‡ "-march", "-mptx" เปเบฅเบฐ "-march-map". เบฎเบญเบ‡เบฎเบฑเบš PTX ISA sm_53, sm_70, sm_75 เปเบฅเบฐ sm_80. เบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเบณเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปเบกเปˆเบ™ sm_30.
  • เปƒเบ™ backend เบชเปเบฒเบฅเบฑเบšเป‚เบ›เป€เบŠเบ”เป€เบŠเบต PowerPC / PowerPC64 / RS6000, เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบซเบ™เป‰เบฒเบ—เบตเปˆเบชเป‰เบฒเบ‡เบขเบนเปˆเปƒเบ™เป„เบ”เป‰เบ–เบทเบเบ‚เบฝเบ™เบ„เบทเบ™เปƒเบซเบกเปˆ. เบŸเบฑเบ‡เบŠเบฑเบ™เปƒเบ™เบ•เบปเบง __builtin_get_texasr, __builtin_get_texasru, __builtin_get_tfhar, __builtin_get_tfiar, __builtin_set_texasr, __builtin_set_texasru, __builtin_set_set_set_at.
  • เบฎเบญเบ‡เบฎเบฑเบš 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 เบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เปƒเบ™ compiler (Intrinsics) เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป‚เบซเบผเบ”เบ›เบฐเบฅเปเบฒเบกเบฐเบ™เบนเปเบฅเบฐเบ›เบฐเบซเบเบฑเบ”เบ‚เปเป‰เบกเบนเบ™เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ, เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒ ARM เบ‚เบฐเบซเบเบฒเบ (ls9). เป€เบžเบตเปˆเบกเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบฅเบฑเปˆเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡ memcpy, memmove เปเบฅเบฐ memset เป‚เบ”เบเปƒเบŠเป‰ mopsoption ARM extension.
  • เป€เบžเบตเปˆเบกเป‚เบซเบกเบ”เบเบฒเบ™เบเบงเบ”เบชเบญเบšเปƒเบซเบกเปˆ โ€œ-fsanitize=shadow-call-stackโ€ (ShadowCallStack), เป€เบŠเบดเปˆเบ‡เบ›เบฐเบˆเบธเบšเบฑเบ™เบกเบตเบžเบฝเบ‡เปเบ•เปˆเบชเปเบฒเบฅเบฑเบšเบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒ AArch64 เปเบฅเบฐเป€เบฎเบฑเบ”เบงเบฝเบเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบฅเบฐเบซเบฑเบ”เบญเบฒเบ„เบฒเบ™เบเบฑเบšเบ—เบฒเบ‡เป€เบฅเบทเบญเบ "-ffixed-r18". เป‚เบซเบกเบ”เบชเบฐเบซเบ™เบญเบ‡เบเบฒเบ™เบ›เป‰เบญเบ‡เบเบฑเบ™เบเบฒเบ™เบ‚เบฝเบ™เบ—เบฑเบšเบ—เบตเปˆเบขเบนเปˆเบชเบปเปˆเบ‡เบ„เบทเบ™เบˆเบฒเบเบŸเบฑเบ‡เบŠเบฑเบ™เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡ buffer overflow เปƒเบ™ stack. เป‚เบ”เบเป€เบ™เบทเป‰เบญเปเบ—เป‰เปเบฅเป‰เบงเบ‚เบญเบ‡เบเบฒเบ™เบ›เบปเบเบ›เป‰เบญเบ‡เปเบกเปˆเบ™เป€เบžเบทเปˆเบญเบšเบฑเบ™เบ—เบถเบเบ—เบตเปˆเบขเบนเปˆเบเบฑเบšเบ„เบทเบ™เปƒเบ™ stack "shadow" เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบเบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เป‚เบญเบ™เบเบฒเบ™เบ„เบงเบšเบ„เบธเบกเป„เบ›เบซเบฒเบซเบ™เป‰เบฒเบ—เบตเปˆเปƒเบ”เบซเบ™เบถเปˆเบ‡เปเบฅเบฐเบ”เบถเบ‡เป€เบญเบปเบฒเบ—เบตเปˆเบขเบนเปˆเบ™เบตเป‰เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบญเบญเบเบˆเบฒเบเบŸเบฑเบ‡เบŠเบฑเบ™.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: opennet.ru

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™