LLVM 15.0 සම්පාදක කට්ටලය නිකුත් කිරීම

මාස හයක සංවර්ධනයෙන් පසු, LLVM 15.0 ව්‍යාපෘතිය නිකුතුව ඉදිරිපත් කරන ලදී - GCC-අනුකූල මෙවලම් කට්ටලයක් (සම්පාදක, ප්‍රශස්තිකරණ සහ කේත උත්පාදක) RISC වැනි අතථ්‍ය උපදෙස් වල අතරමැදි බිට්කෝඩ් බවට වැඩසටහන් සම්පාදනය කරයි (පහළ මට්ටමේ අතථ්‍ය යන්ත්‍රයක් සහිත ය. බහු මට්ටමේ ප්රශස්තකරණ පද්ධතිය). උත්පාදනය කරන ලද ව්‍යාජ කේත JIT සම්පාදකයක් භාවිතයෙන් වැඩසටහන ක්‍රියාත්මක කරන අවස්ථාවේදී සෘජුවම යන්ත්‍ර උපදෙස් බවට පරිවර්තනය කළ හැක.

Clang 15.0 හි ප්‍රධාන වැඩිදියුණු කිරීම්:

  • x86 ගෘහ නිර්මාණ ශිල්පය මත පදනම් වූ පද්ධති සඳහා, “-fzero-call-used-regs” ධජය එක් කර ඇත, එමඟින් ශ්‍රිතයේ භාවිතා වන සියලුම CPU රෙජිස්ටර් ශ්‍රිතයෙන් පාලනය ආපසු පැමිණීමට පෙර ශුන්‍යයට යළි පිහිටුවීම සහතික කරයි. මෙම විකල්පය මඟින් ඔබට කාර්යයන් වලින් තොරතුරු කාන්දු වීමෙන් ආරක්ෂා වීමටත් ROP (Return-Oriented Programming) ගැජට් සූරාකෑමට සුදුසු බ්ලොක් ගණන 20% කින් පමණ අඩු කිරීමටත් ඉඩ සලසයි.
  • සී කේතය සඳහා ව්‍යුහයන්ගේ මතක ස්ථානගත කිරීම සසම්භාවී කිරීම ක්‍රියාවට නංවා ඇති අතර, දුර්වලතා සූරාකෑමේ අවස්ථාවක ව්‍යුහයන්ගෙන් දත්ත ලබා ගැනීම සංකීර්ණ කරයි. randomize_layout සහ no_randomize_layout ගුණාංග භාවිතයෙන් සසම්භාවීකරණය සක්‍රිය සහ අක්‍රිය කර ඇති අතර, "-frandomize-layout-seed" හෝ "-frandomize-layout-seed-file" ධජය භාවිතයෙන් බීජයක් සැකසීම අවශ්‍ය වේ.
  • "-fstrict-flex-arrays=" ධජය එකතු කරන ලදී ", ඔබට ව්‍යුහවල නම්‍යශීලී අරා මූලද්‍රව්‍ය සඳහා මායිම් පාලනය කළ හැකිය (නම්‍යශීලී අරා සාමාජිකයින්, ව්‍යුහයේ අවසානයේ ඇති අවිනිශ්චිත ප්‍රමාණයේ අරාවකි). 0 (පෙරනිමිය) ලෙස සැකසූ විට, අරාවක් සහිත ව්‍යුහයේ අවසාන මූලද්‍රව්‍යය සෑම විටම නම්‍යශීලී අරාවක් ලෙස සකසනු ලැබේ, 1 - ප්‍රමාණ පමණක් [], [0] සහ [1] නම්‍යශීලී අරාවක් ලෙස සකසනු ලැබේ, 2 - ප්‍රමාණයන් පමණි. [] සහ [0] නම්‍යශීලී අරාවක් මෙන් සකසනු ලැබේ.
  • DirectX හි සෙවනැලි ලිවීම සඳහා භාවිතා කරන C-වැනි භාෂාව HLSL (High-Level Shader Language) සඳහා පර්යේෂණාත්මක සහය එක් කරන ලදී.
  • ස්ථාවර සහ විචල්‍ය දිග අරාවන් හා සම්බන්ධ නොගැලපෙන තර්ක ප්‍රකාශන සමඟ ශ්‍රිත අභිබවා යාම ගැන අනතුරු ඇඟවීමට "-Warray-parameter" එක් කරන ලදී.
  • MSVC සමඟ වැඩි දියුණු කළ ගැළපුම. MSVC හි සපයා ඇති "#ප්‍රග්මා ශ්‍රිතය" (ඉන්ලයින් ප්‍රසාරණය වෙනුවට ශ්‍රිත ඇමතුමක් උත්පාදනය කිරීමට සම්පාදකයාට උපදෙස් දෙයි) සහ "#ප්‍රග්මා ඇලෝක්_පෙළ" (ශ්‍රිත කේතය සහිත කොටසේ නම නිර්වචනය කරයි) සඳහා සහය එක් කරන ලදී. MSVC-අනුකූල /JMC සහ /JMC කොඩි සඳහා සහය එක් කරන ලදී.
  • අනාගත C2X සහ C++23 ප්‍රමිතීන්ට සහය දැක්වීම සඳහා වැඩ දිගටම කරගෙන යයි. C භාෂාව සඳහා, පහත සඳහන් දෑ ක්‍රියාත්මක වේ: noreturn ගුණාංගය, මූල පද අසත්‍ය සහ සත්‍ය, දී ඇති බිට් ගැඹුරක පූර්ණ සංඛ්‍යා සඳහා _BitInt(N) වර්ගය, *_WIDTH මැක්‍රෝස්, UTF-8 සංකේතිත අක්ෂර සඳහා u8 උපසර්ගය.

    C++ සඳහා, පහත සඳහන් දෑ ක්‍රියාත්මක වේ: මොඩියුල ඒකාබද්ධ කිරීම, ABI ක්‍රියාකාරී සාමාජිකයින් හුදකලා කිරීම, මොඩියුලවල දේශීය නොවන විචල්‍යයන් ඇණවුම් කළ ගතික ආරම්භය, බහුමාන දර්ශක ක්‍රියාකරුවන්, ස්වයංක්‍රීය (x), අක්ෂර නොවන විචල්‍යයන්, constexpr ලෙස ප්‍රකාශිත ශ්‍රිතවල goto සහ ලේබල් , සීමා කළ ගැලවීමේ අනුපිළිවෙල, පලා යන අක්ෂර ලෙස නම් කර ඇත.

  • OpenCL සහ OpenMP සහාය සමඟ සම්බන්ධිත හැකියාවන් පුළුල් කර ඇත. OpenCL දිගුව cl_khr_subgroup_rotate සඳහා සහය එක් කරන ලදී.
  • x86 ගෘහනිර්මාණ ශිල්පය සඳහා, කොන්දේසි විරහිතව ඉදිරියට පැනීමේ මෙහෙයුම් වලින් පසු උපදේශන අනුමාන ක්‍රියාත්මක කිරීම නිසා ඇති වන ප්‍රොසෙසර වල ඇති දුර්වලතා වලට එරෙහිව ආරක්ෂාව එක් කර ඇත. මතකයේ ඇති ශාඛා උපදෙස් (SLS, Straight Line Speculation) අනුගමනය කිරීමෙන් වහාම උපදෙස් පූර්ව-භංග කිරීම හේතුවෙන් ගැටළුව ඇතිවේ. ආරක්ෂාව සබල කිරීම සඳහා, “-mharden-sls=[none|all|return|indirect-jmp]” විකල්පය යෝජනා කෙරේ.
  • SSE2 දිගුව සඳහා සහය දක්වන වේදිකා සඳහා, AVX16-FP512 උපදෙස් සඳහා සහය නොමැති අවස්ථාවක පාවෙන වර්ගය භාවිතයෙන් අනුකරණය කරන _Float16 වර්ගය එකතු කර ඇත.
  • RDPRU උපදෙස් භාවිතය පාලනය කිරීම සඳහා "-m[no-]rdpru" ධජය එක් කරන ලදී, AMD Zen2 ප්‍රොසෙසර වලින් ආරම්භ කිරීමට සහය දක්වයි.
  • RETBLEED අවදානමෙන් ආරක්ෂා වීමට "-mfunction-return=thunk-extern" ධජය එක් කරන ලදී, එය වක්‍ර ශාඛා සඳහා සමපේක්ෂන ක්‍රියාත්මක කිරීමේ යාන්ත්‍රණයේ සම්බන්ධය බැහැර කරන උපදෙස් මාලාවක් එක් කිරීමෙන් ක්‍රියා කරයි.

