የኤልኤልቪኤም 15.0 ማጠናከሪያ ስብስብ መለቀቅ

ከስድስት ወራት እድገት በኋላ የኤልኤልቪኤም 15.0 ፕሮጀክት መለቀቅ ቀርቧል - ከጂሲሲ ጋር ተኳሃኝ የሆነ የመሳሪያ ስብስብ (አቀናባሪዎች ፣ አመቻቾች እና ኮድ ማመንጫዎች) ፕሮግራሞችን ወደ መካከለኛ ቢትኮድ እንደ RISC መሰል ምናባዊ መመሪያዎች ያጠናቅራል (ዝቅተኛ ደረጃ ምናባዊ ማሽን ከ ባለብዙ ደረጃ ማመቻቸት ስርዓት). የመነጨው pseudocode በፕሮግራሙ አፈጻጸም ጊዜ በቀጥታ በጂአይቲ ማጠናከሪያ ወደ ማሽን መመሪያዎች ሊቀየር ይችላል።

በክላንግ 15.0 ውስጥ ዋና ማሻሻያዎች፡-

  • በ x86 አርክቴክቸር ላይ ለተመሰረቱ ስርዓቶች የ "-fzero-call-used-regs" ባንዲራ ተጨምሯል, ይህም በድርጊቱ ውስጥ ጥቅም ላይ የዋሉ ሁሉም የሲፒዩ መመዝገቢያዎች መቆጣጠሪያውን ከመመለሱ በፊት ወደ ዜሮ መጀመራቸውን ያረጋግጣል. ይህ አማራጭ ከተግባሮች የመረጃ ፍሰትን ለመከላከል እና ROP (Return-oriented Programming) መግብሮችን በጥቅም ላይ ለማዋል ተስማሚ የሆኑ ብሎኮችን ቁጥር በ20% እንዲቀንሱ ያስችልዎታል።
  • የተጋላጭነት ብዝበዛ በሚፈጠርበት ጊዜ ከህንፃዎች መረጃን ማውጣትን የሚያወሳስብ ለሲ ኮድ መዋቅሮች የማህደረ ትውስታ ምደባ ራንዶምላይዜሽን ተተግብሯል። በዘፈቀደ_አቀማመጥ እና በዘፈቀደ_የማይደረግ_አቀማመጥ ባህሪያትን በመጠቀም ራንደምላይዜሽን በርቶ ይጠፋል እና የ"-frandomize-layout-seed" ወይም "-frandomize-layout-seed-file" ባንዲራ በመጠቀም ዘር ማቀናበርን ይጠይቃል።
  • ታክሏል "-fstrict-flex-arrays=" ባንዲራ ", ይህም ጋር መዋቅሮች ውስጥ ተለዋዋጭ ድርድር አባል ለ ድንበሮች መቆጣጠር ይችላሉ (ተለዋዋጭ Array አባላት, መዋቅር መጨረሻ ላይ ያልተወሰነ መጠን ያለው ድርድር). ወደ 0 (ነባሪ) ሲዋቀር፣ ድርድር ያለው የመጨረሻው አካል ሁልጊዜ እንደ ተለዋዋጭ ድርድር ነው የሚሰራው፣ 1 - መጠኖች []፣ [0] እና [1] እንደ ተለዋዋጭ ድርድር ብቻ ይሰራሉ፣ 2 - መጠኖች ብቻ። [] እና [0] እንደ ተለዋዋጭ ድርድር ተዘጋጅተዋል።
  • ለ C-like ቋንቋ HLSL (ከፍተኛ ደረጃ ሻደር ቋንቋ) የሙከራ ድጋፍ በDirectX ውስጥ ሼዶችን ለመጻፍ ያገለግላል።
  • ከቋሚ እና ከተለዋዋጭ-ርዝመት ድርድሮች ጋር በተያያዙ ተኳኋኝ ያልሆኑ የመከራከሪያ መግለጫዎች ተግባራትን ስለመሻር ለማስጠንቀቅ "-Warray-parameter" ታክሏል።
  • ከMSVC ጋር የተሻሻለ ተኳኋኝነት። በ MSVC ውስጥ ለቀረበው "#ፕራግማ ተግባር" (በመስመር መስፋፋት ፈንታ የተግባር ጥሪን እንዲያመነጭ አቀናባሪው መመሪያ ይሰጣል) እና "#pragma alloc_text" (የክፍሉን ስም በተግባር ኮድ ይገልፃል።) ለ MSVC-ተኳሃኝ/JMC እና/JMC ባንዲራዎች ድጋፍ ታክሏል።
  • ስራ የወደፊት የC2X እና C++23 ደረጃዎችን ለመደገፍ ቀጥሏል። ለ C ቋንቋ፣ የሚከተሉት ተተግብረዋል፡ የኖሬተርን ባህሪ፣ ቁልፍ ቃላቶቹ ውሸት እና እውነት፣ _BitInt(N) አይነት ለተወሰነ ትንሽ ጥልቀት ኢንቲጀር፣ *_WIDTH ማክሮዎች፣ የ UTF-8 ኮድ የያዙ ቁምፊዎች u8 ቅድመ ቅጥያ።

    ለ C++፣ የሚከተሉት ይተገበራሉ፡ ሞጁል ውህደት፣ የተግባር አባላትን ABI ማግለል፣ የአካባቢ ያልሆኑ ተለዋዋጮች በሞጁሎች ውስጥ እንዲፈጠሩ የታዘዘ ተለዋዋጭ ጅምር፣ ባለብዙ ዳይሜንሽን ኢንዴክስ ኦፕሬተሮች፣ አውቶ(x)፣ ቀጥተኛ ያልሆኑ ተለዋዋጮች፣ goto እና መለያዎች constexpr ተብለው በተገለጹ ተግባራት ውስጥ። ፣ የተወሰነ የማምለጫ ቅደም ተከተል ፣ የማምለጫ ገጸ-ባህሪያት ተሰይመዋል።

  • ከOpenCL እና OpenMP ድጋፍ ጋር የተያያዙ ችሎታዎች ተዘርግተዋል። ለOpenCL ቅጥያ cl_khr_subgroup_roate ድጋፍ ታክሏል።
  • ለ x86 አርክቴክቸር፣ ያለምንም ቅድመ ሁኔታ ወደፊት የመዝለል ስራዎች ከተከናወኑ በኋላ በግምታዊ የመመሪያዎች አፈፃፀም ምክንያት በአቀነባባሪዎች ውስጥ ካሉ ተጋላጭነቶች ጥበቃ ተጨምሯል። ችግሩ የሚከሰተው በማህደረ ትውስታ (SLS, Straight Line Speculation) የቅርንጫፍ መመሪያን በመከተል መመሪያዎችን በቅድሚያ በማዘጋጀት ምክንያት ነው. ጥበቃን ለማንቃት “-mharden-sls=[ምንም|ሁሉም|መመለሻ|indirect-jmp]” የሚለው አማራጭ ቀርቧል።
  • የ SSE2 ቅጥያውን ለሚደግፉ የመሣሪያ ስርዓቶች፣ የ_Float16 አይነት ተጨምሯል፣ እሱም ተንሳፋፊውን አይነት በመጠቀም ለ AVX512-FP16 መመሪያዎች ድጋፍ በማይሰጥበት ጊዜ።
  • ከ AMD Zen2 ፕሮሰሰር ጀምሮ የሚደገፈውን የRDPRU መመሪያ አጠቃቀም ለመቆጣጠር የ"-m[no-]rdpru" ባንዲራ ታክሏል።
  • ከRETBLEED ተጋላጭነት ለመከላከል የ"-mfunction-return=thunk-extern" ባንዲራ ታክሏል፣ ይህም በተዘዋዋሪ ቅርንጫፎች የግምታዊ ማስፈጸሚያ ዘዴን ሳያካትት ተከታታይ መመሪያዎችን በመጨመር ነው።

