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

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

በክላንግ 12.0 ውስጥ ማሻሻያዎች፡-

  • በC++20 ደረጃ ለቀረቡት “ሊሆኑ የሚችሉ” እና “የማይቻሉ” ባህሪያት ድጋፍ ተተግብሯል እና በነባሪነት ነቅቷል፣ ይህም አመቻቹ ሁኔታዊ ግንባታው የመቀስቀስ እድልን በተመለከተ እንዲያውቀው ያስችለዋል (ለምሳሌ፡ ]] ከሆነ (በዘፈቀደ > 0) {")።
  • ለ AMD Zen 3 (-march=znver3)፣ Intel Alder Lake (-march=alderlake) እና Intel Sapphire Rapids (-march=saphirerapids) ፕሮሰሰሮች ድጋፍ ታክሏል።
  • ለ "-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 CPUs ማመቻቸትን ለማንቃት "-mcpu=neoverse-v1" መግለጽ ትችላለህ።
  • ለ AArch64 አርክቴክቸር፣ እንደ "__aarch64_cas8_relax" ያሉ የአቶሚክ ኦፕሬሽን አጋዥ ተግባራትን ለማንቃት ወይም ለማሰናከል አዲስ የአቀናባሪ ባንዲራዎች "-moutline-atomics" እና "-mno-outline-atomics" ታክለዋል። እንደነዚህ ያሉ ተግባራት ኤልኤስኢ (ትልቅ የስርዓት ቅጥያዎች) ድጋፍ መገኘቱን እና የቀረቡትን የአቶሚክ ፕሮሰሰር መመሪያዎችን በመጠቀም ወይም ለማመሳሰል LL/SC (Load-link/store-conditional) መመሪያዎችን በመተግበር ጊዜ መሆኑን ለይተው ያውቃሉ።
  • የታከለው "-fbinutils-version" አማራጭ የቢኒቲልስ ስብስብ ኢላማውን ስሪት ከአሮጌ አገናኝ እና ሰብሳቢ ባህሪ ጋር ተኳሃኝነትን ለመምረጥ።
  • ለELF ፈጻሚ ፋይሎች፣ የ"-gz" ባንዲራ ሲገለጽ፣ የዝሊብ ቤተ-መጽሐፍትን በመጠቀም የማረም መረጃ መጭመቅ በነባሪ (gz=zlib) ነቅቷል። የተገኙትን የነገር ፋይሎች ማገናኘት ld ወይም GNU binutils 2.26+ ያስፈልገዋል። ከአሮጌዎቹ የቢኒልስ ስሪቶች ጋር ተኳሃኝነትን ለመመለስ "-gz=zlib-gnu" መግለጽ ይችላሉ።
  • የ'ይህ' ጠቋሚ አሁን በማይሻሩ እና ሊከለከሉ በሚችሉ(N) ቼኮች ተዘጋጅቷል። NULL እሴቶችን መጠቀም በሚፈልጉበት ጊዜ የማይሻረውን ባህሪ ለማስወገድ የ"fdelete-null-pointer-checks" አማራጭን መጠቀም ይችላሉ።
  • በሊኑክስ ፕላትፎርም ላይ እንደ ጂሲሲው ያለ ጥሪ ሰንጠረዦችን ለማፍለቅ የ "-fasynchronous-unwind-tables" ሁነታ ለ AArch64 እና PowerPC architectures ነቅቷል።
  • በ "#pragma clang loop vectorize_width" ውስጥ "ቋሚ" (ነባሪ) እና "ሚዛን" አማራጮችን የመግለጽ ችሎታ የቬክተሪዜሽን ዘዴን ጨምሯል። ከቬክተር ርዝማኔ ነፃ የሆነው "ሚዛን" ሁነታ የሙከራ ነው እና ሊሰፋ የሚችል ቬክተር ማድረግን በሚደግፍ ሃርድዌር ላይ ሊያገለግል ይችላል።
  • ለዊንዶውስ መድረክ የተሻሻለ ድጋፍ፡ በ Arm64 ስርዓቶች ላይ ለዊንዶውስ ይፋዊ ሁለትዮሽ ስብሰባዎች ተዘጋጅተዋል፣ Clang compiler፣ LLD linker እና compiler-rt runtime librariesን ጨምሮ። ለMingW ዒላማ መድረኮች በሚገነቡበት ጊዜ የ .exe ቅጥያ ተጨምሮበታል፣ ሲጣመርም እንኳ።
  • ከOpenCL፣ OpenMP እና CUDA ድጋፍ ጋር የተያያዙ አቅሞች ተዘርግተዋል። ለOpenCL 3.0 እና OpenCL 1.0 የማክሮ አማራጮችን ለመምረጥ "-cl-std=CL3.0" እና "-cl-std=CL1.0" የተጨመሩ አማራጮች። የመመርመሪያ መሳሪያዎች ተዘርግተዋል.
  • ለ HRESET፣ UINTR እና AVXVNNI መመሪያዎች በአንዳንድ x86 ላይ በተመሰረቱ ፕሮሰሰሮች ውስጥ ተግባራዊ ድጋፍ ታክሏል።
  • በ x86 ስርዓቶች ላይ ለ "-mtune=" አማራጭ ድጋፍ ነቅቷል። "-march= ምንም ይሁን ምን የተመረጠውን የማይክሮ አርክቴክቸር ማመቻቸትን የሚያነቃቃ "
  • የማይለዋወጥ ተንታኝ አንዳንድ የ POSIX ተግባራትን ሂደት አሻሽሏል እና በንፅፅር ውስጥ በርካታ ተምሳሌታዊ እሴቶች ሲኖሩ ሁኔታዊ ስራዎችን ውጤት መወሰንን በእጅጉ አሻሽሏል። አዲስ ቼኮች ተጨምረዋል፡ fuchia.HandleChecker (በመዋቅሮች ውስጥ ያሉ እጀታዎችን ይገልጻል)፣ webkit.UncountedLambdaCapturesChecker ዌብኪት እና alpha.webkit.ያልተቆጠሩ አካባቢያዊVarsChecker (በዌብኪት ኢንጂን ኮድ ውስጥ ካሉ ጠቋሚዎች ጋር የመስራትን ልዩ ባህሪያትን ከግምት ውስጥ ያስገባ)።
  • በቋሚዎች አውድ ውስጥ ጥቅም ላይ በሚውሉ አገላለጾች ውስጥ አብሮ የተሰሩ ተግባራትን መጠቀም __builtin_bitreverse *, __builtin_rotateleft*, __builtin_rotateright*, _mm_popcnt*, _bit_scan_forward, __bsfd, __bsfq, __bit__scan_reverse, bspwad, bspd, bspd 64፣ ተፈቅዷል።__bswapq , _castf *፣ __rol* እና __ror*።
  • የ BitFieldColonSpacing አማራጭን ወደ ክላጅ-ቅርጸት መገልገያ ታክሏል ለዪዎች፣ አምዶች እና የመስክ ፍቺዎች ክፍተቶችን ለመምረጥ።
  • በሊኑክስ መድረክ ላይ ያለው የclungd መሸጎጫ አገልጋይ (Clang Server) በረጅም ጊዜ ስራ ጊዜ የማስታወስ ፍጆታን በእጅጉ ቀንሷል (ነጻ የማስታወሻ ገጾችን ወደ ኦፕሬቲንግ ሲስተም ለመመለስ በየጊዜው ወደ malloc_trim የሚደረጉ ጥሪዎች ይቀርባሉ)።

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

  • በ Python ውስጥ የተፃፈው የllvm-build ግንባታ መሳሪያ ድጋፍ የተቋረጠ ሲሆን በምትኩ ፕሮጀክቱ ሙሉ በሙሉ የCMake ግንባታ ስርዓትን ወደ መጠቀም ተቀይሯል።
  • በ AArch64 አርክቴክቸር ጀርባ ላይ የዊንዶውስ መድረክ ድጋፍ ተሻሽሏል፡ ለታላሚው የዊንዶውስ ሲስተሞች ትክክለኛው የመሰብሰቢያ ውፅዓት ማመንጨት ተረጋግጧል፣ በድንገተኛ ጥሪዎች ላይ የመረጃ ማመንጨት ተመቻችቷል (የዚህ መረጃ መጠን በ 60 ቀንሷል) %)፣ አሰባሳቢን በመጠቀም የመፍታት ችሎታ የመፍጠር ችሎታ መመሪያዎች .seh_* ተጨምሯል።
  • የPowerPC አርክቴክቸር ለ loops እና የመስመር ላይ ማሰማራት አዲስ ማመቻቸት፣ ለPower10 ፕሮሰሰር የተስፋፋ ድጋፍ፣ ለኤምኤምኤ መመሪያዎች ለማትሪክስ ማጭበርበር እና ለኤኤክስ ኦፕሬቲንግ ሲስተም የተሻሻለ ድጋፍን ያሳያል።
  • የ x86 ጀርባ ለ AMD Zen 3፣ Intel Alder Lake እና Intel Sapphire Rapids ፕሮሰሰሮች፣ እንዲሁም HRESET፣ UINTR እና AVXVNNI ፕሮሰሰር መመሪያዎችን ይደግፋል። የማህደረ ትውስታ ድንበሮች መደገፋቸውን ለማረጋገጥ ጠቋሚዎችን ለመፈተሽ ለMPX (የማህደረ ትውስታ ጥበቃ ቅጥያዎች) ድጋፍ (ይህ ቴክኖሎጂ አልተስፋፋም እና አስቀድሞ ከጂሲሲ እና ክላንግ ተወግዷል)። የኦፔራ ማካካሻዎችን እና መዝለሎችን መጠን ለመቆጣጠር ለ{disp32} እና {disp8} ቅድመ ቅጥያ እና .d32 እና .d8 ቅጥያ ለተሰብሳቢው ድጋፍ ታክሏል። የማይክሮ አርክቴክቸር ማሻሻያዎችን ማካተት ለመቆጣጠር አዲስ ባህሪ "tune-cpu" ታክሏል።
  • አዲስ ሁነታ "-fsanitize=unsigned-shift-base" ወደ ኢንቲጀር ችግር ፈላጊ (ኢንቲጀር ሳኒታይዘር፣ "-fsanitize=integer") ከትንሽ ወደ ግራ ከተቀየረ በኋላ ያልተፈረሙ ኢንቲጀሮች ሞልተዋል።
  • በተለያዩ መመርመሪያዎች (አሳን ፣ cfi ፣ lsan ፣ msan ፣ tsan ፣ ubsan sanitizer) ለሊኑክስ ስርጭቶች ከመደበኛው የሙስል ቤተ-መጽሐፍት ጋር ተጨምሯል።
  • የኤልኤልዲ ማገናኛ ችሎታዎች ተዘርግተዋል። ለELF ቅርጸት የተሻሻለ ድጋፍ፣ የተጨመሩትን አማራጮች "- ጥገኝነት-ፋይል", "-ስህተት-አያያዝ-ስክሪፕት", "-lto-pseudo-probe-for-profiling", "-no-lto-ሙሉ-ፕሮግራም - ታይነት" የተሻሻለ MinGW ድጋፍ። ለMach-O ቅርጸት (ማክኦኤስ)፣ ለ arm64፣ ክንድ እና i386 አርክቴክቸር ድጋፍ፣ የአገናኝ-ጊዜ ማሻሻያ (LTO) እና ለየት ያለ አያያዝ ቁልል መፍታት ተተግብሯል።
  • Libc++ አዲስ የC++20 ስታንዳርድ ባህሪያትን ተግባራዊ ያደርጋል እና የC++2b ዝርዝር ባህሪያትን ማዘጋጀት ጀምሯል። የትርጉም ሥራን በማሰናከል ("-DLIBCXX_ENABLE_LOCALIZATION=ጠፍቷል") እና የውሸት የዘፈቀደ ቁጥሮችን ("-DLIBCXX_ENABLE_RANDOM_DEVICE=ጠፍቷል")ን ለመፍጠር የተጨመረ ድጋፍ።

ምንጭ: opennet.ru

አስተያየት ያክሉ