LLVM 15.0 හි ප්‍රධාන නවෝත්පාදන:

  • Cortex-M85 CPU, Armv9-A, Armv9.1-A සහ Armv9.2-A ගෘහ නිර්මාණ ශිල්පය, Armv8.1-M PACBTI-M දිගු සඳහා සහය එක් කරන ලදී.
  • DirectX සඳහා පර්යේෂණාත්මක පසුබිමක් එක් කර ඇති අතර එය DirectX සෙවන සඳහා භාවිතා කරන DXIL (DirectX Intermediate Language) ආකෘතියට සහය දක්වයි. එකලස් කිරීමේදී “-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=DirectX” පරාමිතිය සඳහන් කිරීමෙන් පසු අන්තය සක්‍රීය කර ඇත.
  • Libc++ "ආකෘතිය" පුස්තකාලය ක්‍රියාත්මක කිරීම සහ "පරාස" පුස්තකාලයේ යෝජිත පර්යේෂණාත්මක අනුවාදය ඇතුළුව C++20 සහ C++2b ප්‍රමිතිවල නව විශේෂාංග ක්‍රියාත්මක කිරීම දිගටම කරගෙන යයි.
  • x86, PowerPC සහ RISC-V ගෘහ නිර්මාණ ශිල්පය සඳහා වැඩි දියුණු කළ පසුපෙළ.
  • LLD සම්බන්ධකයේ සහ LLDB නිදොස්කරණයේ හැකියාවන් වැඩි දියුණු කර ඇත.

මූලාශ්රය: opennet.ru

අදහස් එක් කරන්න