በኤልኤልቪኤም 15.0 ውስጥ ቁልፍ ፈጠራዎች፡-

  • ለ Cortex-M85 CPU፣ Armv9-A፣ Armv9.1-A እና Armv9.2-A architectures፣ Armv8.1-M PACBTI-M ማራዘሚያዎች ድጋፍ ታክሏል።
  • ለDirectX ሼዶች ጥቅም ላይ የዋለውን DXIL (DirectX Intermediate Language) ቅርጸት የሚደግፍ የDirectX የሙከራ ጀርባ ታክሏል። በስብሰባ ጊዜ የ"-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=DirectX" ልኬትን በመግለጽ የጀርባው ጫፍ ነቅቷል።
  • Libc++ የC++20 እና C++2b መመዘኛዎች አዲስ ባህሪያትን መተግበሩን ቀጥሏል፣የ"ቅርጸት" ቤተ መፃህፍት አተገባበርን ማጠናቀቅ እና የ"ክልሎች" ቤተ-መጽሐፍት የቀረበው የሙከራ ስሪት።
  • ለ x86፣ PowerPC እና RISC-V አርክቴክቸር የተሻሻሉ የኋላ ሽፋኖች።
  • የኤልኤልዲ ማገናኛ እና የኤልኤልዲቢ አራሚ ችሎታዎች ተሻሽለዋል።

ምንጭ: opennet.ru

አስተያየት ያክሉ