Rust: `asm` (рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА) рдХреЗ рд▓рд┐рдП рдЯреНрд░реИрдХрд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 9 рдирд╡ре░ 2015  ┬╖  111рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: rust-lang/rust

рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рд╕реНрдерд┐рд░реАрдХрд░рдг рдХреЛ рдЯреНрд░реИрдХ рдХрд░рддреА рд╣реИред рд╡рд░реНрддрдорд╛рди рд╕реБрд╡рд┐рдзрд╛ RFC рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдирд╣реАрдВ рдЧреБрдЬрд░реА рд╣реИ, рдФрд░ рд╕рдВрднрд╡рдд: рд╕реНрдерд┐рд░реАрдХрд░рдг рд╕реЗ рдкрд╣рд▓реЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

A-inline-assembly B-unstable C-tracking-issue T-lang requires-nightly

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореИрдВ рдпрд╣ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдПрд▓рдПрд▓рд╡реАрдПрдо рдХрд╛ рдЗрдирд▓рд╛рдЗрди рдПрдПрд╕рдПрдо рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреНрд▓реИрдВрдЧ/рдЬреАрд╕реАрд╕реА рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕реЗ рдЕрд▓рдЧ рд╣реИред рдорддрднреЗрджреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

  • LLVM рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ $0 рдХреЗ рдмрдЬрд╛рдп %0 ред
  • рдПрд▓рдПрд▓рд╡реАрдПрдо рдирд╛рдорд┐рдд рдПрдПрд╕рдПрдо рдСрдкрд░реЗрдВрдб рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ %[name] ред
  • LLVM рдЕрд▓рдЧ рд░рдЬрд┐рд╕реНрдЯрд░ рдмрд╛рдзрд╛ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛: рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП "{eax}" рдХреЗ рдмрдЬрд╛рдп "a" 86 рдкрд░ред
  • рдПрд▓рдПрд▓рд╡реАрдПрдо рд╕реНрдкрд╖реНрдЯ рд░рдЬрд┐рд╕реНрдЯрд░ рдмрд╛рдзрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ ( "{r11}" )ред рд╕реА рдореЗрдВ рдЖрдкрдХреЛ рдПрдХ рд░рдЬрд┐рд╕реНрдЯрд░ ( register asm("r11") int x ) рдХреЗ рдореВрд▓реНрдп рдХреЛ рдмрд╛рдВрдзрдиреЗ рдХреЗ рд▓рд┐рдП рд░рдЬрд┐рд╕реНрдЯрд░ рдПрдПрд╕рдПрдо рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
  • рдПрд▓рдПрд▓рд╡реАрдПрдо "m" рдФрд░ "=m" рдмрд╛рдзрд╛рдПрдВ рдореВрд▓ рд░реВрдк рд╕реЗ рдЯреВрдЯ рдЧрдИ рд╣реИрдВред рдХреНрд▓реИрдВрдЧ рдЗрди рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд╕реНрдореГрддрд┐ рдмрд╛рдзрд╛рдУрдВ "*m" рдФрд░ "=*m" рдФрд░ рдЪрд░ рдХреЗ рдмрдЬрд╛рдп рдЪрд░ рдХреЗ рдкрддреЗ рдХреЛ рдПрд▓рдПрд▓рд╡реАрдПрдо рдореЗрдВ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИред
  • рдЖрджрд┐...

рдХреНрд▓реИрдВрдЧ рдЗрдирд▓рд╛рдЗрди рдПрдПрд╕рдПрдо рдХреЛ рдПрд▓рдПрд▓рд╡реАрдПрдо рдореЗрдВ рднреЗрдЬрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЬреАрд╕реАрд╕реА рдкреНрд░рд╛рд░реВрдк рд╕реЗ рдПрд▓рдПрд▓рд╡реАрдПрдо рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░ рджреЗрдЧрд╛ред рдпрд╣ рдмрд╛рдзрд╛рдУрдВ рдХрд╛ рдХреБрдЫ рд╕рддреНрдпрд╛рдкрди рднреА рдХрд░рддрд╛ рд╣реИ: рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ "i" рдСрдкрд░реЗрдВрдб рд╕рдВрдХрд▓рди-рд╕рдордп рд╕реНрдерд┐рд░рд╛рдВрдХ рд╣реИрдВ,


рдЗрд╕рдХреЗ рдЖрд▓реЛрдХ рдореЗрдВ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЙрд╕реА рдЕрдиреБрд╡рд╛рдж рдФрд░ рд╕рддреНрдпрд╛рдкрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдХреНрд▓реИрдВрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрдЬреАрдм рдПрд▓рдПрд▓рд╡реАрдПрдо рдПрдХ рдХреЗ рдмрдЬрд╛рдп рдЙрдЪрд┐рдд рдЬреАрд╕реАрд╕реА рдЗрдирд▓рд╛рдЗрди рдПрдПрд╕рдПрдо рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред

рд╕рднреА 111 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдХреНрдпрд╛ рд╕реНрдерд┐рд░ рдХреЛрдб рдореЗрдВ рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдХреА рдкрд╢реНрдЪ-рд╕рдВрдЧрддрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рдХрдард┐рдирд╛рдИ рд╣реЛрдЧреА?

@ main-- https://github.com/rust-lang/rfcs/pull/1471#issuecomment -173982852 рдкрд░ рдПрдХ рдЕрдЪреНрдЫреА рдЯрд┐рдкреНрдкрдгреА рд╣реИ рдХрд┐ рдореИрдВ рдпрд╣рд╛рдВ рднрд╛рд╡реА рдкреАрдврд╝реА рдХреЗ рд▓рд┐рдП рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ:

рд╕рд╛рде рд╕рднреА рдЦреБрд▓реЗ рдХреАрдбрд╝реЗ рдФрд░ рдЕрд╕реНрдерд╛рдпрд┐рддреНрд╡ рдЖрд╕рдкрд╛рд╕ рдХреЗ рдПрдПрд╕рдПрдо ()! (рд╡рд╣рд╛рдБ рдПрдХ рдмрд╣реБрдд ), рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рд╕реНрдерд┐рд░реАрдХрд░рдг рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ - рднрд▓реЗ рд╣реА рдореИрдВ рдЬрдВрдЧ рдореЗрдВ рд╕реНрдерд┐рд░ рдЗрдирд▓рд╛рдЗрди рдПрдПрд╕рдПрдо рдХрд░рдХреЗ рд╣рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред

рд╣рдореЗрдВ рдпрд╣ рднреА рдЪрд░реНрдЪрд╛ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдЖрдЬ рдХрд╛ asm!() рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ рдпрд╛ рдпрджрд┐ RFC #129 рдпрд╛ D рдХреА рддрд░реНрдЬ рдкрд░ рдХреБрдЫ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ред рдпрд╣рд╛рдВ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ рдпрд╣ рд╣реИ рдХрд┐ рдПрдПрд╕рдПрдо() рдЬреАрд╕реАрд╕реА рдХреЗ рд╕рдорд╛рди рдмрд╛рдзрд╛рдУрдВ рдХреЗ рд╕реЗрдЯ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдпрд╛ рддреЛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

  • рдПрд▓рдПрд▓рд╡реАрдПрдо рд╡реНрдпрд╡рд╣рд╛рд░ рдкрд░ рдЯрд┐рдХреЗ рд░рд╣реЗрдВ рдФрд░ рдЙрд╕рдХреЗ рд▓рд┐рдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд▓рд┐рдЦреЗрдВ (рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдХреЛрдИ рднреА рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИ)ред рдЕрдЪреНрдЫрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЬрдВрдЧ рдореЗрдВ рдЬрдЯрд┐рд▓рддрд╛ рд╕реЗ рдмрдЪрд╛рддрд╛ рд╣реИред рдЦрд░рд╛рдм рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реА/рд╕реА++ рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рднреНрд░рдорд┐рдд рдХрд░реЗрдЧрд╛ рдФрд░ рдХреНрдпреЛрдВрдХрд┐ рдХреБрдЫ рдмрд╛рдзрд╛рдУрдВ рдХреЛ рдЬрдВрдЧ рдХреЛрдб рдореЗрдВ рдЕрдиреБрдХрд░рдг рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
  • рдЬреАрд╕реАрд╕реА рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░реЗрдВ рдФрд░ рдмрд╕ рдЙрдирдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рд╕реЗ рд▓рд┐рдВрдХ рдХрд░реЗрдВ: рдЕрдЪреНрдЫрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдирддреЗ рд╣реИрдВ рдФрд░ рдРрд╕реЗ рдмрд╣реБрдд рд╕реЗ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ рдереЛрдбрд╝реЗ рд╕рдВрд╢реЛрдзрдиреЛрдВ рдХреЗ рд╕рд╛рде рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЦрд░рд╛рдм рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рдВрдХрд▓рдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреМрдкрдЪрд╛рд░рд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╣реИред
  • рдХреБрдЫ рдФрд░ рдХрд░реЗрдВ (рдЬреИрд╕реЗ рдбреА рдХрд░рддрд╛ рд╣реИ): рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХрд╛рдо рдЬреЛ рднреБрдЧрддрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рд╕рд╣реА рдХрд┐рдпрд╛ рдЬрд╛рдП, рддреЛ рдпрд╣ рдПрд░реНрдЧреЛрдиреЙрдорд┐рдХреНрд╕ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЬреАрд╕реАрд╕реА-рд╢реИрд▓реА рд╕реЗ рдХрд╛рдлреА рдмреЗрд╣рддрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рд╕рдВрднрд╡рддрдГ рдХреЗрд╡рд▓ рдПрдХ рдЕрдкрд╛рд░рджрд░реНрд╢реА рдмреНрд▓реЙрдм рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рднрд╛рд╖рд╛ рдФрд░ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдПрдХреАрдХреГрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдпрд╣рд╛рдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╣реИрдВрдбрд╡рд┐рдВрдЧ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЗрд╕рдХрд╛ рдЖрдХрд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдВрдкрд╛рдЗрд▓рд░ рдЗрдВрдЯрд░реНрдирд▓ рдХреЗ рд╕рд╛рде рдкрд░реНрдпрд╛рдкреНрдд рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВ) .

рдЕрдВрдд рдореЗрдВ, рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдПрдХ рдФрд░ рдмрд╛рдд # 1201 рд╣реИ рдЬреЛ рдХрд┐ рдЗрд╕рдХреЗ рд╡рд░реНрддрдорд╛рди рдбрд┐рдЬрд╛рдЗрди (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ) рдореЗрдВ рдЗрдирд▓рд╛рдЗрди рдПрдПрд╕рдПрдо рдкрд░ рдХрд╛рдлреА рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ - рдпрд╛ рдЗрдирд▓рд╛рдЗрди рдПрдПрд╕рдПрдо рдЙрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд╕реЛрдЪрддрд╛ рд╣реВрдВ рдХрд┐ рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдиреЗ рдПрдордПрд╕рд╡реАрд╕реА x64 рдореЗрдВ рдЬреЛ рдХрд┐рдпрд╛ рд╡рд╣ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛: рдкреНрд░рддреНрдпреЗрдХ рдПрдПрд╕рдПрдо рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд▓рд┐рдП рдЖрдВрддрд░рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдПрдХ (рд▓рдЧрднрдЧ-) рд╡реНрдпрд╛рдкрдХ рд╕реЗрдЯ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ, рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрди рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ "рдЗрдирд▓рд╛рдЗрди рдПрдПрд╕рдПрдо" рдХрд░реЗрдВред рдЕрдиреНрдпрдерд╛, рдЗрдирд▓рд╛рдЗрди рдПрдПрд╕рдПрдо рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреЗ рдХреЛрдб рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдЬреЛ рд╡рд┐рдбрдВрдмрдирд╛рдкреВрд░реНрдг рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрдирд▓рд╛рдЗрди рдПрдПрд╕рдПрдо рдХреЗ рдХрдИ рдЙрдкрдпреЛрдЧ рдкреНрд░рджрд░реНрд╢рди рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП рд╣реИрдВред

рдЖрдВрддрд░рд┐рдХ-рдЖрдзрд╛рд░рд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдПрдХ рдлрд╛рдпрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡-рдпрд╛-рдХреБрдЫ рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЖрдк рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рд╕рдмрд╕реЗ рдЖрд╡рд╢реНрдпрдХ рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд╕реЗрдЯ рдЖрдЙрдЯ рдХреЛ рд╡реГрджреНрдзрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреНрд░рд┐рдкреНрдЯреЛ рдХреЗ рд▓рд┐рдП, _addcarry_u64 , _addcarry_u32 ред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрдВрд╕реНрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рдХреЛ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рдо рдкрд╣рд▓реЗ рд╣реА рдХрд╛рдлреА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИ: https://github.com/huonw/llvmintред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рдЬреЛрдбрд╝рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реЛрдЧрд╛, рднрд▓реЗ рд╣реА рдЕрдВрддрддрдГ рдЗрдирд▓рд╛рдЗрди рдПрдПрд╕рдПрдо рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИрдВ (рд╕реА рдФрд░ рд╕реА ++ рдореЗрдВ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдореЗрд░реЗ рдЕрдиреБрднрд╡ рдХреЗ рдЖрдзрд╛рд░ рдкрд░), рдЗрд╕рд▓рд┐рдП рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рдФрд░ рджреЗрдЦрдирд╛ рд╣рдо рдХрд┐рддрдиреА рджреВрд░ рдЬрд╛рддреЗ рд╣реИрдВ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╢реВрдиреНрдп-рдЬреЛрдЦрд┐рдо-рдЧрд▓рдд рдЪреАрдЬ рд╣реИред

рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рдЕрдЪреНрдЫреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди asm! рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдирд┐рд░реНрджреЗрд╢ рдбрд╛рд▓рдиреЗ рд╕реЗ рдЕрдзрд┐рдХ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рджреЗрдЦреЗрдВ рдХрд┐ рдореИрдВ рдЕрдкрдиреЗ probe рдХреНрд░реЗрдЯ рдореЗрдВ рдИрдПрд▓рдПрдл рдиреЛрдЯреНрд╕ рдХреИрд╕реЗ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВред
https://github.com/cuviper/rust-libprobe/blob/master/src/platform/systemtap.rs

рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рд╣реИрдХрд░реА рджреБрд░реНрд▓рдн рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрднреА рднреА рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдпреЛрдЧреА рдЪреАрдЬ рд╣реИред

@ рдмреНрд░рд╛рдпрдирд╕реНрдорд┐рде

рдЗрдирд▓рд╛рдЗрди рдПрдПрд╕рдПрдо рдХреЛрдб рдХреЗ рд▓рд┐рдП рднреА рдЙрдкрдпреЛрдЧреА рд╣реИ рдЬреЛ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рд░рдЬрд┐рд╕реНрдЯрд░/рд╕реНрдЯреИрдХ рдЖрд╡рдВрдЯрди рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдирдЧреНрди рдХрд╛рд░реНрдп)ред

@briansmith рд╣рд╛рдБ, рдЬрд╣рд╛рдБ рд╕рдВрднрд╡ рд╣реЛ рд╡рд╣рд╛рдБ

@briansmith рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ asm!() _kind of_ рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рдХрд╛ рдПрдХ рд╕реБрдкрд░рд╕реЗрдЯ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдкреВрд░реНрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрд╛рдж рд╡рд╛рд▓реЗ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред (рдЗрд╕ рддрд░реНрдХ рдХреЗ рдЦрд┐рд▓рд╛рдл рдЖрдо рддрд░реНрдХ рдпрд╣ рд╣реИ рдХрд┐ рд╕рдВрдХрд▓рдХ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ _рдереНрд░реВ_ рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рд▓реВрдк рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдирд╛, рдЙрди рдкрд░ рд╕реАрдПрд╕рдИ рдЪрд▓рд╛рдирд╛ рдЖрджрд┐ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдПрдХ рдмрд╣реБрдд рдордЬрдмреВрдд рдХрд╛рдЙрдВрдЯрд░рдкреЙрдЗрдВрдЯ рд╣реИ рдХрд┐ _optimization_ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдПрд╕рдПрдо рд▓рд┐рдЦрдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдИ рднреА рдмреЗрд╣рддрд░ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рд╡реИрд╕реЗ рднреА рдХрдВрдкрд╛рдЗрд▓рд░ рдХреА рддреБрд▓рдирд╛ рдореЗрдВред) https://github.com/rust-lang/rust/issues/29722#issuecomment -207628164 рдФрд░ https://github.com/rust-lang/rust/issues/29722# рднреА рджреЗрдЦреЗрдВред

рджреВрд╕рд░реА рдУрд░, рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рдЧрдВрднреАрд░ рд░реВрдк рд╕реЗ "рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рд╕реНрдорд╛рд░реНрдЯ рдХрдВрдкрд╛рдЗрд▓рд░" рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ _at рдХрдо рд╕реЗ рдХрдо _ рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдЬреЛ рдПрдХ рд╣рд╛рде рд╕реЗ рд▓реБрдврд╝рдХрд╛рдП рдЧрдП рдПрдПрд╕рдПрдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ред рдЗрд╕ рдкрд░ рдореЗрд░рд╛ рдЬреНрдЮрд╛рди рдкреБрд░рд╛рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рддрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рдЧрддрд┐ рдирд╣реАрдВ рд╣реБрдИ рд╣реИ, рддрдм рддрдХ рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЖрдВрддрд░рд┐рдХ-рдЖрдзрд╛рд░рд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЕрднреА рднреА рдорд╛рдкрдиреЗ рдпреЛрдЧреНрдп рд░реВрдк рд╕реЗ рдХрдо рд╣реИрдВ - рдпрджрд┐ рдЕрдзрд┐рдХрддрд░ рдирд╣реАрдВред рдмреЗрд╢рдХ рд╡реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИрдВ рд▓реЗрдХрд┐рди рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ _that_ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬреНрдпрд╛рджрд╛ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рд╡реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ CPU рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ рдЙрддрд░рдиреЗ рдХреЗ рдЗрдЪреНрдЫреБрдХ рд╣реЛрддреЗ рд╣реИрдВред

рдЕрдм рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рдХреЛ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдкрд░ рдлрд╝реЙрд▓рдмреИрдХ рдХреЛрдб рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╡реЗ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИрдВред рдпрд╣ рдЖрдкрдХреЛ рджреЛрдиреЛрдВ рджреБрдирд┐рдпрд╛ рдХреЗ рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ: рдЖрдкрдХрд╛ рдХреЛрдб рдЕрднреА рднреА рдкреЛрд░реНрдЯреЗрдмрд▓ рд╣реИ - рдпрд╣ рдХреЗрд╡рд▓ рдХреБрдЫ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рддреНрд╡рд░рд┐рдд рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдирд┐рдпреЛрдЬрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдЙрдирдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдмреЗрд╢рдХ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╛ рддреЛ рдмрд╣реБрдд рд╣реА рд╕рд╛рдорд╛рдиреНрдп рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП рднреБрдЧрддрд╛рди рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдпрджрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдПрдХ рд╕реНрдкрд╖реНрдЯ рд▓рдХреНрд╖реНрдп рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рд╣реИред рдЕрдм рдореИрдВ рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдХреЛрдИ рдпрд╣ рддрд░реНрдХ рджреЗ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ _undesirable_ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ _compiler-provided_ рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде (рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рд╢рд╛рдпрдж рдЗрд╕ рдмрд╛рдд рдХреА рдкрд░рд╡рд╛рд╣ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдХреНрдпрд╛ рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рддреНрд╡рд░рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдорд┐рд▓рддреЗ рд╣реИрдВ рдФрд░ рд╕рдВрдХрд▓рдХ рдЬрдЯрд┐рд▓рддрд╛ рдХрднреА рдЕрдЪреНрдЫреА рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ) I 'рдбреА рдХрд╣реЗрдВрдЧреЗ рдХрд┐ рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдХрд╣рд╛рдиреА рд╣реИ рдпрджрд┐ рдЖрдВрддрд░рд┐рдХ _library_ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдФрд░ рдХреЗрд╡рд▓ рдЗрдирд▓рд╛рдЗрди рдПрдПрд╕рдПрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рд╡рд╣ рдмрдбрд╝реА рддрд╕реНрд╡реАрд░ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛, рднрд▓реЗ рд╣реА рдореИрдВ рдЦреБрдж рдХреЛ рдЗрдирд▓рд╛рдЗрди рдПрдПрд╕рдПрдо рд╕реЗ рдЕрдзрд┐рдХ рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рджреЗрдЦ рд╕рдХреВрдВред

(рдореИрдВ рдЗрд╕ рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рдЖрд░рдПрдлрд╕реА #1199 рд╕реЗ рдХреБрдЫ рд╣рдж рддрдХ рдСрд░реНрдереЛрдЧреЛрдирд▓ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЬреНрдпрд╛рджрд╛рддрд░ рд╕рд┐рдо рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореМрдЬреВрдж рд╣реИрдВред)

@ рдмреНрд░рд╛рдпрдирд╕реНрдорд┐рде

рдЕрдиреНрдпрдерд╛, рдЗрдирд▓рд╛рдЗрди рдПрдПрд╕рдПрдо рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреЗ рдХреЛрдб рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдЬреЛ рд╡рд┐рдбрдВрдмрдирд╛рдкреВрд░реНрдг рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрдирд▓рд╛рдЗрди рдПрдПрд╕рдПрдо рдХреЗ рдХрдИ рдЙрдкрдпреЛрдЧ рдкреНрд░рджрд░реНрд╢рди рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП рд╣реИрдВред

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИред рдпрд╣ рд╕рдЪ рд╣реИ рдХрд┐ рд╕рдВрдХрд▓рдХ рд╢рдХреНрддрд┐ рдореЗрдВ рдХрдореА рдпрд╛ рдЙрд╕ рдкрд░ рдкреАрдкрд╣реЛрд▓ рдЕрдиреБрдХреВрд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдПрд╕рдПрдо рдХреЛ рдЕрдкрдиреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╕рдВрдЪрд╛рд▓рди рдореЗрдВ рдирд╣реАрдВ рддреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЬреАрд╕реАрд╕реА рдореЙрдбрд▓ рдореЗрдВ, рдХрдо рд╕реЗ рдХрдо, рдХрдВрдкрд╛рдЗрд▓рд░ рдЕрдкрдиреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕реЗ рдХреЙрдкреА рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдпрд╣ рдХреЛрдб рдкрдереЛрдВ рдХреЛ рджреЛрд╣рд░рд╛рддрд╛ рд╣реИ, рдЗрд╕реЗ рдХрднреА рднреА рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реА рддрд░рд╣ред рдпрджрд┐ рдПрдПрд╕рдПрдо рдЕрд╕реНрдерд┐рд░ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЬреАрд╕реАрд╕реА рдХреЗ рдкрд╛рд╕ рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдЕрдкрд╛рд░рджрд░реНрд╢реА рдСрдкрд░реЗрд╢рди рдХреА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЬрд╛рдирдХрд╛рд░реА рд╣реИ, рдЬреИрд╕реЗ fsin ред рдЕрдЬреАрдм рдбрд┐рдЬрд╛рдЗрди рдХреЗ рд▓рд┐рдП рдкреВрд░реА рдкреНрд░реЗрд░рдгрд╛ рдЗрдирд▓рд╛рдЗрди рдПрдПрд╕рдПрдо рдмрдирд╛рдирд╛ рд╣реИ рдЬрд┐рд╕реЗ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝рд░ рдЧрдбрд╝рдмрдбрд╝ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдкреВрд░рд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдирд╣реАрдВред рдФрд░ рдореБрдЭреЗ LLVM рджреНрд╡рд╛рд░рд╛ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдЕрдиреБрднрд╡ рдирд╣реАрдВ рд╣реИред рддреЛ рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ, рдпрд╛ рдореИрдВрдиреЗ рдЗрд╕ рд╕рдордп рдХреНрдпрд╛ рдЧрд▓рдд рд╕рдордЭрд╛ рд╣реИред

рд╣рдордиреЗ рд╣рд╛рд▓ рдХреЗ рдХрд╛рд░реНрдп рд╕рдкреНрддрд╛рд╣ рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдХреНрдпреЛрдВрдХрд┐ @japaric рдХреЗ no_std рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдХреЗ рд╕рд░реНрд╡реЗрдХреНрд╖рдг рдореЗрдВ asm! рдореИрдХреНрд░реЛ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рд╣рдореЗрдВ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдЖрд╕рд╛рди рд░рд╛рд╕реНрддрд╛ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рд╣рдо рдпрд╣ рд╕рдм рди рднреВрд▓реЗрдВред

  • рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд░реНрддрдорд╛рди рдореЗрдВ asm! рдореИрдХреНрд░реЛ рдореЗрдВ рд╕реНрд╡реАрдХреГрдд рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдирд╣реАрдВ рд╣реИред рдЕрднреА рдпрд╣ рдЖрдо рддреМрд░ рдкрд░ "рдПрд▓рдПрд▓рд╡реАрдПрдо рдХреЛ рджреЗрдЦреЛ" рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдХрд╣рддрд╛ рд╣реИ "рдХреНрд▓реИрдВрдЧ рдХреЛ рджреЗрдЦреЛ" рдЬреЛ рдХрд╣рддрд╛ рд╣реИ "рдЬреАрд╕реАрд╕реА рдХреЛ рджреЗрдЦреЛ" рдЬрд┐рд╕рдореЗрдВ рдорд╣рд╛рди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдирд╣реАрдВ рд╣реИрдВред рдЕрдВрдд рдореЗрдВ рдпрд╣ рдЖрдо рддреМрд░ рдкрд░ "рдХрд┐рд╕реА рдФрд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдкрдврд╝реЗрдВ рдФрд░ рдЗрд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░реЗрдВ" рдпрд╛ "рдПрд▓рдПрд▓рд╡реАрдПрдо рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдкрдврд╝реЗрдВ" рдкрд░ рдиреАрдЪреЗ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИред рд╕реНрдерд┐рд░реАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдиреНрдпреВрдирддрдо рдпрд╣ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХрд╛ рдПрдХ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

  • рдЕрднреА, рдЬрд╣рд╛рдБ рддрдХ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ, LLVM рд╕реЗ рдХреЛрдИ рд╕реНрдерд┐рд░рддрд╛ рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИред asm! рдореИрдХреНрд░реЛ рдПрд▓рдПрд▓рд╡реАрдПрдо рдЕрднреА рдЬреЛ рдХрд░рддрд╛ рд╣реИ, рдЙрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реАрдзрд╛ рдмрд╛рдзреНрдпрдХрд╛рд░реА рд╣реИред рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдЬрдм рдЪрд╛рд╣реЗрдВ рддрдм рднреА рдПрд▓рдПрд▓рд╡реАрдПрдо рдХреЛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдЕрдкрдЧреНрд░реЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдХреНрдпрд╛ рдПрд▓рдПрд▓рд╡реАрдПрдо рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрднреА рднреА рдЗрд╕ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЛ рддреЛрдбрд╝ рдирд╣реАрдВ рдкрд╛рдПрдЧрд╛? рдЗрд╕ рдЪрд┐рдВрддрд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рд╣рдорд╛рд░реА рдЕрдкрдиреА рдкрд░рдд рд╣реЛ рдЬреЛ LLVM рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рд┐рдд рд╣реЛ ред рдЗрд╕ рддрд░рд╣ рд╣рдо рдЬрдм рдЪрд╛рд╣реЗрдВ LLVM рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдпрджрд┐ LLVM рдореЗрдВ рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрддрд╛ рд╣реИ рддреЛ рд╣рдо рдЕрдкрдиреЗ рдЕрдиреБрд╡рд╛рдж рдХреЛ LLVM рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ asm! рдХреЛ рд╕реНрдерд┐рд░ рдмрдирд╛рдирд╛ рд╣реИ рддреЛ рд╣рдореЗрдВ рдореВрд▓ рд░реВрдк рд╕реЗ рдЬрдВрдЧ рдореЗрдВ рд╕реНрдерд┐рд░рддрд╛ рдХреА рдЧрд╛рд░рдВрдЯреА рдХреЗ рдХреБрдЫ рддрдВрддреНрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

  • рдЕрднреА рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреБрдЫ рдмрдЧ рд╣реИрдВред A-рдЗрдирд▓рд╛рдЗрди-рдЕрд╕реЗрдВрдмрд▓реА рдЯреИрдЧ рдПрдХ рдЕрдЪреНрдЫрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдмрд┐рдВрджреБ рд╣реИ, рдФрд░ рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ ICEs, LLVM рдореЗрдВ segfaults, рдЖрджрд┐ рд╕реЗ рдЕрдЯрд╛ рдкрдбрд╝рд╛ рд╣реИред рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдЬ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЧреБрдгрд╡рддреНрддрд╛ рдХреА рдЧрд╛рд░рдВрдЯреА рдкрд░ рдЦрд░рд╛ рдирд╣реАрдВ рдЙрддрд░рддреА рд╣реИ рдЬреЛ рджреВрд╕рд░реЛрдВ рдХреЛ рдПрдХ рд╕реНрдерд┐рд░ рд╕реЗ рдЙрдореНрдореАрдж рд╣реИ рдЬрдВрдЧ рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛ред

  • рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдирд╛ рд╡реИрдХрд▓реНрдкрд┐рдХ рдмреИрдХрдПрдВрдб рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдмрд╣реБрдд рдХрдард┐рди рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд┐рд░реА рдпрд╛ рдХреНрд░реЗрдирд▓рд┐рдлреНрдЯ рдЬреИрд╕реЗ рдмреИрдХрдПрдВрдб рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрд▓рдПрд▓рд╡реАрдПрдо рдмреИрдХрдПрдВрдб рдХреЗ рд╕рд╛рде рдлреАрдЪрд░ рд╕рдорд╛рдирддрд╛ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдореЗрдВ рдмрд╣реБрдд рд▓рдВрдмрд╛ рд╕рдордп рд▓рдЧ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рдЯреБрдХрдбрд╝рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╕рдордп рдЗрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред


рдКрдкрд░ рд╕реВрдЪреАрдмрджреНрдз рдореБрджреНрджреЛрдВ рдХреЗ рдмрд╛рд╡рдЬреВрдж рд╣рдо рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдЖрдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ! рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдордиреЗ рдХреБрдЫ рд░рдгрдиреАрддрд┐рдпреЛрдВ рдкрд░ рдордВрдерди рдХрд┐рдпрд╛ рдХрд┐ рдХреИрд╕реЗ рд╣рдо рд╕реНрдерд┐рд░реАрдХрд░рдг рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдЧреЗ рдХрд╛ рдкреНрд░рд╛рдердорд┐рдХ рддрд░реАрдХрд╛ рдпрд╣ рдЬрд╛рдВрдЪрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХреНрд▓реИрдВрдЧ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИред рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдХреНрд▓реИрдВрдЧ рдФрд░ рд╕реА рдореЗрдВ рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рд╕реНрдерд┐рд░ рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ рдХрд┐ рд╣рдо рдЬреЛ рдХреБрдЫ рднреА рдХреНрд▓реИрдВрдЧ рдХрд░рддреЗ рд╣реИрдВ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ wrt LLVM) рдХреЗрд╡рд▓ рдорд┐рд░рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХреНрд▓реИрдВрдЧ рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕реЗ рдЕрдзрд┐рдХ рдЧрд╣рд░рд╛рдИ рд╕реЗ рд╕рдордЭрдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдХреНрдпрд╛ рдХреНрд▓реИрдВрдЧ рдХреА рдЕрдкрдиреА рдЕрдиреБрд╡рд╛рдж рдкрд░рдд рд╣реЛрддреА рд╣реИ? рдХреНрдпрд╛ рдпрд╣ рдХрд┐рд╕реА рдЗрдирдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдорд╛рдиреНрдп рдХрд░рддрд╛ рд╣реИ? (рдЖрджрд┐)

рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреА рдПрдХ рдФрд░ рд╕рдВрднрд╛рд╡рдирд╛ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рдЕрд╕реЗрдВрдмрд▓рд░ рд╣реИ рдЬреЛ рд╣рдо рд╢реЗрд▓реНрдл рдХреЛ рдХрд╣реАрдВ рдФрд░ рд╕реЗ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдерд┐рд░ рд╣реИред рдпрд╣рд╛рдБ рдХреБрдЫ рд╡рд┐рдЪрд╛рд░ рдереЗ nasm рдпрд╛ plan9 рдЕрд╕реЗрдВрдмрд▓рд░ред рдПрд▓рдПрд▓рд╡реАрдПрдо рдХреЗ рдЕрд╕реЗрдВрдмрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд╕реНрдерд┐рд░рддрд╛ рдЧрд╛рд░рдВрдЯреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд╣реА рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВ рдЬреЛ рдЖрдИрдЖрд░ рдореЗрдВ рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реЛрддреА рд╣реИрдВред (рдпрд╣ рдПрдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣рдореЗрдВ рд╕реНрдерд┐рд░рддрд╛ рдХреА рдЧрд╛рд░рдВрдЯреА рдЪрд╛рд╣рд┐рдП)

рдореИрдВ рдпрд╣ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдПрд▓рдПрд▓рд╡реАрдПрдо рдХрд╛ рдЗрдирд▓рд╛рдЗрди рдПрдПрд╕рдПрдо рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреНрд▓реИрдВрдЧ/рдЬреАрд╕реАрд╕реА рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕реЗ рдЕрд▓рдЧ рд╣реИред рдорддрднреЗрджреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

  • LLVM рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ $0 рдХреЗ рдмрдЬрд╛рдп %0 ред
  • рдПрд▓рдПрд▓рд╡реАрдПрдо рдирд╛рдорд┐рдд рдПрдПрд╕рдПрдо рдСрдкрд░реЗрдВрдб рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ %[name] ред
  • LLVM рдЕрд▓рдЧ рд░рдЬрд┐рд╕реНрдЯрд░ рдмрд╛рдзрд╛ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛: рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП "{eax}" рдХреЗ рдмрдЬрд╛рдп "a" 86 рдкрд░ред
  • рдПрд▓рдПрд▓рд╡реАрдПрдо рд╕реНрдкрд╖реНрдЯ рд░рдЬрд┐рд╕реНрдЯрд░ рдмрд╛рдзрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ ( "{r11}" )ред рд╕реА рдореЗрдВ рдЖрдкрдХреЛ рдПрдХ рд░рдЬрд┐рд╕реНрдЯрд░ ( register asm("r11") int x ) рдХреЗ рдореВрд▓реНрдп рдХреЛ рдмрд╛рдВрдзрдиреЗ рдХреЗ рд▓рд┐рдП рд░рдЬрд┐рд╕реНрдЯрд░ рдПрдПрд╕рдПрдо рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
  • рдПрд▓рдПрд▓рд╡реАрдПрдо "m" рдФрд░ "=m" рдмрд╛рдзрд╛рдПрдВ рдореВрд▓ рд░реВрдк рд╕реЗ рдЯреВрдЯ рдЧрдИ рд╣реИрдВред рдХреНрд▓реИрдВрдЧ рдЗрди рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд╕реНрдореГрддрд┐ рдмрд╛рдзрд╛рдУрдВ "*m" рдФрд░ "=*m" рдФрд░ рдЪрд░ рдХреЗ рдмрдЬрд╛рдп рдЪрд░ рдХреЗ рдкрддреЗ рдХреЛ рдПрд▓рдПрд▓рд╡реАрдПрдо рдореЗрдВ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИред
  • рдЖрджрд┐...

рдХреНрд▓реИрдВрдЧ рдЗрдирд▓рд╛рдЗрди рдПрдПрд╕рдПрдо рдХреЛ рдПрд▓рдПрд▓рд╡реАрдПрдо рдореЗрдВ рднреЗрдЬрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЬреАрд╕реАрд╕реА рдкреНрд░рд╛рд░реВрдк рд╕реЗ рдПрд▓рдПрд▓рд╡реАрдПрдо рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░ рджреЗрдЧрд╛ред рдпрд╣ рдмрд╛рдзрд╛рдУрдВ рдХрд╛ рдХреБрдЫ рд╕рддреНрдпрд╛рдкрди рднреА рдХрд░рддрд╛ рд╣реИ: рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ "i" рдСрдкрд░реЗрдВрдб рд╕рдВрдХрд▓рди-рд╕рдордп рд╕реНрдерд┐рд░рд╛рдВрдХ рд╣реИрдВ,


рдЗрд╕рдХреЗ рдЖрд▓реЛрдХ рдореЗрдВ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЙрд╕реА рдЕрдиреБрд╡рд╛рдж рдФрд░ рд╕рддреНрдпрд╛рдкрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдХреНрд▓реИрдВрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрдЬреАрдм рдПрд▓рдПрд▓рд╡реАрдПрдо рдПрдХ рдХреЗ рдмрдЬрд╛рдп рдЙрдЪрд┐рдд рдЬреАрд╕реАрд╕реА рдЗрдирд▓рд╛рдЗрди рдПрдПрд╕рдПрдо рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред

рдСрдирд▓рд╛рдЗрди рд╕реНрд▓рд╛рдЗрдб рдХреЗ рд╕рд╛рде рдбреА, рдПрдордПрд╕рд╡реАрд╕реА, рдЬреАрд╕реАрд╕реА, рдПрд▓рдПрд▓рд╡реАрдПрдо, рдФрд░ рдЬрдВрдЧ рдХреЗ рд╕рд╛рде рд╕рд╛рд░рд╛рдВрд╢ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рд╡реАрдбрд┐рдпреЛ рд╣реИ

рдХрд┐рд╕реА рдРрд╕реЗ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛ рд╕реНрдерд┐рд░ рдЬрдВрдЧ рдореЗрдВ рдЗрдирд▓рд╛рдЗрди рдПрдПрд╕рдПрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рдФрд░ рдЕрдзрд┐рдХ рдЕрдиреБрднрд╡ рдХреЗ рд╕рд╛рде рдореИрдВ рдЬрдВрдЧ рд╕реЗ рдХреБрдЫ рдПрд▓рдПрд▓рд╡реАрдПрдо рдПрдорд╕реА рдПрдкреАрдЖрдИ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдХреБрдЫ рд╡рд┐рдЪрд╛рд░:

  • рдЗрдирд▓рд╛рдЗрди рдПрдПрд╕рдПрдо рдореВрд▓ рд░реВрдк рд╕реЗ рдХреБрдЫ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рдмрд╛рдж рдХреЛрдб рдХреЗ рдПрдХ рд╕реНрдирд┐рдкреЗрдЯ рдХреА рдПрдХ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рд╣реИ, рдЬреЛ рдХреЛрдбрд╛рдВрддрд░рдг рдХреЗ рд▓рд┐рдП рдЖрдЙрдЯрдкреБрдЯ .s рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣реИред рдЗрд╕рдореЗрдВ рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдХреНрд▓реЙрдмрд░реНрдб рд░рдЬрд┐рд╕реНрдЯрд░ рднреА рд╕рдВрд▓рдЧреНрди рд╣реИрдВред рдпрд╣ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪрд╛ рдПрд▓рдПрд▓рд╡реАрдПрдо рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрднреА рднреА рдмрджрд▓рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХреБрдЫ рд╡рд┐рд╡рд░рдг рдереЛрдбрд╝рд╛ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ), рдФрд░ рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдХрд╛рдлреА рдврд╛рдВрдЪрд╛-рд╕реНрд╡рддрдВрддреНрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╣реИред

  • рд░рд╕реНрдЯ-рдлреЗрд╕рд┐рдВрдЧ рд╕реНрдкреЗрд╕рд┐рдлрд┐рдХреЗрд╢рди рд╕реЗ LLVM-рдлреЗрд╕рд┐рдВрдЧ IR рдлреЙрд░реНрдореЗрдЯ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдмрдирд╛рдирд╛ рдХрдард┐рди рдирд╣реАрдВ рд╣реИред рдФрд░ рдпрд╣ рд╕рд▓рд╛рд╣ рджреА рдЬрд╛ рд╕рдХрддреА рд╣реИ - рдПрд▓рдПрд▓рд╡реАрдПрдо рдХреЗ $ рдФрд░ рдЬреАрд╕реАрд╕реА % рдиреЛрдЯреЗрд╢рди рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╕реНрд╡рд░реВрдкрдг рдХреЗ рд▓рд┐рдП рдЬрдВрдЧ {} рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЕрд╕реЗрдВрдмрд▓реА рднрд╛рд╖рд╛ рдореЗрдВ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

  • рдПрд▓рдПрд▓рд╡реАрдПрдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдкрд╣рдЪрд╛рдирдиреЗ рдХреЗ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд░реВрдк рд╕реЗ рдЦрд░рд╛рдм рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЛ рдкрдХрдбрд╝ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдПрд▓рдПрд▓рд╡реАрдПрдо рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рдирд┐рд░реНрджреЗрд╢реЛрдВ рдореЗрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдмрд╣реБрдд рдЬрд░реВрд░реА рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

  • рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рд╕реНрд╡рдпрдВ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рдПрдХ рджреБрдГрд╕реНрд╡рдкреНрди рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред LLVM-C API MCAsmParser рддрд░реНрдХ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпреЗ рд╡рд░реНрдЧ рдмрд╛рдЗрдВрдбрдЬреЗрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдкрд░реЗрд╢рд╛рди рд╣реИрдВ (рдореИрдВрдиреЗ рдЗрд╕реЗ рдХрд┐рдпрд╛ рд╣реИ)ред

  • рдЕрдиреНрдп рдмреИрдХрдПрдВрдб рдХреЗ рд▓рд┐рдП рдкреЛрд░реНрдЯреЗрдмрд┐рд▓рд┐рдЯреА рдХреЗ рд▓рд┐рдП, рдЬрдм рддрдХ рдЖрдк рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рдЬреНрдпрд╛рджрд╛рддрд░ "рдЗрд╕ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рд░рдЬрд┐рд╕реНрдЯрд░ рдЖрд╡рдВрдЯрди рдФрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд╕рд╛рде рдХреЙрдкреА-рдкреЗрд╕реНрдЯ" рдХреЗ рд╕реНрддрд░ рдкрд░ рд░рдЦрддреЗ рд╣реИрдВ, рддрдм рддрдХ рдЗрд╕реЗ рдмреИрдХрдПрдВрдб рдХреЛ рдЗрддрдирд╛ рдЕрдзрд┐рдХ рдмрд╛рдзрд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдкреВрд░реНрдгрд╛рдВрдХ рд╕реНрдерд┐рд░рд╛рдВрдХ рдФрд░ рд╕реНрдореГрддрд┐ рдмрд╛рдзрд╛рдУрдВ рдХреЛ рдЫреЛрдбрд╝рдирд╛ рдФрд░ рдХреЗрд╡рд▓ рдмреИрдВрдХ рдмрд╛рдзрд╛рдУрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рд╕реЗ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдереЛрдбрд╝рд╛ рд╕рд╛ рдЦреЗрд▓ рдЪрд▓ рд░рд╣рд╛ рд╣реИред рдореИрдВрдиреЗ рдПрдХ рд▓рд┐рдЦрд╛ рд╣реИ рдЬреЛ рдЬреАрд╕реАрд╕реА рд╢реИрд▓реА рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рдЬрдВрдЧ рд╢реИрд▓реА рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИ https://github.com/parched/gcc-asm-rsред рдореИрдВрдиреЗ рдПрдХ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рднреА рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рд╣реИ рдЬреЛ рдПрдХ рдбреАрдПрд╕рдПрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдмрд╛рдзрд╛рдУрдВ рдХреЛ рд╕рдордЭрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ рдФрд░ рд╡реЗ рд╕рднреА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рдВрднрд╛рд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВред

рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕ рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ рдкрд╣реБрдВрдЪрд╛ рд╣реВрдВ рдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрдВрдЧ рдХреЛ рдХреЗрд╡рд▓ рдирдВрдЧреЗ рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдмреНрд▓реЙрдХреНрд╕ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдлрд┐рд░ рд╕рдореБрджрд╛рдп рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рд╕рд╛рде рдкреЗрдбрд╝ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдХрд░ рд╕рд░реНрд╡реЛрддреНрддрдо рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдЖ рд╕рдХрддрд╛ рд╣реИред рдореВрд▓ рд░реВрдк рд╕реЗ, рдХреЗрд╡рд▓ llvm рд╢реИрд▓реА рдХреЛ рд╕реНрдерд┐рд░ рдХрд░реЗрдВ рдЬреЛ рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ "r" рдФрд░ "i" рдФрд░ рд╢рд╛рдпрдж "m" рдмрд╛рдзрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╣реИ, рдФрд░ рдХреЛрдИ рдХреНрд▓реЙрдмрд░реНрд╕ рдирд╣реАрдВ рд╣реИред рдЕрдиреНрдп рдмрд╛рдзрд╛рдУрдВ рдФрд░ рдХреНрд▓реЙрдмрд░реНрд╕ рдХреЛ рдмрд╛рдж рдореЗрдВ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдорд┐рдиреА рдЖрд░рдПрдлрд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдЪреАрдЬреЛрдВ рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрдиреЗ рд▓рдЧрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдирд╛ рдПрдХ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдХрд╛рдо рд╣реИ рдЬреЛ рддрдм рддрдХ рдХрднреА рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рдХреЛрдИ рдкреВрд░реЗ рд╕рд╛рд▓ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдкрд░ рдЬреЛрд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдкреВрд░реНрдгрдХрд╛рд▓рд┐рдХ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдареЗрдХреЗрджрд╛рд░ рдХреЛ рдХрд╛рдо рдкрд░ рдирд╣реАрдВ рд░рдЦрддрд╛ред рдореИрдВ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ @parched рдХрд╛ asm! рдЯреБрдХрдбрд╝реЗ рдЯреБрдХрдбрд╝реЗ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рдЗрд╕реЗ рдЯреНрд░реИрдХреНрдЯреЗрдмрд▓ рдмрдирд╛ рджреЗрдЧрд╛ред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдЗрд╕реЗ рдЙрдард╛рдПрдЧрд╛ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдЪрд▓реЗрдЧрд╛ред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдЙрд╕ рд╕рдВрддреЛрд╖рдЬрдирдХ рд╕рдорд╛рдзрд╛рди рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рдмрдВрдж рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдХрднреА рдирд╣реАрдВ рдЖрдПрдЧрд╛ рдФрд░ рдЕрд╕рдВрддреЛрд╖рдЬрдирдХ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдкрд╣реБрдВрдЪреЗрдЧрд╛ рдЬреЛ: asm! рдХреЛ рд╕реНрдерд┐рд░ рдХрд░реЗрдЧрд╛, рдореМрд╕рд╛, рдЖрдИрд╕реАрдИ, рдмрдЧ рдФрд░ рд╕рднреА , рдЬрдВрдХ рдФрд░ рдЧреИрд░-рдкреЛрд░реНрдЯреЗрдмрд┐рд▓рд┐рдЯреА рдХрд╛ рд╡рд┐рдЬреНрдЮрд╛рдкрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдбреЙрдХреНрд╕ рдореЗрдВ рдЙрдЬреНрдЬреНрд╡рд▓ рдмреЛрд▓реНрдб рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде, рдФрд░ рдХрд┐рд╕реА рджрд┐рди рдЕрдЧрд░ рдПрдХ рд╕рдВрддреЛрд╖рдЬрдирдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЪрдорддреНрдХрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдЕрдкрдиреЗ рд╕реНрд╡рд░реНрдЧреАрдп рдореЗрдЬрдмрд╛рди рдкрд░, рднрдЧрд╡рд╛рди рджреНрд╡рд╛рд░рд╛ рднреЗрдЬреЗ рдЧрдП рдЙрддрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рддреЛ рдЗрд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреЗ рдЗрд░рд╛рджреЗ рд╕реЗред IOW, рд╣рдореЗрдВ рдареАрдХ рд╡рд╣реА рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рд╣рдордиреЗ macro_rules! (рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, macro_rules! , рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЙрдиреНрдорддреНрдд рдмреИрдВрдб-рд╕рд╣рд╛рдпрддрд╛ рдФрд░ рд▓реАрдХ рднрд╡рд┐рд╖реНрдп-рдкреНрд░реВрдлрд┐рдВрдЧ рдХреА рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЕрд╡рдзрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ)ред рдореИрдВ рд╡реИрдХрд▓реНрдкрд┐рдХ рдмреИрдХрдПрдВрдб рдХреЗ рдкреНрд░рднрд╛рд╡реЛрдВ рдкрд░ рджреБрдЦреА рд╣реВрдВ, рд▓реЗрдХрд┐рди рд╕рд┐рд╕реНрдЯрдо рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд▓рд┐рдореНрдмреЛ рдореЗрдВ рдЖрд░реЛрдкрд┐рдд рдХрд░рдирд╛ рд╢рд░реНрдордирд╛рдХ рд╣реИ, рдФрд░ рд╣рдо рдХрдИ рдмреИрдХрдПрдВрдб рдХреА рдХрд╛рд▓реНрдкрдирд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдмреИрдХрдПрдВрдб рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдореЗрдВ рдмрд╛рдзрд╛ рдирд╣реАрдВ рдмрдирдиреЗ рджреЗ рд╕рдХрддреЗред рдореИрдВ рддреБрдорд╕реЗ рднреАрдЦ рдорд╛рдБрдЧрддрд╛ рд╣реВрдБ, рдореБрдЭреЗ рдЧрд▓рдд рд╕рд╛рдмрд┐рдд рдХрд░реЛ!

рд╕рд┐рд╕реНрдЯрдо рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд▓рд┐рдореНрдмреЛ рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдЖрд░реЛрдкрд┐рдд рдХрд░рдирд╛ рд╢рд░реНрдордирд╛рдХ рд╣реИ

рдбреЗрдЯрд╛ рдмрд┐рдВрджреБ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рдЕрднреА рдПрдХ рдЯреЛрдХрд░рд╛ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рд╕реНрдерд┐рд░ рдЬрдВрдЧ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдПрдПрд╕рдПрдо рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рдПрдХрдорд╛рддреНрд░ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП gcc рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ: https://github.com/main--/unwind- рдЖрд░рдПрд╕/рдмреНрд▓реЙрдм/266e0f26b6423f4a2b8a8c72442b319b5c33b658/src/unwind_helper.c


рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдХреЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕рдХреЗ рдлрд╛рдпрджреЗ рд╣реИрдВ, рдореИрдВ "рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдмреНрд▓реЙрдХреНрд╕ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдФрд░ рдмрд╛рдХреА рдХреЛ рдкреНрд░реЛ-рдореИрдХреНрд░реЛрдЬрд╝ рдкрд░ рдЫреЛрдбрд╝ рджреЗрдиреЗ" рд╕реЗ рдереЛрдбрд╝рд╛ рд╕рд╛рд╡рдзрд╛рди рд╣реВрдВ - рджреГрд╖реНрдЯрд┐рдХреЛрдгред рдпрд╣ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдбрд┐рдЬрд╛рдЗрди, рдЖрд░рдПрдлрд╕реА рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЖрдЙрдЯрд╕реЛрд░реНрд╕ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХреЛрдИ рднреА рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдХреЛрдИ рдирд╣реАрдВред рдмреЗрд╢рдХ рдХрдордЬреЛрд░ рд╕реНрдерд┐рд░рддрд╛/рдЧреБрдгрд╡рддреНрддрд╛ рдХреА рдЧрд╛рд░рдВрдЯреА рдкреВрд░реА рдмрд╛рдд рд╣реИ (рд╡реНрдпрд╛рдкрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдХреБрдЫ рдЕрдкреВрд░реНрдг рд╣реЛрдирд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реЛрдиреЗ рд╕реЗ рдХрд╛рдлреА рдмреЗрд╣рддрд░ рд╣реИ), рдореИрдВ рдЗрд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВред

рдХрдо рд╕реЗ рдХрдо рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдмреНрд▓реЙрдХреНрд╕ рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдбрд┐рдЬрд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП - рдФрд░ рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, "expr" : foo : bar : baz рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рдпрд╛рдж рдирд╣реАрдВ рд╣реИ рдХрд┐ рдкрд╣рд▓реА рдХреЛрд╢рд┐рд╢ рдореЗрдВ рд╣реА рдореБрдЭреЗ рдСрд░реНрдбрд░ рдорд┐рд▓ рдЧрдпрд╛ рд╣реЛ, рдореБрдЭреЗ рд╣рдореЗрд╢рд╛ рдЗрд╕реЗ рджреЗрдЦрдирд╛ рд╣реЛрддрд╛ рд╣реИред "рдореИрдЬрд┐рдХ рдХреИрдЯреЗрдЧрд░реА рдХреЛ рдХреЛрд▓рди рд╕реЗ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдЖрдк рдореИрдЬрд┐рдХ рдХреИрд░реЗрдХреНрдЯрд░ рдХреЗ рд╕рд╛рде рд▓рдЧрд╛рддрд╛рд░ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рд╡реЗрд░рд┐рдПрдмрд▓ рдирд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП рдореИрдЬрд┐рдХ рдЪреАрдЬреЗрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рдЖрдк рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдореИрд╢ рднреА рдХрд░рддреЗ рд╣реИрдВ" рдмрд╕ рдЦрд░рд╛рдм рд╣реИред

рдПрдХ рд╡рд┐рдЪрд╛рд░,тАж

рдЖрдЬ, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдирд╛рдо dynasm рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ x64 рдХреЛрдб рдХреЗ рдПрдХ рдлреНрд▓реЗрд╡рд░ рдХреЗ рд╕рд╛рде рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рдкреНрд░реА-рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд▓рдЧрдЗрди рдХреЗ рд╕рд╛рде рдЕрд╕реЗрдВрдмрд▓реА рдХреЛрдб рдЬреЗрдирд░реЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдпрд╣ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдЬрд╡рд╛рдм рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЕрдЧрд░ rustc рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЛ рд╡реЗрд░рд┐рдПрдмрд▓ рдореИрдк рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдХреЛрдб рдореЗрдВ рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рд╕реЗрдЯ рдХреЛ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ- рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдЗрди рд╕реЗрдЯ рдХреЛред

рдЗрд╕ рддрд░рд╣, рдЬрдВрдЧ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рдПрдХрдорд╛рддреНрд░ рдорд╛рдирдХреАрдХрд░рдг рднрд╛рдЧ, рдЙрддреНрдкрдиреНрди рдХреЛрдб рдореЗрдВ рдХрд┐рд╕реА рднреА рдмрд╛рдЗрдЯ рдЕрдиреБрдХреНрд░рдо рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░рдЬрд┐рд╕реНрдЯрд░ рдЖрд╡рдВрдЯрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред рдпрд╣ рд╡рд┐рд╢рд┐рд╖реНрдЯ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕реНрд╡рд╛рдж рдХреЗ рд▓рд┐рдП рд╕рднреА рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИред

рдЧрддрд┐рд╢реАрд▓рддрд╛ рдХреЗ рдмрд┐рдирд╛ рднреА, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ cpuid / rtdsc рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП рдореИрдХреНрд░реЛрдЬрд╝ рдмрдирд╛рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдХреЗрд╡рд▓ рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдХрдЪреНрдЪреЗ рдЕрдиреБрдХреНрд░рдо рдореЗрдВ рдЕрдиреБрд╡рд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд▓рд╛ рдкреНрд░рд╢реНрди рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдмрд╛рдЗрдЯ-рд╕реАрдХреНрд╡реЗрдВрд╕ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдЧреБрдг/рдмрд╛рдзрд╛рдПрдВ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

[рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЗрд╕ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдореИрдВрдиреЗ рдЬреЛ рдХреБрдЫ рднреА рдХрд╣рд╛ рд╣реИ рд╡рд╣ рд╕рд╣реА рд╣реИред]

рдЕрдЧрд░ рд╣рдо рдПрд▓рдПрд▓рд╡реАрдПрдо рдХреЗ рдПрдХреАрдХреГрдд рдЕрд╕реЗрдВрдмрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╛рд╣рд░реА рдЕрд╕реЗрдВрдмрд▓рд░ рдХреЛ рдкреИрджрд╛ рдХрд░рдиреЗ рд╕реЗ рддреЗрдЬрд╝ рд╣реИ), рддреЛ рд╕реНрдерд┐рд░реАрдХрд░рдг рдХрд╛ рдорддрд▓рдм рдПрд▓рдПрд▓рд╡реАрдПрдо рдХреЗ рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдФрд░ рдПрдХреАрдХреГрдд рдЕрд╕реЗрдВрдмрд▓рд░ рд╕рдорд░реНрдерди рдкрд░ рд╕реНрдерд┐рд░ рд╣реЛрдирд╛ рд╣реИ- рдФрд░ рдЙрдирдореЗрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдХреНрд╖рддрд┐рдкреВрд░реНрддрд┐, рдХреЛрдИ рднреА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпрджрд┐ рд╣рдо рдПрдХ рдмрд╛рд╣рд░реА рдЕрд╕реЗрдВрдмрд▓рд░ рдХреЛ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВ, рддреЛ рд╣рдо рдЕрдкрдиреЗ рдЗрдЪреНрдЫрд┐рдд рдХрд┐рд╕реА рднреА рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╣рдо рдПрдХреАрдХреГрдд рдЕрд╕реЗрдВрдмрд▓рд░ рдХреЗ рдлрд╛рдпрджреЛрдВ рдХреЛ рдЫреЛрдбрд╝ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдЬреЛ рднреА рдмрд╛рд╣рд░реА рдЕрд╕реЗрдВрдмрд▓рд░ рд╣рдо рдХреЙрд▓ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЙрд╕рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рдВрдкрд░реНрдХ рдореЗрдВ рд╣реИрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрд▓рдПрд▓рд╡реАрдПрдо рдХреЗ рдкреНрд░рд╛рд░реВрдк рдкрд░ рд╕реНрдерд┐рд░ рд╣реЛрдирд╛ рдЕрдЬреАрдм рд╣реЛрдЧрд╛ рдЬрдм рдХреНрд▓реИрдВрдЧ рднреА рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╕рдВрднрд╡рддрдГ рдпрд╣ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдПрд▓рдПрд▓рд╡реАрдПрдо рдХреЗ рд╕рдорд░реНрдерди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЬреАрд╕реАрд╕реА рдХреА рддрд░рд╣ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИред

рдореИрдВ рдпрд╣ рдХрд╣рдХрд░ 100% рдареАрдХ рд╣реВрдВ рдХрд┐ "рд░рд╕реНрдЯ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрд▓реИрдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ" рдФрд░ рдЗрд╕реЗ рдПрдХ рджрд┐рди рдмреБрд▓рд╛ рд░рд╣рд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЬрдм рд╕реЗ AFAIK рдХреНрд▓реИрдВрдЧ рдХрд╛ рд░реБрдЦ рд╣реИ "рдХреНрд▓реИрдВрдЧ рдмрд┐рд▓реНрдХреБрд▓ рдЬреАрд╕реАрд╕реА рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ"ред рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрднреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬрдВрдЧ рдХрд╛ рдирдореВрдирд╛ рд╣реИ, рддреЛ рд╣рдо рднрд╛рд╖рд╛ рдХреЛ "рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди-рдкрд░рд┐рднрд╛рд╖рд┐рдд" рдореЗрдВ рдирд░рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд╛рдирдХреАрдХрд░рдг рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЙрдкрдХрд░рдг рд╣реИрдВред рдЕрдЧрд░ рд╣рдо рдЬреАрд╕реАрд╕реА рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдПрд▓рдПрд▓рд╡реАрдПрдо рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд▓реИрдВрдЧ рдХреЗ рдЕрдкрдиреЗ рдХреЛрдб рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ред рд╡реИрдХрд▓реНрдкрд┐рдХ рдмреИрдХрдПрдВрдб рдЪрд┐рдВрддрд╛рдПрдВ рджреВрд░ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ рдЬреАрд╕реАрд╕реА рдХреЗ рд▓рд┐рдП рдПрдХ рдЬрдВрдЧ рдлреНрд░рдВрдЯрдПрдВрдб рдЬреНрдпрд╛рджрд╛ рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдбрд┐рдЬрд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдо, рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЕрдВрддрд╣реАрди рдмрд╛рдЗрдХрд╢реЗрдб рдХреЗ рд▓рд┐рдП рдХрдо, рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕рд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдо, рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрдоред

рдЕрдЧрд░ рд╣рдо рдХреНрд▓реИрдВрдЧ рдХреЗ рд╕рдорд░реНрдерди рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рд╕реА рдЪреАрдЬ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдЗрд╕реЗ clang_asm! рдХрд╣рдирд╛ рдЪрд╛рд╣рд┐рдПред asm! рдирд╛рдо рдХрд┐рд╕реА рдРрд╕реА рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдЖрд░рдХреНрд╖рд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕реЗ рдЕрдиреНрдп рдкреНрд░рдореБрдЦ рд░рд╕реНрдЯ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреА рддрд░рд╣ рдкреВрд░реНрдг RFC рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛред #рдмрд╛рдЗрдХ рд╢реЗрдб

рдХреБрдЫ рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬреЛ рдореИрдВ рд░рд╕реНрдЯ рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдореЗрдВ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ:

  • рдЯреЗрдореНрдкрд▓реЗрдЯ-рд╕рд╛рде-рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдкреИрдЯрд░реНрди рдмрджрд╕реВрд░рдд рд╣реИред рдореИрдВ рд╣рдореЗрд╢рд╛ рдЕрд╕реЗрдВрдмрд▓реА рдЯреЗрдХреНрд╕реНрдЯ рдФрд░ рдмрд╛рдзрд╛ рд╕реВрдЪреА рдХреЗ рдмреАрдЪ рдЖрдЧреЗ рдФрд░ рдкреАрдЫреЗ рдХреВрдж рд░рд╣рд╛ рд╣реВрдВред рдмреНрд░реЗрд╡рд┐рдЯреА рд▓реЛрдЧреЛрдВ рдХреЛ рд╕реНрдерд┐рддреАрдп рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╕реБрдЧрдорддрд╛ рдЦрд░рд╛рдм рд╣реЛ рдЬрд╛рддреА рд╣реИред рдкреНрд░рддреАрдХрд╛рддреНрдордХ рдирд╛рдореЛрдВ рдХрд╛ рдЕрдХреНрд╕рд░ рдорддрд▓рдм рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╣реА рдирд╛рдо рддреАрди рдмрд╛рд░ рджреЛрд╣рд░рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ: рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ, рдСрдкрд░реЗрдВрдб рдХрд╛ рдирд╛рдордХрд░рдг, рдФрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рдСрдкрд░реЗрдВрдб рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рд╣реЛрдирд╛ред рдПрд▓реЗрдХреНрд╕ рдХреА рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд╕реНрд▓рд╛рдЗрдбреНрд╕ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдбреА рдФрд░ рдПрдордПрд╕рд╡реАрд╕реА рдЖрдкрдХреЛ рдХреЛрдб рдореЗрдВ рдХреЗрд╡рд▓ рдЪрд░ рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрддреЗ рд╣реИрдВ, рдЬреЛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИред

  • рдмрд╛рдзрд╛рдУрдВ рдХреЛ рд╕рдордЭрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдФрд░ (рдЬреНрдпрд╛рджрд╛рддрд░) рдЕрд╕реЗрдВрдмрд▓реА рдХреЛрдб рдХреЗ рд╕рд╛рде рдмреЗрдорд╛рдиреАред рдпрджрд┐ рд░рд╕реНрдЯ рдореЗрдВ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдкрд░реНрдпрд╛рдкреНрдд рд╡рд┐рд╕реНрддреГрдд рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдПрдХ рдПрдХреАрдХреГрдд рдЕрд╕реЗрдВрдмрд▓рд░ рдерд╛, рддреЛ рдпрд╣ рддреНрд░реБрдЯрд┐ рдФрд░ рднреНрд░рдо рдХреЗ рд╕реНрд░реЛрдд рдХреЛ рд╣рдЯрд╛рдХрд░, рдСрдкрд░реЗрдВрдб рдкрд░ рдмрд╛рдзрд╛рдУрдВ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддрд╛ рдерд╛ред рдпрджрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдмрд╛рдзрд╛ рдХреА рдЖрдкреВрд░реНрддрд┐ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рдиреЙрд░реНрдорди рд░реИрдорд╕реЗ рдФрд░ рдореИрд░реА рдлрд░реНрдирд╛рдВрдбреАрдЬ рдиреЗ рдиреНрдпреВ рдЬрд░реНрд╕реА рдорд╢реАрди рдХреЛрдб рдЯреВрд▓рдХрд┐рдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдХрд╛рдЧрдЬрд╛рдд рд▓рд┐рдЦреЗ рдереЗ рдЬрдм рдЙрдирдХреЗ рдкрд╛рд╕ рдХреЙрдореНрдкреИрдХреНрдЯ рддрд░реАрдХреЗ рд╕реЗ рдЕрд╕реЗрдВрдмрд▓реА/рдорд╢реАрди рднрд╛рд╖рд╛ рдЬреЛрдбрд╝реЗ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрдХреГрд╖реНрдЯ рд╡рд┐рдЪрд╛рд░ рдереЗред рд╡реЗ (рдкреЗрдВрдЯрд┐рдпрдо рдкреНрд░реЛ-рдпреБрдЧ) iA-32 рдирд┐рд░реНрджреЗрд╢ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рд╕реЗ рдирд┐рдкрдЯрддреЗ рд╣реИрдВ; рдпрд╣ рд╕реНрд╡рдЪреНрдЫ рдЖрд░рдЖрдИрдПрд╕рд╕реА рдЖрдИрдПрд╕рдП рддрдХ рд╣реА рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИред

рдореИрдВ рд╕рдмрд╕реЗ рд╣рд╛рд▓ рдХреЗ рдХрд╛рд░реНрдп рд╕рдкреНрддрд╛рд╣ рдХреЗ

  • рдЖрдЬ, рдЬрд╣рд╛рдБ рддрдХ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ, рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдореВрд▓ рд░реВрдк рд╕реЗ рдХреЛрдИ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдирд╣реАрдВ рд╣реИред рдЗрд╕рдореЗрдВ рдПрд▓рдПрд▓рд╡реАрдПрдо рдЗрдВрдЯрд░реНрдирд▓ рдФрд░ рд╕рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
  • рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрд▓рдПрд▓рд╡реАрдПрдо рд╕реЗ рд╕реНрдерд┐рд░рддрд╛ рдХреА рдХреЛрдИ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИред рд╣рдо рд╕рднреА рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдПрд▓рдПрд▓рд╡реАрдПрдо рдореЗрдВ рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд┐рд╕реА рднреА рджрд┐рди рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред
  • рдпрд╣, рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдЬрдВрдЧ рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд╣реА рдЫреЛрдЯреА рд╕реБрд╡рд┐рдзрд╛ рд╣реИред рдпрд╣ (рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░) segfaults, ICE, рдФрд░ рдЕрдЬреАрдм LLVM рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рднрд░рд╛ рд╣реБрдЖ рд╣реИред
  • рдПрдХ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдмрд┐рдирд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдмреИрдХрдПрдВрдб рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рдирд╛ рднреА рдЕрд╕рдВрднрд╡ рд╣реИред

рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ "рдЕрдЧрд░ рд╣рдо рдЗрд╕реЗ рдЕрднреА рд╕реНрдерд┐рд░ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╣рдо рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕реЗ рдкрдЫрддрд╛рдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрдВрдЧреЗ" рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рд╣реИ, рдФрд░ рди рдХреЗрд╡рд▓ "рдЗрд╕реЗ рдкрдЫрддрд╛рд╡рд╛" рдмрд▓реНрдХрд┐ "рдХрд┐рд╕реА рднреА рдирдИ рдкреНрд░рдгрд╛рд▓реА рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧрдВрднреАрд░ рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИ" рдХреА рдмрд╣реБрдд рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред

рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрдо рд╕реЗ рдХрдо рдореИрдВ рджреГрдврд╝рддрд╛ рд╕реЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдмреБрд▓реЗрдЯ (2) рд╕реЗ рд╕рдордЭреМрддрд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЙрд░реНрдл "рд╕реНрдерд┐рд░ рдЪреИрдирд▓" рдореЗрдВ рд╕реНрдерд┐рд░ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛)ред рдЕрдиреНрдп рдЧреЛрд▓рд┐рдпреЛрдВ рдХреЛ рдЫреЛрдбрд╝рдирд╛ рдХрд╛рдлреА рджреБрдЦрдж рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд░рд╕реНрдЯ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреА рдЕрдкреЗрдХреНрд╖рд┐рдд рдЧреБрдгрд╡рддреНрддрд╛ рдХреЛ рдирд╖реНрдЯ рдХрд░ рджреЗрддрд╛ рд╣реИ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХрд╛рдлреА рдЕрдзрд┐рдХ рд╣реИред

@jcranmer рдиреЗ рд▓рд┐рдЦрд╛:

рдПрд▓рдПрд▓рд╡реАрдПрдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдкрд╣рдЪрд╛рдирдиреЗ рдХреЗ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд░реВрдк рд╕реЗ рдЦрд░рд╛рдм рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЛ рдкрдХрдбрд╝ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдПрд▓рдПрд▓рд╡реАрдПрдо рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рдирд┐рд░реНрджреЗрд╢реЛрдВ рдореЗрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдмрд╣реБрдд рдЬрд░реВрд░реА рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐, рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдХреНрд▓реЛрдмрд░ рд╕реВрдЪрд┐рдпреЛрдВ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдирд╛ рдХрд╛рдлреА рдХрдард┐рди рд╣реЛрдЧрд╛ред рд╕рд┐рд░реНрдл рдЗрд╕рд▓рд┐рдП рдХрд┐ рдорд╢реАрди-рднрд╛рд╖рд╛ рдХрд╛ рдЯреБрдХрдбрд╝рд╛ рдПрдХ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдЙрд╕реЗ рдкрдХрдбрд╝ рд▓реЗрддрд╛ рд╣реИ; рд╢рд╛рдпрдж рдпрд╣ рдЗрд╕реЗ рдмрдЪрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИред рд░реВрдврд╝рд┐рд╡рд╛рджреА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛрдб рдЬрдирд░реЗрдЯрд░ рдХреЛ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд╣рддреЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдареАрдХ рд╣реЛрдЧрд╛ред

@alexcrichton рдиреЗ рд▓рд┐рдЦрд╛:

рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрд▓рдПрд▓рд╡реАрдПрдо рд╕реЗ рд╕реНрдерд┐рд░рддрд╛ рдХреА рдХреЛрдИ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИред рд╣рдо рд╕рднреА рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдПрд▓рдПрд▓рд╡реАрдПрдо рдореЗрдВ рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд┐рд╕реА рднреА рджрд┐рди рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред

LLVM рдбреЙрдХреНрд╕ рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИ "рдирдП рд░рд┐рд▓реАрдЬрд╝ рдкреБрд░рд╛рдиреЗ рд░рд┐рд▓реАрдЬрд╝ рд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рдЙрдиреНрд╣реЗрдВ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред" (рдЖрдИрдЖрд░ рд╕рдВрдЧрддрддрд╛ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ)ред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╡реЗ рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рдХрд┐рддрдирд╛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдКрдкрд░ рддрд░реНрдХ рджрд┐рдпрд╛ рд╣реИ, рдПрд▓рдПрд▓рд╡реАрдПрдо рд╕реНрддрд░ рдкрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдИ рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдирд╣реАрдВ рд╣реИ рдЬреЛ рдореМрдЬреВрджрд╛ рд╕реНрдерд┐рддрд┐ рд╕реЗ рдЕрд░реНрдерд╢рд╛рд╕реНрддреНрд░ рдХреЛ рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ рдмрджрд▓ рджреЗрдЧрд╛ (рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдХрд╣реЗрдВ, рдЬрд╣рд░ рдФрд░ undef рдХреЗ рдЖрд╕рдкрд╛рд╕ рдЪрд▓ рд░рд╣реЗ рдореБрджреНрджреЗ)ред рдпрд╣ рдХрд╣рдирд╛ рдХрд┐ рдЗрд╕рдХреА рд╕рдВрднрд╛рд╡рд┐рдд рдЕрд╕реНрдерд┐рд░рддрд╛ рдЗрд╕реЗ рд░рд╕реНрдЯ asm! рдмреНрд▓реЙрдХ рдХреЗ рд▓рд┐рдП рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреБрдЫ рд╣рдж рддрдХ рдмреЗрдИрдорд╛рди рд╣реИред рдЕрдм рдпрд╣ рдХрд╣рдирд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд╕рд╛рде рдЕрдиреНрдп рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ (рдЦрд░рд╛рдм рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдореЗрдВ рд╕реБрдзрд╛рд░ рд╣реБрдЖ рд╣реИ; рдмрд╛рдзрд╛ рдХреА рдХрдореА; рдЦрд░рд╛рдм рдирд┐рджрд╛рди; рдФрд░ рдХрдо-рд╕рд╛рдорд╛рдиреНрдп рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рдмрдЧрд┐рдпрд╛ рд╡реЗ рд╣реИрдВ рдЬреЛ рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖрддреЗ рд╣реИрдВ)ред

рд╕реВрддреНрд░ рдкрдврд╝рдиреЗ рдореЗрдВ рдореЗрд░реА рд╕рдмрд╕реЗ рдмрдбрд╝реА рдЪрд┐рдВрддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдЙрддреНрддрдо рдХреЛ рдЕрдЪреНрдЫреЗ рдХрд╛ рджреБрд╢реНрдорди рдмрдирд╛ рд▓реЗрддреЗ рд╣реИрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рдЪрд┐рдВрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдЬрд╛рджреВ рдбреАрдПрд╕рдПрд▓ рдордзреНрдпрд╕реНрде рдХреА рдЦреЛрдЬ рдореЗрдВ рдЗрдирд▓рд╛рдЗрди-рдПрдПрд╕рдПрдо рдХреЗ рд▓рд┐рдП рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд░реВрдк рдореЗрдВ рдШреВрдордиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдореЗрдВ рдХреБрдЫ рд╕рд╛рд▓реЛрдВ рд▓рдЧреЗрдВрдЧреЗ рдХреНрдпреЛрдВрдХрд┐ рд▓реЛрдЧреЛрдВ рдХреЛ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдПрдПрд╕рдПрдо рдкрд╛рд░реНрд╕рд░реНрд╕ рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдирд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрд▓рдПрд▓рд╡реАрдПрдо рдХреЗ рдХрд╛рд░рдг рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВред рдХрд┐рдирд╛рд░реЗ рдХреЗ рдорд╛рдорд▓реЗред

рдХреНрдпрд╛ рдПрд▓рдПрд▓рд╡реАрдПрдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЧрд╛рд░рдВрдЯреА рджреЗ рд░рд╣рд╛ рд╣реИ рдХрд┐ рд╡реЗ рдХрднреА рднреА рдРрд╕реА рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ рдЬрд┐рд╕рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдЙрдиреНрд╣реЛрдВрдиреЗ рдХрднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ? рд╡реЗ рдпрд╣ рднреА рдХреИрд╕реЗ рддрдп рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдХреЛрдИ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд▓рдд рд╕рдВрдХрд▓рди рдерд╛ рдпрд╛ рдирд╣реАрдВ? рдореИрдВ рдЗрд╕реЗ IR рдХреЗ рдЕрдиреНрдп рднрд╛рдЧреЛрдВ рдХреЗ рд▓рд┐рдП рджреЗрдЦ рд╕рдХрддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрд╣реБрдд рдХреБрдЫ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрд▓рдПрд▓рд╡реАрдПрдо рдХреЗ рдкреНрд░рд╛рд░реВрдк рдкрд░ рд╕реНрдерд┐рд░ рд╣реЛрдирд╛ рдЕрдЬреАрдм рд╣реЛрдЧрд╛ рдЬрдм рдХреНрд▓реИрдВрдЧ рднреА рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдХреНрд▓реИрдВрдЧ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдЬреАрд╕реАрд╕реА рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦреЗ рдЧрдП рдХреЛрдб рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рд╣реИред rustc рдХрд╛ рд╡рд╣ рдЙрджреНрджреЗрд╢реНрдп рдирд╣реАрдВ рд╣реИред рдЬреАрд╕реАрд╕реА рдкреНрд░рд╛рд░реВрдк рдмрд╣реБрдд рдПрд░реНрдЧреЛрдиреЛрдорд┐рдХ рдирд╣реАрдВ рд╣реИ рдЗрд╕рд▓рд┐рдП рдЕрдВрддрддрдГ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдРрд╕рд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдЕрднреА рдХреЗ рд╕рд╛рде рдЬрд╛рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛, рдореИрдВ рдЕрдирд┐рд╢реНрдЪрд┐рдд рд╣реВрдВред рд╡рд░реНрддрдорд╛рди рд░рд╕реНрдЯ рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдмрд╣реБрдд рд╕рд╛рд░реЗ (рд░рд╛рдд рдореЗрдВ) рдХреЛрдб рд╣реИрдВ рдЬреЛ рдХрд┐ рдЕрдЧрд░ рд╣рдо рдЬреАрд╕реАрд╕реА рд╢реИрд▓реА рдореЗрдВ рдмрджрд▓ рдЬрд╛рддреЗ рд╣реИрдВ рддреЛ рдЯреВрдЯ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╢рд╛рдпрдж рдпрд╣ рдХреЗрд╡рд▓ рддрднреА рдмрджрд▓рдиреЗ рд▓рд╛рдпрдХ рд╣реИ рдЬрдм рд╣рдо рдХреБрдЫ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рдЖ рд╕рдХреЗрдВред

рдХрдо рд╕реЗ рдХрдо рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдмреНрд▓реЙрдХреНрд╕ рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдбрд┐рдЬрд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП - рдФрд░ рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, "expr" : foo : bar : baz рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдирд╣реАрдВ рд╣реИред

рдорд╛рдирд╛ред рдХрдо рд╕реЗ рдХрдо рдореИрдВ рдХрдЪреНрдЪреЗ рдПрд▓рдПрд▓рд╡реАрдПрдо рдкреНрд░рд╛рд░реВрдк рдХреЛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ рдЬрд╣рд╛рдВ рдмрд╛рдзрд╛рдПрдВ рдФрд░ рдХреНрд▓реЙрдмрд░реНрд╕ рд╕рднреА рдПрдХ рд╕реВрдЪреА рдореЗрдВ рд╣реИрдВред рд╡рд░реНрддрдорд╛рди рдореЗрдВ "=" рдЙрдкрд╕рд░реНрдЧ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рд╕реВрдЪреА рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрддрд┐рд░реЗрдХ рд╣реИред рдореБрдЭреЗ рдпрд╣ рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрд▓рдПрд▓рд╡реАрдПрдо рдЗрд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреА рддрд░рд╣ рдХреИрд╕реЗ рдорд╛рдирддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЖрдЙрдЯрдкреБрдЯ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИ, AFAIK рд╡рд░реНрддрдорд╛рди asm! рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЬрдВрдЧ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ "рдЖрдЙрдЯ" рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВред

рдПрд▓рдПрд▓рд╡реАрдПрдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдкрд╣рдЪрд╛рдирдиреЗ рдХреЗ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд░реВрдк рд╕реЗ рдЦрд░рд╛рдм рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЛ рдкрдХрдбрд╝ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

AFAIK LLVM рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдХрд╛ рдореБрдЦреНрдп рдХрд╛рд░рдг рдХреБрдЫ рдХреЛрдб рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рд╣реИ рдЬреЛ рдПрд▓рдПрд▓рд╡реАрдПрдо рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИред рдпрд╣ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рджреЗрдЦреЗ рдмрд┐рдирд╛ рдХреЗрд╡рд▓ рдЖрд╡рдВрдЯрди рдФрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдкрдВрдЬреАрдХреГрдд рдХрд░рддрд╛ рд╣реИред (рдЬрд╛рд╣рд┐рд░ рд╣реИ рдпрд╣ рдорд╢реАрди рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдЪрд░рдг рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рдкрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрд╛рдж рдореЗрдВ рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ)

рдЕрдЧрд░ рд╣рдо рдмрд╛рд╣рд░реА рдЕрд╕реЗрдВрдмрд▓рд░ рдХреЛ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдЗрдЪреНрдЫреБрдХ рд╣реИрдВ

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдПрдХреАрдХреГрдд рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХреБрдЫ рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рд░рдЬрд┐рд╕реНрдЯрд░ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд▓рдПрд▓рд╡реАрдПрдо рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡реИрд╢реНрд╡рд┐рдХ рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рд▓рд┐рдП, рдПрдХ рдмрд╛рд╣рд░реА рдЕрд╕реЗрдВрдмрд▓рд░ рдХрд╛рдо рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реЛрдЧрд╛ред

рдПрд▓рдПрд▓рд╡реАрдПрдо рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓рд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рд╣рдо рдХреНрд▓реИрдВрдЧ рдХреЗ рд╕рдорд╛рди рдирд╛рд╡ рдореЗрдВ рд╣реИрдВред рдпрд╛рдиреА, рдЕрдЧрд░ рд╡реЗ рдХреБрдЫ рдмрджрд▓рд╛рд╡ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдЙрдирдХреЗ рд╣реЛрдиреЗ рдкрд░ рдмрд╕ рдЙрдирдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдЕрдЧрд░ рд╣рдо рдХреНрд▓реИрдВрдЧ рдХреЗ рд╕рдорд░реНрдерди рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рд╕реА рдЪреАрдЬ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдЗрд╕реЗ рдХреНрд▓реИрдВрдЧ_рдЖрд╕реНрдо рдХрд╣рдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдПрд╕рдПрдо! рдирд╛рдо рдХрд┐рд╕реА рдРрд╕реА рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдЖрд░рдХреНрд╖рд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕реЗ рдкреВрд░реА RFC рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ, рдЬреИрд╕реЗ рдЕрдиреНрдп рдкреНрд░рдореБрдЦ рд░рд╕реНрдЯ рд╕реБрд╡рд┐рдзрд╛рдПрдБред #рдмрд╛рдЗрдХ рд╢реЗрдб

рдореИрдВ рдЗрд╕рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд╣реВрдБред +1

рд╡рд░реНрддрдорд╛рди рд░рд╕реНрдЯ рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдмрд╣реБрдд рд╕рд╛рд░реЗ (рд░рд╛рдд рдореЗрдВ) рдХреЛрдб рд╣реИрдВ рдЬреЛ рдХрд┐ рдЕрдЧрд░ рд╣рдо рдЬреАрд╕реАрд╕реА рд╢реИрд▓реА рдореЗрдВ рдмрджрд▓ рдЬрд╛рддреЗ рд╣реИрдВ рддреЛ рдЯреВрдЯ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╢рд╛рдпрдж рдпрд╣ рдХреЗрд╡рд▓ рддрднреА рдмрджрд▓рдиреЗ рд▓рд╛рдпрдХ рд╣реИ рдЬрдм рд╣рдо рдХреБрдЫ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рдЖ рд╕рдХреЗрдВред

@parched рдКрдкрд░ рдЙрджреНрдзреГрдд @jimblandy рдХреЗ рд╕реБрдЭрд╛рд╡ рдХреЗ рдЕрдиреБрд╕рд╛рд░, asm! рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдИ рднреА рд╡реНрдпрдХреНрддрд┐ рдЦреБрд╢реА рд╕реЗ рдЕрднреА рднреА рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ред

рдЖрдЬ, рдЬрд╣рд╛рдБ рддрдХ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ, рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдореВрд▓ рд░реВрдк рд╕реЗ рдХреЛрдИ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдирд╣реАрдВ рд╣реИред рдЗрд╕рдореЗрдВ рдПрд▓рдПрд▓рд╡реАрдПрдо рдЗрдВрдЯрд░реНрдирд▓ рдФрд░ рд╕рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

рдпрджрд┐ GCC рдХрд╛ рдЕрд╕реЗрдВрдмрд▓реА рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ 30 рд╡рд░реНрд╖реЛрдВ рдХреЗ рдмрд╛рдж рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдпрд╛ рдкреНрд░рд▓реЗрдЦрд┐рдд рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рдорд╛рди рд▓реЗрдирд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╛ рддреЛ рдПрдХ рдкреНрд░рд▓реЗрдЦрд┐рдд рдЕрд╕реЗрдВрдмрд▓реА рд╕рдмрд▓реИрдВрдЧреНрд╡реЗрдЬ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдПрдХ рдРрд╕рд╛ рдХрд╛рд░реНрдп рд╣реИ рдЬреЛ рдпрд╛ рддреЛ рдЗрддрдирд╛ рдХрдард┐рди рд╣реИ рдХрд┐ рдпрд╣ рд╣рдорд╛рд░реЗ рд╕реАрдорд┐рдд рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреА рд░рд╕реНрдЯ рдХреА рдХреНрд╖рдорддрд╛ рд╕реЗ рдкрд░реЗ рд╣реИ, рдпрд╛ рд╡рд╣ рдЬреЛ рд▓реЛрдЧ рдЕрд╕реЗрдВрдмрд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд╡реЗ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрд▓рдПрд▓рд╡реАрдПрдо рд╕реЗ рд╕реНрдерд┐рд░рддрд╛ рдХреА рдХреЛрдИ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИред рд╣рдо рд╕рднреА рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдПрд▓рдПрд▓рд╡реАрдПрдо рдореЗрдВ рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд┐рд╕реА рднреА рджрд┐рди рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЬреАрд╕реАрд╕реА/рдХреНрд▓реИрдВрдЧ рдХрд╛ рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрднреА рднреА рдмрджрд▓реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ 90 рдХреЗ рджрд╢рдХ рд╕реЗ рд▓рд┐рдЦреЗ рдЧрдП рд╕рднреА рд╕реА рдХреЛрдб рдХреЛ рддреЛрдбрд╝ рджреЗрдЧрд╛ред

рдПрдХ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдмрд┐рдирд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдмреИрдХрдПрдВрдб рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рдирд╛ рднреА рдЕрд╕рдВрднрд╡ рд╣реИред

рдХрдареЛрд░ рд╣реЛрдиреЗ рдХреЗ рдЬреЛрдЦрд┐рдо рдкрд░, рд╡реИрдХрд▓реНрдкрд┐рдХ рдмреИрдХрдПрдВрдб рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдореВрдХ рд╣реИ рдпрджрд┐ рд░рд╕реНрдЯ рдПрдХ рднрд╛рд╖рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрд╕реЗрдВрдмрд▓реА рдореЗрдВ рдЧрд┐рд░рдиреЗ рдХреА рд╢рд░реНрдордирд╛рдХ рдЕрдХреНрд╖рдорддрд╛ рдХреЗ рдХрд╛рд░рдг рдЬреАрд╡рд┐рдд рдирд╣реАрдВ рд░рд╣рддреА рд╣реИред рд░рд╛рдд рдЬрдм рддрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд╛рд╣рддрд╛ рд╣реИ рдореМрди рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рд░рд╛рдд рдЬрдВрдЧ рд╣реИ, рдЬреЛ рдФрд░ рдЕрдзрд┐рдХ рдХрдордЬреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП LLVM рдкрд░рд┐рд╡рд░реНрддрди рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╕реЗ рдЬрдВрдЧ рдХреА рд╕реНрдерд┐рд░рддрд╛ рдХреА рдЧрд╛рд░рдВрдЯреА рдХрд░рддрд╛ рд╣реИ рд╕рдорд░реНрдерди, рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред

рдЕрдиреНрдп рдЧреЛрд▓рд┐рдпреЛрдВ рдХреЛ рдЫреЛрдбрд╝рдирд╛ рдХрд╛рдлреА рджреБрдЦрдж рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд░рд╕реНрдЯ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреА рдЕрдкреЗрдХреНрд╖рд┐рдд рдЧреБрдгрд╡рддреНрддрд╛ рдХреЛ рдирд╖реНрдЯ рдХрд░ рджреЗрддрд╛ рд╣реИ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХрд╛рдлреА рдЕрдзрд┐рдХ рд╣реИред

рдореИрдВ рдЭреВрда рдирд╣реАрдВ рдмреЛрд▓ рд░рд╣рд╛ рд╣реВрдВ рдЬрдм рдореИрдВ рдХрд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╣рд░ рджрд┐рди рдореИрдВ рд░рд╕реНрдЯ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд░рд╡реИрдпреЗ рдФрд░ рдЧреБрдгрд╡рддреНрддрд╛ рдХреЗ рд╡рд┐рд╢рд╛рд▓ рдорд╛рдирдХ рдХреЗ рд▓рд┐рдП рдЖрднрд╛рд░реА рд╣реВрдВ рдЬреЛ рд╡реЗ рдЦреБрдж рдХреЛ рд░рдЦрддреЗ рд╣реИрдВ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрднреА-рдХрднреА рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рд╕рднреА рдзреАрдорд╛ рд╣реЛ рдЬрд╛рдПрдВ рддрд╛рдХрд┐ рдЖрдк рдЙрд╕ рдЧреБрдгрд╡рддреНрддрд╛ рдХреЛ рдмрдирд╛рдП рд░рдЦ рд╕рдХреЗрдВ рдмреНрд░рд╛рдпрди рдХреА рддрд░рд╣ рдЦреБрдж рдХреЛ рдЬрд▓рд╛рдП рдмрд┐рдирд╛)ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬрдм рд▓реБрдХрдорд╛рдирд╛ рдиреЗ рдЪрд╛рд░ рд╕рд╛рд▓ рдкрд╣рд▓реЗ asm! рдореИрдХреНрд░реЛ рдХреЛ рдЬреЛрдбрд╝рд╛ рдерд╛, рддрдм рдХрд┐рд╕реА рдХреЗ рд░реВрдк рдореЗрдВ рдмреЛрд▓рдирд╛, рдФрд░ рдЬрд┐рд╕рдиреЗ рддрдм рд╕реЗ рдЗрд╕реЗ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рдкреНрд░рдЧрддрд┐ рдирд╣реАрдВ рджреЗрдЦреА рд╣реИ, рдФрд░ рдЬреЛ рджреБрдЦ рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ рд░рд╕реНрдЯ рдореЗрдВ рдХреНрд░рд┐рдкреНрдЯреЛ рдЕрднреА рднреА рдЕрд╕рдВрднрд╡ рд╣реИ рдФрд░ рд╡рд╣ SIMD рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдзреАрд░реЗ-рдзреАрд░реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдЬрдмрдХрд┐ рдЬрдВрдЧ рдореЗрдВ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ, рдореИрдВ рдирд┐рд░рд╛рд╢ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реВрдВред рдЕрдЧрд░ рдореИрдВ рдпрд╣рд╛рдВ рдкрд░ рдЬреЛрд░ рджреЗрддрд╛ рд╣реВрдВ рддреЛ рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрддрд╛ рд╣реВрдВред рдпрд╣ рдЗрд╕ рд╕рдордп рд╕рдВрдХрдЯ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рдЪреАрдЬ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рдордп рд▓рдЧреЗрдЧрд╛, рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрддрдиреЗ рд╕рд╛рд▓ рдирд╣реАрдВ рд╣реИрдВ рдХрд┐ рдПрдХ рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░реАрдп рдЕрд╕реЗрдВрдмрд▓реА рдмреЛрд▓реА рдХреЛ рдЦрд░реЛрдВрдЪ рд╕реЗ рдбрд┐рдЬрд╛рдЗрди рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд▓рдЧреЗрдВ (рддрдереНрдп рд╕реЗ рд╕рд┐рджреНрдз) рдХрд┐ рд╣рдордиреЗ рдкрд┐рдЫрд▓реЗ рдЪрд╛рд░ рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рдЗрд╕ рджрд┐рд╢рд╛ рдореЗрдВ рдХреЛрдИ рдкреНрд░рдЧрддрд┐ рдирд╣реАрдВ рдХреА рд╣реИ)ред 2018 рдореЗрдВ рдХрднреА-рдХрднреА рдЬрдВрдЧ рдХреЛ рд╕реНрдерд┐рд░ рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╣рдореЗрдВ рдЗрд╕реЗ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрд╡ рдХрд▓рд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред macro_rules! рд╕реНрдерд┐рддрд┐ рдиреЗ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдХрд┐ рдХрднреА-рдХрднреА рдмрджрддрд░ рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИред рдПрдХ рдмрд╛рд░ рдлрд┐рд░, рдореИрдВ рдХрд┐рд╕реА рд╕реЗ рднреАрдЦ рдорд╛рдБрдЧ рд░рд╣рд╛ рд╣реВрдБ рдореБрдЭреЗ рдЧрд▓рдд рд╕рд╛рдмрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

FWIW рдФрд░ рдкрд╛рд░реНрдЯреА рдореЗрдВ рджреЗрд░ рд╕реЗ рдЖрдирд╛ рдореБрдЭреЗ рдкрд╕рдВрдж рд╣реИ рдЬреЛ @florob рдХреА рдХреЛрд▓реЛрди рдЯреЙрдХ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╣реИред рдЬрд┐рди рд▓реЛрдЧреЛрдВ рдиреЗ рдЗрд╕реЗ рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ, рдЙрдирдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рд╕рд╛рд░ рд╣реИ:

// Add 5 to variable:
let mut var = 0;
unsafe {
    asm!("add $5, {}", inout(reg) var);
}

// Get L1 cache size
let ebx: i32;
let ecx: i32;
unsafe {
    asm!(r"
        mov $$4, %eax;
        xor %ecx, %ecx;
        cpuid;
        mov %ebx, {};",
        out(reg) ebx, out(ecx) ecx, clobber(eax, ebx, edx)
    );
}
println!("L1 Cache: {}", ((ebx >> 22) + 1)
    * (((ebx >> 12) & 0x3ff) + 1)
    * ((ebx & 0xfff) + 1) * (ecx + 1));

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд░рдгрдиреАрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕реЗ: рд╡рд░реНрддрдорд╛рди asm рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ llvm_asm (рд╕рд╛рде рд╣реА рд╢рд╛рдпрдж рдХреБрдЫ рдорд╛рдореВрд▓реА рдмрджрд▓рд╛рд╡) рдФрд░ рдмрддрд╛рдПрдВ рдХрд┐ рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдПрд▓рдПрд▓рд╡реАрдПрдо рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рд╣реИ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЬрдВрдЧ рд╕реНрдерд┐рд░рддрд╛ рдЧрд╛рд░рдВрдЯреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ? рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдмреИрдХрдПрдВрдб рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рд╢рд░реНрдд рд╕рдВрдХрд▓рди рдХреЗ рд▓рд┐рдП target_feature рдЬреИрд╕реА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рд╡рд┐рднрд┐рдиреНрди рдмреИрдХрдПрдВрдб рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХрдореЛрдмреЗрд╢ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рд╛рдВ, рдЗрд╕ рддрд░рд╣ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдЬрдВрдЧ рдХреА рд╕реНрдерд┐рд░рддрд╛ рдереЛрдбрд╝реА рдзреБрдВрдзрд▓реА рд╣реЛ рдЬрд╛рдПрдЧреА, рд▓реЗрдХрд┐рди рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реАрдорд┐рдд рд░рдЦрдирд╛ рдЬрдВрдЧ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рддрд░реАрдХреЗ рд╕реЗ рд╣рд╛рдирд┐рдХрд╛рд░рдХ рд╣реИред

рдореИрдВрдиреЗ рдЗрдВрдЯрд░реНрдирд▓ рдлреЛрд░рдо рдХреЗ рд▓рд┐рдП рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░реА-рдЖрд░рдПрдлрд╕реА рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рд╣реИ: https://internals.rust-lang.org/t/pre-rfc-inline-assembly/6443 ред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред

рдпрд╣ рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдпрд╣рд╛рдБ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдареАрдХ-рдард╛рдХ рдХрд╛ рджреБрд╢реНрдорди рд╣реИред рдореИрдВ рдЕрднреА рдХреЗ рд▓рд┐рдП рд╕рдВрдЧрдд рд╕рд┐рдВрдЯреИрдХреНрд╕ рдФрд░ рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рд╕рд╛рде gcc_asm! рдпрд╛ clang_asm! рдпрд╛ llvm_asm! рдореИрдХреНрд░реЛ (рдпрд╛ рдЙрд╕рдХрд╛ рдХреЛрдИ рдЙрдЪрд┐рдд рдЙрдкрд╕рдореБрдЪреНрдЪрдп) рдХреЛ рд╕реНрдерд┐рд░ рд░рдЦрдиреЗ рдХрд╛ рдкреВрд░реНрдг рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реВрдВ, рдЬрдмрдХрд┐ рдПрдХ рдмреЗрд╣рддрд░ рд╕рдорд╛рдзрд╛рди рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ . рдореИрдВ рдПрдХ рдмрдбрд╝реЗ рд░рдЦрд░рдЦрд╛рд╡ рдмреЛрдЭ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреА рдЪреАрдЬ рдХрд╛ рд╕рдорд░реНрдерди рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рджреЗрдЦрддрд╛: рдКрдкрд░ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдЕрдзрд┐рдХ рдкрд░рд┐рд╖реНрдХреГрдд рд╕рд┐рд╕реНрдЯрдо рдРрд╕реЗ рджрд┐рдЦрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рд╡реЗ рдкреБрд░рд╛рдиреЗ рд╢реИрд▓реА рдХреЗ рдореИрдХреНрд░реЛрдЬрд╝ рдХреЛ рдирдП рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдЯреИрдХреНрдЯрд┐рдХ рд╕реИрдХрд░реАрди рдореЗрдВ рдмрджрд▓рдиреЗ рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдорд░реНрдерди рдХрд░реЗрдВрдЧреЗред

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдмрд╛рдЗрдирд░реА рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╣реИ http://[email protected]/BartMassey/popcount рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП x86_64 popcntl рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд▓рд┐рдП рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдЗрд╕ рдХреЛрдб рдХреЛ рд░рд╛рдд рдореЗрдВ рд░рдЦрдиреЗ рд╡рд╛рд▓реА рдПрдХрдорд╛рддреНрд░ рдЪреАрдЬ рд╣реИред рдХреЛрдб 12 рд╕рд╛рд▓ рдкреБрд░рд╛рдиреЗ C рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдЕрднреА, рдореЗрд░реА рдЕрд╕реЗрдВрдмрд▓реА рдХреА рд╢рд░реНрдд рд╣реИ

    #[cfg(any(target_arch = "x86", target_arch = "x86_64"))]

рдФрд░ рдлрд┐рд░ cpuid рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ popcnt рдореМрдЬреВрдж рд╣реИ рдпрд╛ рдирд╣реАрдВред рд░рд╕реНрдЯ рдореЗрдВ рд╣рд╛рд▓ рдХреА Google cpu_features рд▓рд╛рдЗрдмреНрд░реЗрд░реА https://opensource.googleblog.com/2018/02/cpu-features-library.html рдХреЗ рд╕рдорд╛рди рдХреБрдЫ рд╣реЛрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди c'est la vieред

рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдбреЗрдореЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЬрд┐рддрдирд╛ рдХреБрдЫ рднреА рд╣реИ, рдореИрдВ рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рд▓рд┐рдП, count_ones() рдЖрдВрддрд░рд┐рдХ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛ - рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдЗрд╕реЗ popcntl рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдЧреЛ рдХреЛ "-рд╕реА рд▓рдХреНрд╖реНрдп-рд╕реАрдкреАрдпреВ = рджреЗрд╢реА" рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╢рд╛рдпрдж RUSTFLAGS рдорд╛рдзреНрдпрдо рд╕реЗ (рд╕рдорд╕реНрдпрд╛ #1137 рдФрд░ рдХрдИ рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЗ рджреЗрдЦреЗрдВ) рдореЗрд░реЗ рд╕реНрд░реЛрдд рдХреЗ рд╕рд╛рде .cargo/config рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╕реЗ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЕрднреА рдореБрдЭреЗ рдореЗрдХрдлрд╝рд╛рдЗрд▓ рдХреЙрд▓рд┐рдВрдЧ рдХрд╛рд░реНрдЧреЛ рдорд┐рд▓ рдЧрдпрд╛ рд╣реИред

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдХреЛрдИ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдЗрдВрдЯреЗрд▓ рдФрд░ рдЕрдиреНрдп рдХреЗ рдлреИрдВрд╕реА рдкреЙрдкрдХрд╛рдЙрдВрдЯ рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЬрд┐рддрдирд╛ рдХрдард┐рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЙрд╕рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рдХрдард┐рди рд▓рдЧрддрд╛ рд╣реИред рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЬрд╡рд╛рдм рдирд╣реАрдВ рд╣реИрдВред рд╡рд░реНрддрдорд╛рди asm! рдПрдХ рдареАрдХ рдЙрддреНрддрд░ рд╣реИ рдЬреЛ рд╕реНрдерд┐рд░ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдерд╛ред рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдФрд░ рдЕрд░реНрдерд╢рд╛рд╕реНрддреНрд░ рд╣реЛрдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред target-cpu=native рд╕реАрдзреЗ Cargo.toml рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдШреВрдордирд╛ред рдмрд╕ рд╕реЛрдЪрд╛ рдХрд┐ рдореИрдВ рд╕рд╛рдЭрд╛ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдореБрдЭреЗ рдЗрд╕рдХреА рдкрд░рд╡рд╛рд╣ рдХреНрдпреЛрдВ рд╣реИред

@BartMassey рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛, рдЖрдкрдХреЛ popcnt рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЗрддрдиреА рд╕рдЦреНрдд рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рдПрдХрдорд╛рддреНрд░ рдХрд╛рд░рдг рдЬреЛ рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рд╡рд╣ рд╣реИ рдкреНрд░рджрд░реНрд╢рди рдФрд░ рдЖрдИрдПрдордУ рдЖрдкрдХреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЙрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреЗрд╡рд▓ count_ones() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдк рдЬреЛ рдЦреЛрдЬ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рдЗрдирд▓рд╛рдЗрди рдПрдПрд╕рдПрдо рдирд╣реАрдВ рд╣реИ рдмрд▓реНрдХрд┐ target_feature (рдЬрдВрдЧ-рд▓реИрдВрдЧ/рдЖрд░рдПрдлрд╕реАрдПрд╕ # 2045) рд╣реИ рддрд╛рдХрд┐ рдЖрдк рд╕рдВрдХрд▓рдХ рдХреЛ рдмрддрд╛ рд╕рдХреЗрдВ рдХрд┐ рдЗрд╕реЗ рдкреЙрдкрдХрдВрдЯ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред

@BartMassey рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдмрд╕ coresimd cfg_feature_enabled!("popcnt") рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣ рдкреВрдЫрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдмрд╛рдЗрдирд░реА рд╕реАрдкреАрдпреВ popcnt рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ (рдпрд╣ рд╣реЛрдЧрд╛ рдЗрд╕реЗ рд╕рдВрдХрд▓рди-рд╕рдордп рдкрд░ рд╣рд▓ рдХрд░реЗрдВ рдпрджрд┐ рдРрд╕рд╛ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ)ред

coresimd рдПрдХ popcnt рдЖрдВрддрд░рд┐рдХ рднреА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ popcnt рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рд╣реИред

@gnzlbg

coresimd рдПрдХ popcnt рдЗрдВрдЯреНрд░рд┐рдиреНрд╕рд┐рдХ рднреА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХрд┐ popcnt рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИред

рдпрд╣ рдереЛрдбрд╝рд╛ рд╡рд┐рд╖рдп рд╕реЗ рд╣рдЯрдХрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрдерди рдХрдбрд╝рд╛рдИ рд╕реЗ рд╕рддреНрдп рдирд╣реАрдВ рд╣реИред _popcnt64 рд╣реБрдб рдХреЗ рдиреАрдЪреЗ leading_zeros _popcnt64 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ , рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдпрджрд┐ popcnt рд╕реБрд╡рд┐рдзрд╛ рдХреНрд░реЗрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рдХреА рдЬрд╛рдПрдЧреА рдФрд░ рдХреНрд░реЗрдЯ рд▓реЗрдЦрдХ #![cfg(target_feature = "popcnt")] рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рднреВрд▓ рдЬрд╛рдПрдЧрд╛ рддреЛ рдпрд╣ рдЖрдВрддрд░рд┐рдХ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ рдЕрдкреНрд░рднрд╛рд╡реА рдЕрд╕реЗрдВрдмрд▓реА рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдФрд░ рдЗрд╕рдХреЗ рдЦрд┐рд▓рд╛рдл рдХреЛрдИ рд╕реБрд░рдХреНрд╖рд╛ рдЙрдкрд╛рдп рдирд╣реАрдВ рд╣реИред

рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдпрджрд┐ рдХреНрд░реЗрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ popcnt рд╕реБрд╡рд┐рдзрд╛ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рдХреА рдЬрд╛рдПрдЧреА

рдпрд╣ рдЧрд▓рдд рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдВрддрд░рд┐рдХ рдмрд┐рдирд╛ рд╢рд░реНрдд рдХреЗ рдЖрдВрддрд░рд┐рдХ рдХреЗ рд▓рд┐рдП #[target_feature(enable = "popcnt")] рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП popcnt рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдЬреЛ рдЯреЛрдХрд░рд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдХреНрд╖рдо рдпрд╛ рдЕрдХреНрд╖рдо рдХрд░рддрд╛ рд╣реИред рд╕рд╛рде рд╣реА, assert_instr(popcnt) рд╡рд┐рд╢реЗрд╖рддрд╛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ рд░рд╕реНрдЯ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╕рднреА x86 рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рдЖрдВрддрд░рд┐рдХ popcnt рдореЗрдВ рдЕрд▓рдЧ рд╣реЛ рдЬрд╛рдПред

рдпрджрд┐ рдХреЛрдИ x86 рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рд░рд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рд░рд╕реНрдЯ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпреЗ рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рдЙрд╕ рд▓рдХреНрд╖реНрдп рдкрд░ popcnt рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП core рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИред


рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: @ newpavlov

рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдпрджрд┐ рдХреНрд░реЗрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ popcnt рд╕реБрд╡рд┐рдзрд╛ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рдХреА рдЬрд╛рдПрдЧреА рдФрд░ рдХреНрд░реЗрдЯ рд▓реЗрдЦрдХ #![cfg(target_feature = "popcnt")] рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рднреВрд▓ рдЬрд╛рдПрдЧрд╛, рддреЛ рдпрд╣ рдЖрдВрддрд░рд┐рдХ рдЕрдкреНрд░рднрд╛рд╡реА рдЕрд╕реЗрдВрдмрд▓реА рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЗрд╕рдХреЗ рдЦрд┐рд▓рд╛рдл рдХреЛрдИ рд╕реБрд░рдХреНрд╖рд╛ рдЙрдкрд╛рдп рдирд╣реАрдВ рд╣реИред

рдХрдо рд╕реЗ рдХрдо рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЖрдкрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдкрд░рд┐рдЪрдп рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдВрдХрд▓рдХ рдХреЛ рдХреБрдЫ рднреА рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред рдЦрд░рд╛рдм рдХреЛрдбрдЬрди рдЬреЛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╡рд╣ рдХрдИ рдкрд░рд┐рдгрд╛рдореЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЬрд┐рд╕реЗ рдХреЛрдИ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЪрд░реНрдЪрд╛ рдХреЛ рдкрдЯрд░реА рд╕реЗ рдЙрддрд╛рд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИред рдмрд╕ рдЕрдкрдиреЗ рдореБрдЦреНрдп рдмрд┐рдВрджреБ рдХреЛ рджреЛрд╣рд░рд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдЬреЛ рдерд╛ "рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдПрдХ gcc_asm! рдпрд╛ clang_asm! рдпрд╛ llvm_asm! рдореИрдХреНрд░реЛ (рдпрд╛ рдХрд┐рд╕реА рднреА рдЙрдЪрд┐рдд рдЙрдкрд╕рдореБрдЪреНрдЪрдп) рдХреЛ рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рд╕рдВрдЧрдд рд╕рд┐рдВрдЯреИрдХреНрд╕ рдФрд░ рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реВрдВ, рдЬрдмрдХрд┐ рдПрдХ рдмреЗрд╣рддрд░ рд╕рдорд╛рдзрд╛рди рдкрд░ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред "

рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдХреА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдкреЙрдкрдХрд╛рдЙрдВрдЯ рдмреЗрдВрдЪрдорд╛рд░реНрдХ/рдбреЗрдореЛ рд╣реИред рдореИрдВ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЧрд╛рд░рдВрдЯреАрдХреГрдд popcntl рдирд┐рд░реНрджреЗрд╢ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬрдм рд╕рдВрднрд╡ рд╣реЛ рддреЛ рджреЛрдиреЛрдВ рдПрдХ рдЖрдзрд╛рд░ рд░реЗрдЦрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдФрд░ рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдПред рдореИрдВ рдпрд╣ рднреА рдЧрд╛рд░рдВрдЯреА рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ count_ones() рд╕рдВрднрд╡ рд╣реЛрдиреЗ рдкрд░ рдПрдХ рдкреЙрдкрдХрд╛рдЙрдВрдЯ рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЬреАрд╕реАрд╕реА рдФрд░ рдХреНрд▓реИрдВрдЧ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд░рд╕реНрдЯрдХ рднрдпрд╛рдирдХ рди рджрд┐рдЦреЗред

target_feature=popcnt рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреВрдВрдЧрд╛ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣рд╛рдВ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ count_ones() рдмреЗрдВрдЪрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рднрд▓реЗ рд╣реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд┐рд╕ рд╕реАрдкреАрдпреВ рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рди рдХрд░ рд░рд╣рд╛ рд╣реЛ рдФрд░ рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдП рдмрд┐рдирд╛ рдХрд┐ рдЙрд╕рдХреЗ рдкрд╛рд╕ рдкреЙрдкрдХрд╛рдЙрдВрдЯ рдирд┐рд░реНрджреЗрд╢ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдореИрдВ рд╕рд┐рд░реНрдл рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдпрджрд┐ рд▓рдХреНрд╖реНрдп рд╕реАрдкреАрдпреВ рдореЗрдВ рдкреЙрдкрдХрд╛рдЙрдВрдЯ count_ones() рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

stdsimd / coresimd рдХреНрд░реЗрдЯ рдЕрдЪреНрдЫреЗ рд▓рдЧрддреЗ рд╣реИрдВ, рдФрд░ рд╕рдВрднрд╡рддрдГ рдЗрди рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреЗ рд▓рд┐рдП рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдзрдиреНрдпрд╡рд╛рдж! рдЗрд╕ рдРрдк рдХреЗ рд▓рд┐рдП рдореИрдВ рдорд╛рдирдХ рднрд╛рд╖рд╛ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдмрд╛рд╣рд░ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдХрдо рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ (рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА lazy_static рдмрд╛рд░реЗ рдореЗрдВ рджреЛрд╖реА рдорд╣рд╕реВрд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ)ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрди рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдирдЬрд╝рд░рдЕрдВрджрд╛рдЬ рдХрд░рдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ, рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпреЗ "рдЖрдзрд┐рдХрд╛рд░рд┐рдХ" рдмрдирдиреЗ рдХреА рд░рд╛рд╣ рдкрд░ рд╣реИрдВред

@nbp рджреНрд╡рд╛рд░рд╛ рдЪрд╛рд░реЛрдВ рдУрд░ рдПрдХ рд╡рд┐рдЪрд╛рд░ рддреИрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдХреБрдЫ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдХреЛрдб рдХреЗ рдХреБрдЫ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╕реЗ рдорд╢реАрди рдмрд╛рдЗрдЯреНрд╕ рддрдХ рдЬрд╛рддрд╛ рд╣реИ (рдПрдХ рдкреНрд░реЛ-рдореИрдХреНрд░реЛ рдХреНрд░реЗрдЯ рдпрд╛ рдХреБрдЫ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?) рдФрд░ рдлрд┐рд░ рдЙрди рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рд╕реАрдзреЗ рдХреЛрдб рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд╕реНрдерд╛рди рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рднреАрддрд░ рдордирдорд╛рдиреЗ рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдХреЛрдб рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╕рдорд╕реНрдпрд╛ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрдирдкреБрдЯ, рдЖрдЙрдЯрдкреБрдЯ рдФрд░ рдЙрдирдХреА рдмрд╛рдзрд╛рдУрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХреНрд▓реЛрдмрд░реНрд╕ рдЕрднреА рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛)ред

рд╕реАрд╕реА @eddyb

@nagisa рдпрд╣ рдорд╢реАрди рдХреЛрдб рдХреЗ рд╕рд┐рд░реНрдл рдПрдХ рдЪрдХ рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрдкрдХреЛ рдЗрдирдкреБрдЯ, рдЖрдЙрдЯрдкреБрдЯ рдФрд░ рдХреНрд▓реЙрдмрд░ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рд╕рд╛рд╡рдзрд╛рди рд░рд╣рдирд╛ рд╣реЛрдЧрд╛ред рдпрджрд┐ рдПрдПрд╕рдПрдо рдЦрдВрдб рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдпрд╣% rax рдореЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЪрд░ рдЪрд╛рд╣рддрд╛ рд╣реИ рдФрд░ рдпрд╣% esi рдХреЛ рдкрдХрдбрд╝ рд▓реЗрдЧрд╛ рддреЛ рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдХрд┐ рдЖрд╕рдкрд╛рд╕ рдХрд╛ рдХреЛрдб рдЕрдЪреНрдЫрд╛ рдЪрд▓рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдЧрд░ рдбреЗрд╡рд▓рдкрд░ рд╕рдВрдХрд▓рдХ рдХреЛ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИ рддреЛ рдЖрдк рд╢рд╛рдпрдж рд╕реНрдкрд┐рд▓рд┐рдВрдЧ рдФрд░ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рдВрдЯрди рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред

@ рд╕рд┐рдорд┐рдпрд╛рд╕ , рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХреЛ рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЪрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рд╕реЗ рдХреИрд╕реЗ рдЬреБрдбрд╝реЗ рд╣реИрдВ, рдФрд░ рдХреМрди рд╕реЗ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпреЗ рд╕рднреА рдХрд┐рд╕реА рднреА рдЕрд╕реЗрдВрдмрд▓реА рднрд╛рд╖рд╛, рдпрд╛ рдХрд┐рд╕реА рдПрд▓рдПрд▓рд╡реАрдПрдо рдЕрд╕реЗрдВрдмрд▓реА рднрд╛рд╖рд╛ рдХреЛ рдорд╛рдирдХреАрдХреГрдд рдХрд░рдиреЗ рд╕реЗ рдЫреЛрдЯрд╛ рд╣реИред

рдмрд╛рдЗрдЯ рдЕрдиреБрдХреНрд░рдореЛрдВ рдкрд░ рдорд╛рдирдХреАрдХрд░рдг, рдЕрд╕реЗрдВрдмрд▓реА рд╕реНрд╡рд╛рдж рдХреЛ рдбреНрд░рд╛рдЗрд╡рд░/рдкреНрд░реЛ-рдореИрдХреНрд░реЛ рдореЗрдВ рд▓реЗ рдЬрд╛рдХрд░ рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИред

рдЙрдЪрд┐рдд рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рдмрдЬрд╛рдп рд╡рд░реНрдмреИрдЯрд┐рдо рдмрд╛рдЗрдЯреНрд╕ рд░рдЦрдиреЗ рдХрд╛ рдПрдХ рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рдкрд╛рд╕ рдЕрд▓реНрдлрд╛-рдирд╛рдордХрд░рдг рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдХреА рдореБрдЭреЗ рдЙрдореНрдореАрдж рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рд▓рд┐рдЦрдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧ рдпрд╛ рддреЛ рдЙрдореНрдореАрдж рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореИрдВ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдЗрд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рд░рдЬрд┐рд╕реНрдЯрд░ рдЖрд╡рдВрдЯрди рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, GCC's (рдЕрддреНрдпрд╛рдЪрд╛рд░реА) рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛:

asm ("leal (%1, %1, 4), %0"
     : "=r" (five_times_x)
     : "r" (x));

рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдореИрдВрдиреЗ рд╕рдВрдХрд▓рдХ рдХреЛ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рджрд┐рдпрд╛, рдпрд╣ рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реБрдП рдХрд┐ рдпрд╣ рдореБрдЭреЗ рд╡рд╣ рджреЗрдЧрд╛ рдЬреЛ рд╕рдмрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рдХреБрд╢рд▓ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП x86 64 рдкрд░ рдпрджрд┐ five_time_x рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рд╣реИ рддреЛ рд╕рдВрдХрд▓рдХ eax рдЖрд╡рдВрдЯрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдпрджрд┐ x рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИ рддреЛ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреБрдЫ рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдмреЗрд╢рдХ рд╕рдВрдХрд▓рдХ рдХреЗрд╡рд▓ рдпрд╣ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрдХрд▓рди рдЕрдиреБрдХреНрд░рдо рдореЗрдВ рдмрд╣реБрдд рджреЗрд░ рд╕реЗ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЛ рдХреИрд╕реЗ рдЖрд╡рдВрдЯрд┐рдд рдХрд░реЗрдЧрд╛ (рд╡рд┐рд╢реЗрд╖рдХрд░ рдпрджрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдлрд╝рдВрдХреНрд╢рди рдкреИрд░рд╛ рдФрд░ рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВ рдХреЗ рд░реВрдк рдореЗрдВ рдЫреЛрдЯрд╛ рдирд╣реАрдВ рд╣реИ)ред

рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛?

@nbp рдореЗрд░рд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рд╕реЗ рдереЛрдбрд╝рд╛ рднреНрд░рдорд┐рдд рд╣реВрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЕрд╕реЗрдВрдмрд▓реА рднрд╛рд╖рд╛ рдХрд╛ рдорд╛рдирдХреАрдХрд░рдг рдРрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рдерд╛ рдЬрд┐рд╕реЗ рд╣рдо рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рд╕рд╛рде рд╣рд╛рд╕рд┐рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗред рдХрдо рд╕реЗ рдХрдо рдореЗрд░реЗ рд▓рд┐рдП, рдЖрдзрд╛рд░ рд╣рдореЗрд╢рд╛ рдпрд╣ рдерд╛ рдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдЕрд╕реЗрдВрдмрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдЕрд╕реЗрдВрдмрд▓реА рднрд╛рд╖рд╛ рд╕реНрд╡реАрдХрд╛рд░ рдХреА рдЬрд╛рдПрдЧреАред
рд╕рдорд╕реНрдпрд╛ рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рдкрд╛рд░реНрд╕/рдЕрд╕реЗрдВрдмрд▓ рдирд╣реАрдВ рд╣реЛ рд░рд╣реА рд╣реИ, рд╣рдо рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдПрд▓рдПрд▓рд╡реАрдПрдо рдореЗрдВ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рдорд╕реНрдпрд╛ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рднрд░рдиреЗ (рдпрд╛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП LLVM рдХреЛ рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рджреЗрдиреЗ) рдФрд░ рдЗрдирдкреБрдЯ, рдЖрдЙрдЯрдкреБрдЯ рдФрд░ рдХреНрд▓реЙрдмрд░реНрд╕ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рд╣реИред
рдмрд╛рдж рдХреА рд╕рдорд╕реНрдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рд╕реЗ рд╣рд▓ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕реЗ рдХрдо рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреА рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЬреЛ @simias рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреВрдЫрддрд╛ рд╣реИ), рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдареЛрд╕ рд░рдЬрд┐рд╕реНрдЯрд░ред
рдЙрд╕ рдмрд┐рдВрджреБ рдкрд░ рдЬрд╣рд╛рдВ рдмрд╛рдзрд╛рдУрдВ рдХреЛ рдЙрд╕ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ "рд╡рд╛рд╕реНрддрд╡рд┐рдХ" рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЙрддрдирд╛ рд╣реА рдЖрд╕рд╛рди рд╣реИред рдкрд╣рд▓рд╛ рддрд░реНрдХ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ рдЬрд┐рд╕рдореЗрдВ (рдЧреИрд░-рдЯреЗрдореНрдкрд▓реЗрдЯ) рдЕрд╕реЗрдВрдмрд▓реА рд╣реИ, рдЕрдиреНрдп рддрд░реНрдХ рдмрд╛рдзрд╛рдПрдВ рд╣реИрдВред рдпрд╣ рдХреБрдЫ рд╣рдж рддрдХ рдЖрд╕рд╛рдиреА рд╕реЗ рдПрд▓рдПрд▓рд╡реАрдПрдо рдХреЗ рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓рд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рдореИрдк рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рджреВрд╕рд░реА рдУрд░ рдХрдЪреНрдЪреЗ рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдирд╛ рдЙрддрдирд╛ рджреВрд░ рдирд╣реАрдВ рд╣реИ рдЬрд┐рддрдирд╛ рдореИрдВ рдЬрд╛рдирддрд╛ рд╣реВрдВ (рдпрд╛ рдПрд▓рдПрд▓рд╡реАрдПрдо рдЖрдИрдЖрд░ рд╕рдВрджрд░реНрдн рдореИрдиреБрдЕрд▓ рд╕реЗ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реВрдВ) рдПрд▓рдПрд▓рд╡реАрдПрдо рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИред рддреЛ рд╣рдо рдореВрд▓ рд░реВрдк рд╕реЗ рдПрд▓рдПрд▓рд╡реАрдПрдо рдЖрдИрдЖрд░ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдПрдХ рдлреАрдЪрд░ (рд╕рд┐рд╕реНрдЯрдо рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдирд╛) рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреНрд░реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрд▓рдПрд▓рд╡реАрдПрдо рдореЗрдВ рдореМрдЬреВрдж рд╣реИред

@nbp

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХреЛ рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЪрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рд╕реЗ рдХреИрд╕реЗ рдЬреБрдбрд╝реЗ рд╣реИрдВ, рдФрд░ рдХреМрди рд╕реЗ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпреЗ рд╕рднреА рдХрд┐рд╕реА рднреА рдЕрд╕реЗрдВрдмрд▓реА рднрд╛рд╖рд╛, рдпрд╛ рдХрд┐рд╕реА рдПрд▓рдПрд▓рд╡реАрдПрдо рдЕрд╕реЗрдВрдмрд▓реА рднрд╛рд╖рд╛ рдХреЛ рдорд╛рдирдХреАрдХреГрдд рдХрд░рдиреЗ рд╕реЗ рдЫреЛрдЯрд╛ рд╣реИред

рддреЛ рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛? рдореЗрд░реЗ рдкрд╛рд╕ рд╣рд╛рд░реНрдбрдХреЛрдбреЗрдб рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рд╕рд╛рде рдмрд╛рдЗрдЯреНрд╕ рдХрд╛ рдЕрдиреБрдХреНрд░рдо рд╣реИ рдЬрд┐рд╕рдХрд╛ рдореВрд▓ рд░реВрдк рд╕реЗ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЗрдирдкреБрдЯ/рдЖрдЙрдЯ рд░рдЬрд┐рд╕реНрдЯреНрд░рд╛рд░, рдХреНрд▓реЙрдмрд░реНрд╕ рдЗрддреНрдпрд╛рджрд┐ рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдЗрд╕ рдЕрдиреБрдХреНрд░рдо рдХреЗ рдЕрдВрджрд░ рд╣рд╛рд░реНрдбрдХреЛрдб рдХрд┐рдП рдЧрдП рд╣реИрдВред

рдЕрдм рдореИрдВ рдЗрд╕ рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рдЕрдкрдиреЗ рдЬрдВрдЧ рдмрд╛рдЗрдирд░реА рдореЗрдВ рдХрд╣реАрдВ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рддрд╛ рд╣реВрдВред рдореИрдВ рд░рд╕реНрдЯрд╕реА рдХреЛ рдХреИрд╕реЗ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдХреМрди рд╕реЗ рд░рдЬрд┐рд╕реНрдЯрд░ рдЗрдирдкреБрдЯ/рдЖрдЙрдЯрдкреБрдЯ рд╣реИрдВ, рдХреМрди рд╕реЗ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЖрджрд┐? рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдЫреЛрдЯреА рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреИрд╕реЗ рд╣реИ? рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдХрд░рддрд╛ рд╣реИ, рдмрд╕ рдереЛрдбрд╝рд╛ рдХрдард┐рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЕрдм рдХрд┐рд╕реА рдХреЛ рд▓рд┐рдЦрд┐рдд рдЕрд╕реЗрдВрдмрд▓реА рдореЗрдВ рдЗрдирдкреБрдЯ/рдЖрдЙрдЯрдкреБрдЯ рдХреНрд▓реЙрдмрд░реНрд╕ рдХреЛ рджреЛ рдмрд╛рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рд╣рдо рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд░рд╕реНрдЯрд╕реА рдореЗрдВ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, rustc рдХреЗ рдкрд╛рд╕ рдЗрд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд╕рдордп рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЛ рдЕрд╕реЗрдВрдмрд▓реА рдореЗрдВ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдлрд┐рд░ рдЙрд╕рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдореБрдЭреЗ рдХрд┐рд╕рдХреА рдпрд╛рдж рдЖ рд░рд╣реА рд╣реИ?

@рд╕рд┐рдорд┐рдпрд╛рд╕

asm ("leal (%1, %1, 4), %0"
     : "=r" (five_times_x)
     : "r" (x));

рдпрд╣ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдХрдЪреНрдЪреЗ рдмрд╛рдЗрдЯреНрд╕ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рдЕрд▓реНрдлрд╛ рдирд╛рдордХрд░рдг рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ, рдФрд░ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЛ рдЖрдЧреЗ рдХреЛрдб рдЕрдиреБрдХреНрд░рдо рджреНрд╡рд╛рд░рд╛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

@ рдлреНрд▓реЛрд░реЛрдм

рдХрдо рд╕реЗ рдХрдо рдореЗрд░реЗ рд▓рд┐рдП, рдЖрдзрд╛рд░ рд╣рдореЗрд╢рд╛ рдпрд╣ рдерд╛ рдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдЕрд╕реЗрдВрдмрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдЕрд╕реЗрдВрдмрд▓реА рднрд╛рд╖рд╛ рд╕реНрд╡реАрдХрд╛рд░ рдХреА рдЬрд╛рдПрдЧреАред

рдореЗрд░реА рд╕рдордЭ, рдпрд╣ рд╣реИ рдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдЕрд╕реЗрдВрдмрд▓рд░ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдирд╛ рдХреБрдЫ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕ рдкрд░ рд╣рдо рднрд░реЛрд╕рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдПрдПрд╕рдПрдо рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╕реНрд╡реАрдХреГрдд рджреЛрд╖ рд╣реИ! рдореИрдХреНрд░реЛред рдПрдПрд╕рдПрдо рдкрд░ рднреА рдирд┐рд░реНрднрд░! рдПрд▓рдПрд▓рд╡реАрдПрдо рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣реЛрдирд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рдмреИрдХрдПрдВрдб рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рджрд░реНрджрдирд╛рдХ рд╣реЛрдЧрд╛ред

@gnzlbg

рддреЛ рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛? рдореЗрд░реЗ рдкрд╛рд╕ рд╣рд╛рд░реНрдбрдХреЛрдбреЗрдб рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рд╕рд╛рде рдмрд╛рдЗрдЯреНрд╕ рдХрд╛ рдЕрдиреБрдХреНрд░рдо рд╣реИ рдЬрд┐рд╕рдХрд╛ рдореВрд▓ рд░реВрдк рд╕реЗ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЗрдирдкреБрдЯ/рдЖрдЙрдЯ рд░рдЬрд┐рд╕реНрдЯреНрд░рд╛рд░, рдХреНрд▓реЙрдмрд░реНрд╕ рдЗрддреНрдпрд╛рджрд┐ рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдЗрд╕ рдЕрдиреБрдХреНрд░рдо рдХреЗ рдЕрдВрджрд░ рд╣рд╛рд░реНрдбрдХреЛрдб рдХрд┐рдП рдЧрдП рд╣реИрдВред

рд╡рд┐рдЪрд╛рд░ рдЗрдирдкреБрдЯ, рдЖрдЙрдЯрдкреБрдЯ рдФрд░ рдХреНрд▓реЙрдмрд░реНрдб рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реЛрдЧреА, рдЬрд╣рд╛рдВ рдЗрдирдкреБрдЯ рдПрдХ (рдореНрдпреВрдЯреЗрдмрд▓) рд╕рдВрджрд░реНрдн рдпрд╛ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рд╕реЗ рдЬреБрдбрд╝реЗ рд░рдЬрд┐рд╕реНрдЯрд░ рдирд╛рдо рдХрд╛ рдПрдХ рдЯрдкрд▓ рд╣реЛрдЧрд╛, рдХреНрд▓реЙрдмрд░реНрдб рд░рдЬрд┐рд╕реНрдЯрд░ рд░рдЬрд┐рд╕реНрдЯрд░ рдирд╛рдореЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реЛрдЧреА, рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдЖрдЙрдЯрдкреБрдЯ рд░рдЬрд┐рд╕реНрдЯрд░ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реЛрдЧреА рдЬреЛ рдирд╛рдорд┐рдд рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд╛ рдПрдХ рдЯрдкрд▓ рдмрдирд╛рдПрдЧреА рдЬреЛ рдХрд┐ рд╕рдВрдмрджреНрдз рдкреНрд░рдХрд╛рд░ рд╣реИрдВред

fn swap(a: u32, b: u32) -> (u32, u32) {
  unsafe{
    asm_raw!{
       bytes: [0x91],
       inputs: [(std::asm::eax, a), (std::asm::ecx, b)],
       clobbered: [],
       outputs: (std::asm::eax, std::asm::ecx),
    }
  }
}

рдпрд╣ рдХреЛрдб рдЕрдиреБрдХреНрд░рдо рдХреБрдЫ рдХрдВрдкрд╛рдЗрд▓рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдореИрдХреНрд░реЛ рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:

fn swap(a: u32, b: u32) -> (u32, u32) {
  unsafe{
    asm_x64!{
       ; <-- (eax, a), (ecx, b)
       xchg eax, ecx
       ; --> (eax, ecx)
    }
  }
}

рдпреЗ рдХреНрд░рдо, рдХрд┐рд╕реА рднреА рдкреНрд░рддреАрдХ рдпрд╛ рдкрддреЗ рдХреЛ рд╕реАрдзреЗ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЧрдгрдирд╛ рдФрд░ рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдирд╛ рд╣реЛрдЧрд╛ред рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рд╣рдо рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдмрд╛рдж рдореЗрдВ рдмрд╛рдЗрдЯ рдЕрдиреБрдХреНрд░рдо рдХреЗ рднреАрддрд░ рдХреБрдЫ рдкреНрд░рддреАрдХ рдкрддреЛрдВ рдХреЛ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рдХреИрд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПред

рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдФрд░ рдмрд╛рдзрд╛рдУрдВ рдХреА рд╕реВрдЪреА рдХреЛ рдорд╛рдирдХреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ, рдФрд░ рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рднрд╡рд┐рд╖реНрдп рдХреЗ рдХрд┐рд╕реА рднреА рдмреИрдХрдПрдВрдб рджреНрд╡рд╛рд░рд╛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдорд░реНрдерд┐рдд рд╣реЛрдЧрд╛ред

@nbp

рдореЗрд░реА рд╕рдордЭ, рдпрд╣ рд╣реИ рдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдЕрд╕реЗрдВрдмрд▓рд░ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдирд╛ рдХреБрдЫ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕ рдкрд░ рд╣рдо рднрд░реЛрд╕рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдПрдПрд╕рдПрдо рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╕реНрд╡реАрдХреГрдд рджреЛрд╖ рд╣реИ! рдореИрдХреНрд░реЛред рдПрдПрд╕рдПрдо рдкрд░ рднреА рдирд┐рд░реНрднрд░! рдПрд▓рдПрд▓рд╡реАрдПрдо рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣реЛрдирд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рдмреИрдХрдПрдВрдб рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рджрд░реНрджрдирд╛рдХ рд╣реЛрдЧрд╛ред

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдПрдХ рд╕рдЯреАрдХ рдЖрдХрд▓рди рд╣реИ? X86 рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рд▓рд┐рдП рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдорд╛рдореВрд▓реА рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде, рдЕрд╕реЗрдВрдмрд▓реА рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛рдлреА рд╣рдж рддрдХ рдорд╛рдирдХ рдФрд░ рдкреЛрд░реНрдЯреЗрдмрд▓ рд╣реИред рд╕рд┐рд╕реНрдЯрдо рдЕрд╕реЗрдВрдмрд▓рд░ рдХреЗ рд╕рд╛рде рдПрдХрдорд╛рддреНрд░ рдореБрджреНрджрд╛ рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рдирдП рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреА рдХрдореА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реНрдерд┐рддрд┐ рд╣реИ рдЬрд┐рд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИред

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдорд╕реНрдпрд╛ рд░рдЬрд┐рд╕реНрдЯрд░ рдЖрд╡рдВрдЯрди рдореЗрдВ рдЧреЛрдВрдж рд╣реИред рд▓реЗрдХрд┐рди, рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрд╕реЗрдВрдмрд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рд╕рдВрдмрдВрдз рд╣реИ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рдХреЗрд╡рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдХреЛ рдХреБрдЫ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рд╕рд╛рдордЧреНрд░реА рдФрд░ рд╢рд╛рдпрдж рдХреБрдЫ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХрд░рдирд╛ рд╣реИ - рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХрд┐рд╕реА рднреА рдкреБрдЯреАрдп рдмреИрдХрдПрдВрдб рдХреЗ рд▓рд┐рдП рдорд╛рдореВрд▓реА рд░реВрдк рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рд╕рд╛рдорд╛рди рдХреЗ рд▓рд┐рдП рдПрд▓рдПрд▓рд╡реАрдПрдо (рдпрд╛ рдЬреАрд╕реАрд╕реА) рд╕рд┐рдВрдЯреИрдХреНрд╕ рдмрдХрд╡рд╛рд╕ рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░реАрдХрдВрдкрд┐рд▓реНрдб рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ рдЬрд╛рдиреЗ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА рдПрдПрд╕рдПрдо рдХреНрд░реЗрдЯ рдХреЛ рдЕрдм рдПрдХ рдкреВрд░реНрдг рдЕрд╕реЗрдВрдмрд▓рд░ рдФрд░ рд╕рдВрднрд╡рддрдГ рдПрдХ рдкреВрд░реНрдг рд░рдЬрд┐рд╕реНрдЯрд░ рдЖрд╡рдВрдЯрдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдпрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рд╣рд╛рде рд╕реЗ рдЖрд╡рдВрдЯрд┐рдд рд░рдЬрд┐рд╕реНрдЯрд░ рдмрдирд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ), рдпрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рд╕рд┐рд╕реНрдЯрдо рдЕрд╕реЗрдВрдмрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдЙрд╕ рд╕рдордп, рдРрд╕рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдореВрд▓реНрдп рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реИред

@jcranmer

... рд▓реЗрдХрд┐рди рдкреНрд░реАрдХрдВрдкреАрд▓реНрдб рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ рдЬрд╛рдиреЗ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА рдПрдПрд╕рдПрдо рдХреНрд░реЗрдЯ рдХреЛ рдЕрдм рдПрдХ рдкреВрд░реНрдг рдЕрд╕реЗрдВрдмрд▓рд░ рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдкреВрд░реНрдг рд░рдЬрд┐рд╕реНрдЯрд░ рдЖрд╡рдВрдЯрдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдпрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рд╣рд╛рде рд╕реЗ рдЖрд╡рдВрдЯрд┐рдд рд░рдЬрд┐рд╕реНрдЯрд░ рдмрдирд╛рдПрдВ), рдпрд╛ рд╕рд┐рд╕реНрдЯрдо рдЕрд╕реЗрдВрдмрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ

https://github.com/CensoredUsername/dynasm-rs

рдпрд╣ рдЯреЛрдХрд░рд╛ рдЕрд╕реЗрдВрдмрд▓реА рдХреЛрдб рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд▓рдЧрдЗрди рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдореИрдХреНрд░реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдХрдЪреНрдЪреЗ рдЕрд╕реЗрдВрдмрд▓реА рдХреЛрдб рдХреЗ рд╡реИрдХреНрдЯрд░ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред

@nbp рд╢рд╛рдпрдж рдореЗрд░реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдЕрдЬреАрдмреЛрдЧрд░реАрдм рд╣реИрдВ, рд▓реЗрдХрд┐рди рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд╛ рдирд╛рдо рдмрджрд▓рдиреЗ рдХреА рдХрдореА рдФрд░ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдореЗрд░реЗ рд▓рд┐рдП рд░рдЬрд┐рд╕реНрдЯрд░ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рдПрдХ рд╕реМрджрд╛-рдмреНрд░реЗрдХрд░ рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдпрд╛ рддреЛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдореБрдЭреЗ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреА рдЕрдкрдиреА рдкрд╕рдВрдж рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ " рд╣рд┐рдЯ рд░рд╛рдЗрдЯ" рдпрд╛ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдореЗрд░реЗ рдордирдорд╛рдиреЗ рд╕рдореНрдореЗрд▓рдиреЛрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЛ рдлреЗрд░рдмрджрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧреИрд░-рдЗрд╖реНрдЯрддрдо рдХреЛрдб рдХрд╛ рдЙрддреНрд╕рд░реНрдЬрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдпрджрд┐ рдЕрд╕реЗрдВрдмрд▓реА рдмреНрд▓реЙрдм рдЖрд╕-рдкрд╛рд╕ рдХреЗ рдХрдВрдкрд╛рдЗрд▓рд░-рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдПрдХреАрдХреГрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рддреЛ рдореИрдВ рд╕реНрдЯреИрдВрдб-рдЕрд▓реЛрди рдЕрд╕реЗрдВрдмрд▓реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдмрд╛рд╣рд░реА рд╕реА-рд╕реНрдЯрд╛рдЗрд▓ рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдПрд╕рдПрдо рд╕реНрдЯрдм рдХреЛ рднреА рдХрд╛рд░рдХ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдореЗрдВ рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рд░рдЬрд┐рд╕реНрдЯрд░ рд╣реЛрддрд╛ рд╣реИ -рдЖрд╡рдВрдЯрди рдмрд╛рдзрд╛рдУрдВред рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЖрдЬ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ rustc рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рдЕрд╕реЗрдВрдмрд▓реА рдлрд╝рд╛рдЗрд▓ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо рдХреЛ рд╕рд░рд▓ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЬреЛ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдИрдПрдордУ рдЖрдкрдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣рдореЗрдВ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рджреВрд░ рдирд╣реАрдВ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИред

рдФрд░ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдПрдПрд╕рдПрдо рдХреЛрдб рдмрд╛рд╣рд░реА рдкреНрд░рддреАрдХреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд▓рд┐рдВрдХрд░ рджреНрд╡рд╛рд░рд╛ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛? рдЖрдкрдХреЛ рдЙрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдЗрдзрд░-рдЙрдзрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рд╕рдВрдХрд▓рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рджреЗрд░ рд╣реЛрдиреЗ рддрдХ рд╕рдВрднрд╡рддрдГ рдЙрдиреНрд╣реЗрдВ рд╣рд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдмрд╛рдЗрдЯ рд╕рд░рдгреА рдХреЗ рд╕рд╛рде рд╕рдВрджрд░реНрдн рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рд▓рд┐рдВрдХрд░ рдХреЛ рдмрд╛рдж рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рд╣рд▓ рдХрд░рдиреЗ рджреЗрдирд╛ рд╣реЛрдЧрд╛ред

@jcranmer

X86 рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рд▓рд┐рдП рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдорд╛рдореВрд▓реА рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде, рдЕрд╕реЗрдВрдмрд▓реА рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛рдлреА рд╣рдж рддрдХ рдорд╛рдирдХ рдФрд░ рдкреЛрд░реНрдЯреЗрдмрд▓ рд╣реИред

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдкрдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ, рдЬрд╛рд╣рд┐рд░ рд╣реИ рдХрд┐ рдПрдПрд╕рдПрдо рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдореЗрдВ рдкреЛрд░реНрдЯреЗрдмрд▓ рдирд╣реАрдВ рд╣реИред рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдПрдХ рд╣реА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рднреАрддрд░ рдЕрдХреНрд╕рд░ рднрд┐рдиреНрдирддрд╛рдПрдВ рдФрд░ рд╡рд┐рдХрд▓реНрдк рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рднрд╛рд╖рд╛ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВред

рдореИрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдПрдордЖрдИрдкреАрдПрд╕ рджреЗ рд╕рдХрддрд╛ рд╣реВрдВ, рджреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЭрдВрдбреЗ рд╣реИрдВ рдЬреЛ рдЕрд╕реЗрдВрдмрд▓рд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ: at рдФрд░ reorder ред at рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдЫрджреНрдо рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдЕрд╕реЗрдВрдмрд▓ рдХрд░рддреЗ рд╕рдордп рдЕрд╕реЗрдВрдмрд▓рд░ рдХреЛ AT (рдЕрд╕реЗрдВрдмрд▓рд░ рдЕрд╕реНрдерд╛рдпреА) рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ AT рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдХреЛ at рд╕рд╛рде рдЕрд╕реЗрдВрдмрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЕрдиреНрдпрдерд╛ рдпрд╣ рдЯреВрдЯ рдЬрд╛рдПрдЧрд╛ред

reorder рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреЛрдбрд░ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╢рд╛рдЦрд╛ рд╡рд┐рд▓рдВрдм рд╕реНрд▓реЙрдЯ рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ рдпрд╛ рдпрджрд┐ рд╡реЗ рдЙрдирд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╕реЗрдВрдмрд▓рд░ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВред рдЧрд▓рдд reorder рд╕реЗрдЯрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдХреЛрдб рдЕрд╕реЗрдВрдмрд▓ рдХрд░рдирд╛ рд▓рдЧрднрдЧ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдлрд░реНрдЬреА рдорд╢реАрди рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛ред рдЬрдм рдЖрдк рдПрдордЖрдИрдкреАрдПрд╕ рдЕрд╕реЗрдВрдмрд▓реА рд▓рд┐рдЦрддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рд╣рд░ рд╕рдордп рд╡рд░реНрддрдорд╛рди рдореЛрдб рд╕реЗ рдЕрд╡рдЧрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдпрджрд┐ рдЗрд╕рдореЗрдВ рдХреЛрдИ рд╢рд╛рдЦрд╛ рдирд┐рд░реНрджреЗрд╢ рд╢рд╛рдорд┐рд▓ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЗрд╕ MIPS рд╕реВрдЪреА рдХрд╛ рдЕрд░реНрде рдЬрд╛рдирдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ рдпрджрд┐ рдЖрдк рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ reorder рд╕рдХреНрд╖рдо рд╣реИ рдпрд╛ рдирд╣реАрдВ:

    addui   $a0, 4
    jal     some_func
    addui   $a1, $s0, 3

32 рдмрд┐рдЯ рдПрдЖрд░рдПрдо рдЕрд╕реЗрдВрдмрд▓реА рдореЗрдВ рдердВрдм/рдПрдЖрд░рдПрдо рд╡рд┐рд╡рд┐рдзрддрд╛рдПрдВ рд╣реИрдВ, рдпрд╣ рдЬрд╛рдирдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдЖрдк рдХрд┐рд╕ рдирд┐рд░реНрджреЗрд╢ рд╕реЗрдЯ рдХреЛ рд▓рдХреНрд╖рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ (рдФрд░ рдЖрдк рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдореЗрдВ рдлреНрд▓рд╛рдИ рдкрд░ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ)ред рджреЛрдиреЛрдВ рд╕реЗрдЯреЛрдВ рдХреЛ рдорд┐рд▓рд╛рдирд╛ рдмрд╣реБрдд рд╕рд╛рд╡рдзрд╛рдиреА рд╕реЗ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдПрдЖрд░рдПрдо рдХреЛрдб рднреА рдЖрдо рддреМрд░ рдкрд░ рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреАрд╕реА-рд╕рд╛рдкреЗрдХреНрд╖ рд▓реЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдбрд╝реЗ рддрддреНрдХрд╛рд▓ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ, рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рдкреВрд░реНрд╡-рдЗрдХрдЯреНрдард╛ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рд╕рд╛рд╡рдзрд╛рди рд░рд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЖрдк рдЗрди рдореВрд▓реНрдпреЛрдВ рдХреЛ рдХреИрд╕реЗ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЙрдиреНрд╣реЗрдВ рдкрд╛рд╕ рд░рд╣рдирд╛ рд╣реИ рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдирд┐рд░реНрджреЗрд╢ рдирд╣реАрдВ рд╣реИрдВ рдПрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕реНрдерд╛рдиред рдореИрдВ рдЫрджреНрдо рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдБ рдЬреИрд╕реЗ:

   ldr   r2, =0x89abcdef

рджреВрд╕рд░реА рдУрд░ рдПрдордЖрдИрдкреАрдПрд╕ рддрддреНрдХрд╛рд▓ рдореВрд▓реНрдп рдХреЛ рджреЛ 16 рдмрд┐рдЯ рдорд╛рдиреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рд▓реБрдИ/рдУрд░реА рдпрд╛ рд▓реБрдИ/рдПрдВрдбреА рдХреЙрдореНрдмреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЖрдорддреМрд░ рдкрд░ li / la рдЫрджреНрдо рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдкреАрдЫреЗ рдЫрд┐рдкрд╛ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк noreorder рдХреЗ рд╕рд╛рде рдХреЛрдб рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рд╡рд┐рд▓рдВрдм рд╕реНрд▓реЙрдЯ рдХреЛ рдмрд░реНрдмрд╛рдж рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдХрднреА-рдХрднреА рдЖрдкрдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ рдпрд╣ рд╣рд╛рде рд╕реЗ рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЕрдЬреАрдм рджрд┐рдЦрдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб рд╣реЛрддрд╛ рд╣реИ:

.set noreorder

   /* Display a message using printf */
   lui $a0, %hi(hello)
   jal printf
   ori $a0, %lo(hello)

.data

hello:
.string "Hello, world!\n"

%hi рдФрд░ %lo рдирд┐рд░реНрдорд╛рдг рдХреНрд░рдорд╢рдГ hello рдкреНрд░рддреАрдХ рдХреЗ рдЙрдЪреНрдЪ рдФрд░ рдирд┐рдореНрди 16 рдмрд┐рдЯ рдХреЗ рд╕рдВрджрд░реНрдн рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рдмрддрд╛рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИред

рдХреБрдЫ рдХреЛрдб рдХреЛ рдмрд╣реБрдд рд╣реА рдЕрдЬреАрдм рд╕рдВрд░реЗрдЦрдг рдмрд╛рдзрд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЬрдм рдЖрдк рдХреИрд╢ рдЕрдорд╛рдиреНрдпрддрд╛ рдХреЛрдб рд╕реЗ рдирд┐рдкрдЯ рд░рд╣реЗ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдХрд┐ рдЖрдк рдЬрд┐рд╕ рд╢рд╛рдЦрд╛ рдкрд░ рдмреИрдареЗ рд╣реИрдВ, рдЙрд╕ рдкрд░ рдзреНрдпрд╛рди рди рджреЗрдВ)ред рдФрд░ рдмрд╛рд╣рд░реА рдкреНрд░рддреАрдХреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рд╕рдВрдХрд▓рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╣рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдерд╛ред

рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдореИрдВ рдЕрдиреНрдп рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рд╕рдореВрд╣ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЖ рд╕рдХрддрд╛ рд╣реВрдВ рдЬрд┐рдирд╕реЗ рдореИрдВ рдХрдо рдкрд░рд┐рдЪрд┐рдд рд╣реВрдВред рдЗрди рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдореИрдХреНрд░реЛ/рдбреАрдПрд╕рдПрд▓ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрд╢рд╛рд╡рд╛рджреА рд╣реВрдВред рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдХреЛрдб рдХреЗ рдмреАрдЪ рдореЗрдВ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЕрдкрд╛рд░рджрд░реНрд╢реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЕрдХреНрд╖рд░рд╢рдГ рд╕реБрдкрд░ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ рдкреВрд░реНрдг рдПрдПрд╕рдПрдо рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдЬрдВрдЧ рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдиреЗ рдкрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рд┐рд░рджрд░реНрдж рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╣рдореЗрдВ рдХреНрдпрд╛ рдорд┐рд▓реЗрдЧрд╛ рдПрдХ рдирдИ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ред

рдПрдХ рдЕрд╕реЗрдВрдмрд▓рд░ рд▓рд┐рдЦрдирд╛ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рдПрдХ рдирдЬрд╝рд░ рдореЗрдВ рдорд╛рдореВрд▓реА рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рд╕рднреА рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреА рд╕рднреА рдШрдВрдЯрд┐рдпреЛрдВ, рд╕реАрдЯреА рдФрд░ рд╡рд┐рдЪрд┐рддреНрд░рддрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рджреВрд╕рд░реА рддрд░рдл рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдФрд░ рдХреНрд▓реЙрдмрд░реНрд╕ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдмреЗрд╣рдж рдореВрд▓реНрдпрд╡рд╛рди рд╣реЛрдЧрд╛ (рдЬреАрд╕реАрд╕реА рдХреЗ ... рдкреВрд░реНрдг рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ)ред

рд╣рд╛рдп рджреЛрд╕реНрддреЛрдВ,

рдЖрдкрдХреЛ рдкрд░реЗрд╢рд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореИрдВ рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рджреЛ рд╕реЗрдВрдЯ рдЧрд┐рд░рд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рд╕рд┐рд░реНрдл рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реВрдВ, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд╣реА рд╢рд░реНрдореАрд▓рд╛ / рд╢рд╛рдВрдд рд╡реНрдпрдХреНрддрд┐ рд╣реВрдВ, рдУрд╣, рдФрд░ рдПрдХ рдирд╡рд╛рдЧрдВрддреБрдХ, рдореИрдВ рдЕрднреА рд╣рд╛рд▓ рд╣реА рдореЗрдВ рд░рд╕реНрдЯ рдореЗрдВ рдЖрдпрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реВрдВ рдЗрд╕рдХреЗ рдкреНрдпрд╛рд░ рдореЗрдВред

рд▓реЗрдХрд┐рди рдпрд╣ рдЕрд╕реЗрдВрдмрд▓реА рдЪреАрдЬ рд╕рд┐рд░реНрдл рдкрд╛рдЧрд▓ рд╣реИ, рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, рдпрд╣ рддреАрди рд╕рд╛рд▓ рдХреА рдЕрд╡рдзрд┐ рдХреА рдмрд╛рддрдЪреАрдд рд╣реИ, рд╡рд┐рдЪрд╛рд░реЛрдВ рдФрд░ рд╢рд┐рдХрд╛рдпрддреЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ рдЬреЛ рдиреНрдпреВрдирддрдо рд╕рд╣рдорддрд┐ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред рддреАрди рд╕рд╛рд▓ рдФрд░ рдЖрд░рдПрдлрд╕реА рдирд╣реАрдВ, рдпрд╣ рдореМрдд рдХреЗ рдЕрдВрдд рдЬреИрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИред рдореИрдВ рдПрдХ рд╡рд┐рдирдореНрд░ рдЧрдгрд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ (рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рджреЛ рдпрд╛ рддреАрди рдмрдХреНрд╕реЗ рдореЗрдВ рднреМрддрд┐рдХ рд╣реЛрдЧрд╛), рдФрд░ рдореЗрд░реЗ рд▓рд┐рдП (рдФрд░ рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдЬрдВрдЧ рдореЗрдВ рдЕрд╕реЗрдВрдмрд▓реА рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рд╕рд╛рдереА рдХреЗ рд▓рд┐рдП), рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рд╣реИ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рджреЛ! рдПрдХ рдиреНрдпреВрдирддрдо рдЧрд╛рд░рдВрдЯреА рдХреЗ рд╕рд╛рде рдХрд┐ рдЕрдЧрд▓реЗ рджрд┐рди рд╕рдм рдХреБрдЫ рдирд╣реАрдВ рдмрджрд▓рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ (рдпрд╣реА рдЕрд╕реНрдерд┐рд░ рдЪреИрдирд▓ рд╣реИ, рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдпрд╣ рд╡рд╛рд░реНрддрд╛рд▓рд╛рдк, рдореБрдЭреЗ рдорд╣рд╕реВрд╕ рдХрд░рд╛рддрд╛ рд╣реИ)ред

рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣рд╛рдВ рд╣рд░ рдХреЛрдИ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдЪрд╛рд╣рддрд╛ рд╣реИ, рдФрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рджрд┐рди рдХреЛрдИ рдЙрд╕рдХреЗ рд╕рд╛рде рдЖрдП, рд▓реЗрдХрд┐рди рдЖрдЬ рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдореИрдХреНрд░реЛ рдареАрдХ рд╣реИ (рдареАрдХ рд╣реИ, рд╢рд╛рдпрдж рдХреБрдЫ рдорд╛рдпрдиреЛрдВ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕реАрдорд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ) рд╡реГрджреНрдзрд┐рд╢реАрд▓ рддрд░реАрдХреЗ рд╕реЗ рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП)ред рдЕрд╕реЗрдВрдмрд▓реА рд▓рд┐рдЦрдирд╛ рд╕рд┐рд╕реНрдЯрдо рднрд╛рд╖рд╛ рдореЗрдВ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЪреАрдЬ рдХреА рддрд░рд╣ рд╣реИ, рдПрдХ рдмрд╣реБрдд рд╣реА рдЖрд╡рд╢реНрдпрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рдФрд░ рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдареАрдХ рд╣реЛрдиреЗ рддрдХ cpp_build рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдореБрдЭреЗ рдмрд╣реБрдд рдбрд░ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ рддреЛ рдпрд╣ рдмрди рдЬрд╛рдПрдЧрд╛ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрднрд░рддрд╛ред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХреНрдпреЛрдВ, рдЗрд╕реЗ рдПрдХ рддрд░реНрдХрд╣реАрди рд╡рд┐рдЪрд╛рд░ рдХрд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдкреАрдкреА рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдереЛрдбрд╝рд╛ рджреБрдЦрдж рд╣реИ, рдореБрдЭреЗ рд╢реБрджреНрдз рдЬрдВрдЧ рд╕рдорд╛рдзрд╛рди рдЪрд╛рд╣рд┐рдПред

рдПрдлрдбрдмреНрд▓реНрдпреВрдЖрдИрдбрдмреНрд▓реНрдпреВ рдЬрдВрдЧ рдпрд╣рд╛рдВ рд╡рд┐рд╢реЗрд╖ рдирд╣реАрдВ рд╣реИ , рдПрдордПрд╕рд╡реАрд╕реА рдореЗрдВ x86_64 рдХреЗ рд▓рд┐рдП рдЗрдирд▓рд╛рдЗрди рдПрдПрд╕рдПрдо рдирд╣реАрдВ рд╣реИред рдЙрдирдХреЗ рдкрд╛рд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЬреАрдм рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ рдЬрд╣рд╛рдВ рдЖрдк рдСрдкрд░реЗрдВрдб рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ x86 рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

@josevalaad рдХреНрдпрд╛ рдЖрдк рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдмрд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рд╣рдо рдЖрдо рддреМрд░ рдкрд░ рдЗрд╕реЗ рдХреЗрд╡рд▓ рдУрдПрд╕ рдЬреИрд╕реА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рджреЗрдЦрддреЗ рд╣реИрдВ, рдЬреЛ рдЖрдо рддреМрд░ рдкрд░ рдЕрдиреНрдп рдХрд╛рд░рдгреЛрдВ рд╕реЗ рднреА рд░рд╛рдд рдореЗрдВ рдЕрдЯрдХ рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рднреА рд╡реЗ рдореБрд╢реНрдХрд┐рд▓ рд╕реЗ asm! , рдЗрд╕рд▓рд┐рдП asm! рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдирд╛ рдПрдХ рдирд╣реАрдВ рд░рд╣рд╛ рд╣реИ рдХреБрдЫ рдРрд╕рд╛ рдбрд┐рдЬрд╛рдЗрди рдФрд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдЪреНрдЪ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдЬреЛ рдПрд▓рдПрд▓рд╡реАрдПрдо рдХреЗ рдмрд╛рд╣рд░ рдареАрдХ рд╕реЗ рдЬреАрд╡рд┐рдд рд░рд╣ рд╕рдХреЗ рдФрд░ рд╕рднреА рдХреЛ рдЦреБрд╢ рдХрд░ рд╕рдХреЗред

рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдЕрдзрд┐рдХрд╛рдВрд╢ рдЪреАрдЬреЗрдВ рдПрдХреНрд╕рдкреЛрдЬрд╝реНрдб рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВред x86 рдФрд░ x86_64 рдХреЛ рд╕реНрдерд┐рд░ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЕрдиреНрдп рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкреНрд░рдЧрддрд┐ рдкрд░ рд╣реИрдВред рдпрд╣ рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓реЛрдЧреЛрдВ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рд╣реИ рдХрд┐ рдпреЗ рд▓рдХреНрд╖реНрдп рдХреЗ 95-99% рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рдХреБрдЫ рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдк рдореЗрд░реЗ рдЕрдкрдиреЗ рдХреНрд░реЗрдЯ

рд╣рдордиреЗ рдЕрднреА рдПрдХ рдЬреЗрдорд▓реЛрдХ рдкреАрдЖрд░ рдХрд╛ рд╡рд┐рд▓рдп рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдПрд▓рдПрд▓рд╡реАрдПрдо рдореЗрдВ рдХреЛрдб рдЬрдирд░реЗрд╢рди рдмрдЧ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ - https://github.com/jemalloc/jemalloc/pull/1303 ред рдХрд┐рд╕реА рдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдореЗрдВ рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ (https://github.com/rust-lang/rust/issues/53232#issue-349262078) рд░рд╕реНрдЯ (LLVM) рдореЗрдВ рдПрдХ рдХреЛрдб рдЬрдирд░реЗрд╢рди рдмрдЧ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЬреЗрдЯреНрд╕рд╕реА рдХреНрд░реЗрдЯ рдореЗрдВ рд╣реБрдЖ рдерд╛ред рджреЛрдиреЛрдВ рдкрд┐рдЫрд▓реЗ рджреЛ рд╣рдлреНрддреЛрдВ рдореЗрдВ рд╣реБрдП, рдФрд░ рджреЛрдиреЛрдВ рд╣реА рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдиреЗ рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд▓реЗрдХрд┐рди рд╕рдВрдХрд▓рдХ рдЙрдиреНрд╣реЗрдВ рд╡рд┐рдлрд▓ рдХрд░ рджрд┐рдпрд╛ред

рдЬрдм рд╕реА рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЬрдирд░реЗрд╢рди рдЕрд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╕реА рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦ рд╕рдХрддрд╛ рд╣реИред

рдЬрдм рдпрд╣ рд╕реНрдерд┐рд░ рдЬрдВрдЧ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЕрднреА рд╣рдореЗрдВ рд▓реЛрдЧреЛрдВ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдпрд╛ рдЕрдирд┐рд╢реНрдЪрд┐рдд рд╕рдордп рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреА рд╣реЛрдЧреА (рдЕрдХреНрд╕рд░ рд╡рд░реНрд╖реЛрдВ рдХреЗ рдХреНрд░рдо рдореЗрдВ)ред рдпрд╣ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИред

@eddyb рдЦреИрд░, рдореИрдВ рдПрдХ рдЫреЛрдЯреА рдореИрдЯреНрд░рд┐рдХреНрд╕ рдмреАрдЬрдЧрдгрд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реВрдБред рдЙрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдЕрдВрджрд░, рдореИрдВ рдмреАрдПрд▓рдПрдПрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд╢рд╛рдпрдж рдХреБрдЫ рд▓реИрдкреИрдХ (рдЕрднреА рддрдХ рдирд╣реАрдВ) рдЬрдВрдЧ рдореЗрдВ рджрд┐рдирдЪрд░реНрдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╢реБрджреНрдз рдЬрдВрдЧ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реЛред рдпрд╣ рдЕрднреА рддрдХ рдХреБрдЫ рднреА рдЧрдВрднреАрд░ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реИрд╕реЗ рднреА, рдореИрдВ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреБрдЫ рдПрдПрд╕рдПрдо рдЧрддрд┐ рдФрд░ рдорд╕реНрддреА рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЬреАрдИрдПрдордПрдо рдСрдкрд░реЗрд╢рди рдХреЗ рд╕рд╛рде, рдЬреЛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛ рд╣реИ (рд╡реИрд╕реЗ рднреА, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдЖрдк рдмреАрдПрд▓рдЖрдИрдПрд╕ рд▓реЛрдЧреЛрдВ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВ рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЪрд╛рд╣рд┐рдП), рдХрдо рд╕реЗ рдХрдо x86/x86_64. рдФрд░ рд╡рд╣ рд╣реИ рдкреВрд░реА рдХрд╣рд╛рдиреАред рдЬрд╛рд╣рд┐рд░ рд╣реИ рдореИрдВ рд░рд╛рдд рдХреЗ рдЪреИрдирд▓ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдореИрдВ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд╕реНрдерд┐рд░реАрдХрд░рдг рдХреА рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рджрд┐рд╢рд╛ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рд╛ рдзрдХреНрдХрд╛ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред

@shepmaster рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓реЛрдВ рдХреЗ _plenty_ рд╣реИрдВ рдЬрд┐рдирдХреЗ рд▓рд┐рдП рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИрдВред рд╣рд╛рд▓ рдХреЗ рд╕рд╛рдорд╛рди рдХреЗ рдореЗрд░реЗ рд╕рд┐рд░ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдЬрд╣рд╛рдВ рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ "рдХреНрдпреЛрдВ рдУрд╣, рдЬрдВрдЧ рдореЗрдВ рд╕реНрдерд┐рд░ рдПрдПрд╕рдПрдо рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИ?", рдХреЛрдИ XACQUIRE/XRELEASE рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рдирд╣реАрдВ рд╣реИред

рд╕реНрдерд┐рд░ рдЗрдирд▓рд╛рдЗрди рдПрдПрд╕рдПрдо рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдФрд░ рдирд╣реАрдВ, рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИрдВред

рдореЗрд░рд╛ рдореВрд▓ рдмрд┐рдВрджреБ рдХрд┐рд╕реА рдХреЛ рддреЗрдЬ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд░рдЦрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рдерд╛ред рдЙрдиреНрд╣реЛрдВрдиреЗ рдпрд╣ рдЬрд╛рдирдиреЗ рдХрд╛ рдХреЛрдИ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдХрд┐ рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рднреА рдЙрдкрд▓рдмреНрдз рдереЗ, рдФрд░ рдпрд╣реА рд╕рдм рдореИрдВрдиреЗ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд╛ред рдмрд╛рдХреА рдкреГрд╖реНрдарднреВрдорд┐ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдереАред

рдореИрдВ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рд╡рдХрд╛рд▓рдд рднреА рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдХреГрдкрдпрд╛ рдореЗрд░реЗ рд╕рд╛рде рдмрд╣рд╕ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рди рдХрд░реЗрдВ - рдЗрд╕ рджреМрдбрд╝ рдореЗрдВ рдореЗрд░реА рдХреЛрдИ рд╣рд┐рд╕реНрд╕реЗрджрд╛рд░реА рдирд╣реАрдВ рд╣реИред рдореИрдВ рдмрд╕ рд╡рд╣реА рджреЛрд╣рд░рд╛ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рд╡рд░реНрддрдорд╛рди рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ ред рдореИрдВ рдПрдХ рдРрд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рднрд╛рдЧ рд▓реЗрддрд╛ рд╣реВрдВ

рд╣рд╛рдВ, рдРрд╕реЗ рдорд╛рдорд▓реЗ рд╣реИрдВ рдЬрд┐рдирдХреЗ рд▓рд┐рдП рдЕрднреА рдЕрд╕реЗрдВрдмрд▓реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдРрд╕реЗ рдорд╛рдорд▓реЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдореЗрд╢рд╛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдореИрдВрдиреЗ рдореВрд▓ рд░реВрдк рд╕реЗ рдХрд╣рд╛ (рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдЬреЛрд░):

рдпрд╣ рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓реЛрдЧреЛрдВ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рд╣реИ рдХрд┐ [рдЖрдВрддрд░рд┐рдХ] 95-99% рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред

рдпрд╣ рдореЗрд░реА рд░рд╛рдп рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рд╕реНрдерд┐рд░ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдХрд┐рд╕реА рдХреЛ (рдпрд╛ рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рдореВрд╣) рдХреЛ рд░рд╕реНрдЯ рдЯреАрдо рд╕реЗ рдЖрдо рд╕рд╣рдорддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рд╕рд╛рдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред .

рдпрд╣ рдЕрднреА рддрдХ рдХреБрдЫ рднреА рдЧрдВрднреАрд░ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реИрд╕реЗ рднреА, рдореИрдВ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреБрдЫ рдПрдПрд╕рдПрдо рдЧрддрд┐ рдФрд░ рдорд╕реНрддреА рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЬреАрдИрдПрдордПрдо рдСрдкрд░реЗрд╢рди рдХреЗ рд╕рд╛рде, рдЬреЛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛ рд╣реИ (рд╡реИрд╕реЗ рднреА, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдЖрдк рдмреАрдПрд▓рдЖрдИрдПрд╕ рд▓реЛрдЧреЛрдВ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВ рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЪрд╛рд╣рд┐рдП), рдХрдо рд╕реЗ рдХрдо x86/x86_64.

рдореБрдЭреЗ рдЕрднреА рднреА рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрдпрд╛ рдХрд┐ рдЖрдкрдХреЛ рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рдмрд┐рдирд╛ рдХрд┐рди рдирд┐рд░реНрджреЗрд╢реЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╛ рдпрд╣ рдХреЗрд╡рд▓ рдЕрдВрдХрдЧрдгрд┐рддреАрдп рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреНрд░рдо рд╣реИ?
рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рд╡рд┐рд░реБрджреНрдз рдПрдХ рд╕рдорд╛рди рд░рд╕реНрдЯ рд╕реНрд░реЛрдд рдХреЛ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХрд┐рдпрд╛ рд╣реИ?

рдЖрдкрдХреЛ рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рдмрд┐рдирд╛ рдХрд┐рди рдирд┐рд░реНрджреЗрд╢реЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?

рдареАрдХ рд╣реИ, рдЬрдм рдЖрдк рдЧрдгрд┐рдд рдореЗрдВ рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдк рдореВрд▓ рд░реВрдк рд╕реЗ SIMD рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдФрд░ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдЬреИрд╕реЗ _mm256_mul_pd, _mm256_permute2f128_pd, рдЖрджрд┐ рдФрд░ рд╡реЗрдХреНрдЯрд░рд╛рдЗрдЬреЗрд╢рди рдСрдкрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдпрд╣ рдЖрдЧреЗ рдмрдврд╝рддрд╛ рд╣реИред рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рд╡реИрд╢реНрд╡реАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЖрдорддреМрд░ рдкрд░ рдпрд╣ рдереЛрдбрд╝рд╛ рдкрд░реАрдХреНрд╖рдг рдФрд░ рддреНрд░реБрдЯрд┐ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдЖрдк рдЬрд┐рд╕ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рд▓рдХреНрд╖рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЖрдкрдХреЗ рдорди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрдХреВрд▓рд┐рдд рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рдЖрдорддреМрд░ рдкрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реНрддрд░ рдкрд░ рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдПрдПрд╕рдПрдо рдХреЛрдб рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕реЗ рдкреВрдЫрддрд╛рдЫ рдХрд░рдиреА рд╣реЛрддреА рд╣реИ рддрд╛рдХрд┐ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдФрд░ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рд╕реЗрдЯ рдХреЛ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рдлрд┐рд░ рдЖрдкрдХреЗ рдЧрдгрд┐рдд рдПрдПрд╕рдПрдо рдХрд░реНрдиреЗрд▓ рдХреЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╕рд╢рд░реНрдд рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред

рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рд╡рд┐рд░реБрджреНрдз рдПрдХ рд╕рдорд╛рди рд░рд╕реНрдЯ рд╕реНрд░реЛрдд рдХреЛ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХрд┐рдпрд╛ рд╣реИ?

рдЕрднреА рдореЗрд░реЗ рдкрд╛рд╕ рдХреЛрдИ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рд╣реИ, рдФрд░ рдореИрдВ рдЫреБрдЯреНрдЯреА рдкрд░ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЦреБрдж рдХреЛ рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рд╣рд╛рдВ, рдЕрдЧрд░ рдЖрдк рдореБрдЭреЗ рдХреБрдЫ рд╣рдлрд╝реНрддреЗ рджреЗрдВ рддреЛ рдореИрдВ рдПрдХ рддреБрд▓рдирд╛рддреНрдордХ рдкреНрд░рджрд░реНрд╢рди рдкреЛрд╕реНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рд▓рд┐рдП рдореИрдиреНрдпреБрдЕрд▓ рдЯреНрдпреВрдиреЗрдб рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рд╕рд╛рде рдЬрд┐рддрдиреА рдЬрд▓реНрджреА рд╣реЛ рд╕рдХреЗ рдХреЛрдб рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реЛрддрд╛ рд╣реИред рдХрдо рд╕реЗ рдХрдо рд╕реА рдореЗрдВ рдпрд╣ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рднрд▓реЗ рд╣реА рдЖрдк рд╢рд╛рд╕реНрддреНрд░реАрдп рдкреНрд░рджрд░реНрд╢рди рддрдХрдиреАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЬреИрд╕реЗ рдореИрдиреБрдЕрд▓ рд▓реВрдк рдЕрдиреЛрд▓рд┐рдВрдЧ рдЬрд╣рд╛рдВ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рдЖрджрд┐, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЬрдВрдЧ рдореЗрдВ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЯреЗрд▓рд░ рдХреНрд░реИрдорд░ рдиреЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдХрд┐ рдореИрдВ рдпрд╣рд╛рдВ рдкреЛрд╕реНрдЯ рдХрд░реВрдВред рдореБрдЭреЗ рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдЪрд░реНрдЪрд╛ рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рде рддреЗрдЬреА рд╕реЗ рдЖрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдирд╣реАрдВ рдкрдврд╝рд╛ рд╣реИ; рдпрд╣ рдХреЗрд╡рд▓ рд╣рдорд╛рд░реА рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рдорд░реНрдерди рдФрд░ рдмрдпрд╛рди рдХреА рдЖрд╡рд╛рдЬ рд╣реИред

Google рдкрд░ рдПрдХ рдмреЗрдпрд░-рдореЗрдЯрд▓ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрдирд▓рд╛рдЗрди рдФрд░ рдореЙрдбреНрдпреВрд▓-рд╕реНрддрд░реАрдп рдЕрд╕реЗрдВрдмрд▓рд░ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдкрд░ рдХреБрдЫ рдЖрдВрджреЛрд▓рди рджреЗрдЦрдирд╛ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗред рд╡рд┐рдХрд▓реНрдк рдПрдлрдПрдлрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢реБрджреНрдз рдЕрд╕реЗрдВрдмрд▓реА рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЕрд▓рдЧ рд╕реЗ рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдПрдХ рд╕рд╛рде рдмрд╛рдЗрдирд░реА рдореЗрдВ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред

рд╣рдо рдЕрд╕реЗрдВрдмрд▓рд░ рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдХреЛрдИ рдЧрдВрднреАрд░ рдирдВрдЧреЗ рдзрд╛рддреБ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рд╣реИ рдЬреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдРрд╕рд╛ рдХрд░рддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдЬрдЯрд┐рд▓рддрд╛ рдФрд░ рдкреНрд░рджрд░реНрд╢рди рджреЛрдиреЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрдорд┐рдпрд╛рдВ рд╣реИрдВред Redox 'asm!' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд▓рд┐рдирдХреНрд╕, рдмреАрдПрд╕рдбреА, рдореИрдХрдУрдПрд╕, рд╡рд┐рдВрдбреЛрдЬ рдЖрджрд┐ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрджрд┐рдЧреНрдз, рд╕рднреА рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓рд░ рдХрд╛ рдкреНрд░рдЪреБрд░ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЬрд┐рд░рдХреЛрди рдФрд░ рдПрд╕рдИрдПрд▓4 рдХрд░рддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдкреНрд▓рд╛рди 9 рдиреЗ рднреА рдХреБрдЫ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рд╣рд╛рд░реНрд╡реЗ рдлреЛрд░реНрдХ рдореЗрдВ рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдерд╛ред

рдкреНрд░рджрд░реНрд╢рди-рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП, рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдУрд╡рд░рд╣реЗрдб рдХреЙрд▓ рдХрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╣рд╛рд╡реА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЕрд╕реЗрдВрдмрд▓рд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рдирд┐рд░реНрджреЗрд╢ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ, рдПрдХ рд░рдЬрд┐рд╕реНрдЯрд░ рдкрдврд╝рдиреЗ рдпрд╛ рд▓рд┐рдЦрдиреЗ, рдпрд╛ рдЕрдиреНрдпрдерд╛ рдорд╢реАрди рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЖрдорддреМрд░ рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рд╕реНрдкреЗрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╕реЗ рдЫрд┐рдкрд╛ рд╣реЛрддрд╛ рд╣реИ, рдЧрд▓рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдХрдард┐рди рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХрд╛ рдЕрд░реНрде рд╣реИред рдХрд┐рд╕реА рднреА рдШрдЯрдирд╛ рдореЗрдВ, рд╣рдореЗрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдЧреЛ (рдпрд╛ рдмрд╛рд╣рд░реА рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо рдпрд╛ рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдпрд╛ рдХреБрдЫ рдХреЗ рд╕рд╛рде рдкреВрд░рдХ) рдХреЗ рд╣рдорд╛рд░реЗ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЕрдзрд┐рдХ рд░рдЪрдирд╛рддреНрдордХ рд╣реЛрдирд╛ рд╣реЛрдЧрд╛ред рд╢рд╛рдпрдж build.rs рдпрд╣рд╛рдВ рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд▓рд┐рдВрдХрд░ рдореЗрдВ рдлреАрдб рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдЪреБрдиреМрддреАрдкреВрд░реНрдг рд▓рдЧрддрд╛ рд╣реИред

рдЕрдЧрд░ рдЕрд╕реЗрдВрдмрд▓рд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдкреНрд░рддреАрдХрд╛рддреНрдордХ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдерд╛ рддреЛ рдореБрдЭреЗ рднреА рдпрд╣ рдмрд╣реБрдд рдкрд╕рдВрдж рдЖрдПрдЧрд╛ред

рд╣рдо рдЗрдирд▓рд╛рдЗрди рдФрд░ рдореЙрдбреНрдпреВрд▓-рд╕реНрддрд░реАрдп рдЕрд╕реЗрдВрдмрд▓рд░ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдкрд░ рдХреБрдЫ рдЖрдВрджреЛрд▓рди рджреЗрдЦрдирд╛ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗред

рдкрд┐рдЫрд▓реЗ рдкреНрд░реА-рдЖрд░рдПрдлрд╕реА (https://internals.rust-lang.org/t/pre-rfc-inline-assembly/6443) рдиреЗ 6 рдорд╣реАрдиреЗ рдкрд╣рд▓реЗ рдЖрдо рд╕рд╣рдорддрд┐ рд╣рд╛рд╕рд┐рд▓ рдХреА рдереА (рдХрдо рд╕реЗ рдХрдо рдЕрдзрд┐рдХрд╛рдВрд╢ рдореВрд▓рднреВрдд рдореБрджреНрджреЛрдВ рдкрд░), рддреЛ рдЕрдЧрд▓рд╛ рдХрджрдо рдПрдХ рдЖрд░рдПрдлрд╕реА рдЬрдорд╛ рдХрд░рдирд╛ рд╣реИ рдЬреЛ рдЙрд╕ рдкрд░ рдмрдирддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рддреЗрдЬреА рд╕реЗ рд╣реЛ рддреЛ рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ @Florob рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣

рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рдХреНрдпрд╛ рд╣реИ, рдореБрдЭреЗ рд╡рд┐рдВрдбреЛрдЬрд╝ рдкрд░ рдЯреАрдИрдмреА рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдкреЙрдЗрдВрдЯрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдлрдПрд╕рдЬреАрдПрд╕ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рддрдХ рд╕реАрдзреА рдкрд╣реБрдВрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдореБрдЭреЗ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рд╕реНрдореГрддрд┐ рд╕реНрдерд╛рди рдкрд░ bt рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП _bittest64 -рдЬреИрд╕реЗ рдЖрдВрддрд░рд┐рдХ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдореБрдЭреЗ рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдпрд╛ рдмрд╛рд╣рд░реА рдХреЙрд▓ рдХреЗ рдмрд┐рдирд╛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдорд┐рд▓рд╛ред

рдпрд╣рд╛рдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рддреАрд╕рд░рд╛ рдмрд┐рдВрджреБ рдореБрдЭреЗ рдЪрд┐рдВрддрд┐рдд рдХрд░рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрд▓рдПрд▓рд╡реАрдПрдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬрд╕реНрдЯ рдХреНрд░реИрд╢ рдХреЛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реИ рдпрджрд┐ рдХреБрдЫ рдЧрд▓рдд рд╣реИ рддреЛ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

@MSxDOS

рдореБрдЭреЗ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рд╕реНрдореГрддрд┐ рд╕реНрдерд╛рди рдкрд░ рдмреАрдЯреА рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП _bittest64-рдЬреИрд╕реЗ рдЖрдВрддрд░рд┐рдХ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдореБрдЭреЗ рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдпрд╛ рдмрд╛рд╣рд░реА рдХреЙрд▓ рдХреЗ рдмрд┐рдирд╛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИред

рдЙрд╕ рдПрдХ рдХреЛ stdsimd рдЬреЛрдбрд╝рдирд╛ рдХрдард┐рди рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрд▓реИрдВрдЧ рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА (https://github.com/llvm-mirror/clang/blob/c1c07cca8cae5f924cedaac7b202b0f3c167111d/test/CodeGen/bittest-intrin рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрдиреНрд╣реЗрдВ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред .c#L45) рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрд╕рдЯреАрдбреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЖрдВрддрд░рд┐рдХ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░рд╕реНрдЯ рдореЗрдВ рдЙрдЬрд╛рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд▓рд╛рдкрддрд╛ рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ stdsimd рд░реЗрдкреЛ рдореЗрдВ рдПрдХ рдореБрджреНрджрд╛ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдорд╣рд╕реВрд╕ рдХрд░реЗрдВред

@josevalaad

рдареАрдХ рд╣реИ, рдЬрдм рдЖрдк рдЧрдгрд┐рдд рдореЗрдВ рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдк рдореВрд▓ рд░реВрдк рд╕реЗ SIMD рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдФрд░ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдЬреИрд╕реЗ _mm256_mul_pd, _mm256_permute2f128_pd, рдЖрджрд┐ рдФрд░ рд╡реЗрдХреНрдЯрд░рд╛рдЗрдЬреЗрд╢рди рдСрдкрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдпрд╣ рдЖрдЧреЗ рдмрдврд╝рддрд╛ рд╣реИред

рдЖрд╣, рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рдерд╛ рдХрд┐ рдРрд╕рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдареАрдХ рд╣реИ, рдЕрдЧрд░ рдЖрдк рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ std::arch рдЖрдВрддрд░рд┐рдХ рдХреЙрд▓ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЛ рдЗрд╕рд╕реЗ рд╡рд╣реА рдкреНрд░рджрд░реНрд╢рди рдорд┐рд▓рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред

рдпрджрд┐ рдЖрдк рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ , рддреЛ рдХреГрдкрдпрд╛ рд╕рдорд╕реНрдпрд╛рдПрдБ рджрд░реНрдЬ рдХрд░реЗрдВред рдПрд▓рдПрд▓рд╡реАрдПрдо рдЬрд╛рджреВ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рдПрдПрд╕рдПрдо рдЬрд┐рддрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

@dancrossnyc рдЕрдЧрд░ рдЖрдкрдХреЛ рдореБрдЭрд╕реЗ рдкреВрдЫрдиреЗ рдореЗрдВ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рд╣реИ, рддреЛ рдХреНрдпрд╛ рдЖрдкрдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХреЗрд╕/рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╕реБрд╡рд┐рдзрд╛рдПрдВ рд╣реИрдВ рдЬрд┐рдирдХреЗ рд▓рд┐рдП рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдХреА

@MSxDOS рд╢рд╛рдпрдж рд╣рдореЗрдВ "рд╕реЗрдЧрдореЗрдВрдЯ" рд░рдЬрд┐рд╕реНрдЯрд░ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП


рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдХреБрдЫ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд▓реЛрдЧреЛрдВ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ asm! рд▓рд┐рдП рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдХрд┐рддрдиреЗ рдХрд┐рд╕реА рдЕрдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рд╕рдорд░реНрдерд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдХреБрдЫ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд▓реЛрдЧреЛрдВ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рдХрд╛ рдПрдХ рдмреНрд░реЗрдХрдбрд╛рдЙрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП!

рдореБрдЭреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП asm! :

  • рдХрдВрдкрд╛рдЗрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд░рдирд╛
  • рдХрдВрдкрд╛рдЗрд▓рд░ рдмрдЧ/рдЙрдк-рдЗрд╖реНрдЯрддрдо рдХреЛрдб рдкреАрдврд╝реА рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд░рдирд╛
  • рдРрд╕реЗ рдХрд╛рд░реНрдп рдХрд░рдирд╛ рдЬрд┐рдиреНрд╣реЗрдВ рдПрдХрд▓ рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рдХреЙрд▓ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдкрдврд╝рд╛ рд╣реБрдЖ EFLAGS-рд╕рдВрд╢реЛрдзрд┐рдд-рд▓рд┐рдЦрдирд╛ EFLAGS рдЬрд╣рд╛рдВ LLVM рдХреЛ рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рдмреАрдЪ eflags рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ, рдФрд░ рдЬрд╣рд╛рдВ LLVM рдпрд╣ рднреА рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдпрд╣ рдЗрд╕рдХреЗ рдкреАрдЫреЗ рд╣реИ (рдЕрд░реНрдерд╛рдд, EFLAGS рдХреЗ рд╕рд╛рде рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рд░реАрдб-рдореЙрдбрд┐рдлрд╛рдИ-рд░рд╛рдЗрдЯ рдСрдкрд░реЗрд╢рдВрд╕ рдХреЛ рдПрдХрд▓ рдкрд░рдорд╛рдгреБ asm! рдмреНрд▓реЙрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрдирд╛ рд╣реИ)ред

рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдХрд┐рддрдиреЛрдВ рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рд╕рдорд░реНрдерди рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдореБрдЭреЗ рдЙрди рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдЕрдиреНрдп рддрд░реАрдХрд╛ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдХрд╛ рдХреЛрдИ рд░реВрдк рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рджрд┐рдорд╛рдЧ рдЦреБрд▓рд╛ рд╣реИред

рдкреНрд░реА-рдЖрд░рдПрдлрд╕реА рдереНрд░реЗрдб рдореЗрдВ рдореЗрд░реА рдкреЛрд╕реНрдЯ рд╕реЗ рдХреЙрдкреА рдХреА рдЧрдИ, рдпрд╣рд╛рдВ рдХреБрдЫ рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА (рдПрдЖрд░рдПрдо 64) рд╣реИ рдЬрд┐рд╕рдХрд╛ рдореИрдВ рдЕрдкрдиреЗ рд╡рд░реНрддрдорд╛рди рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ:

// Common code for interruptible syscalls
macro_rules! asm_interruptible_syscall {
    () => {
        r#"
            # If a signal interrupts us between 0 and 1, the signal handler
            # will rewind the PC back to 0 so that the interrupt flag check is
            # atomic.
            0:
                ldrb ${0:w}, $2
                cbnz ${0:w}, 2f
            1:
               svc #0
            2:

            # Record the range of instructions which should be atomic.
            .section interrupt_restart_list, "aw"
            .quad 0b
            .quad 1b
            .previous
        "#
    };
}

// There are other versions of this function with different numbers of
// arguments, however they all share the same asm code above.
#[inline]
pub unsafe fn interruptible_syscall3(
    interrupt_flag: &AtomicBool,
    nr: usize,
    arg0: usize,
    arg1: usize,
    arg2: usize,
) -> Interruptible<usize> {
    let result;
    let interrupted: u64;
    asm!(
        asm_interruptible_syscall!()
        : "=&r" (interrupted)
          "={x0}" (result)
        : "*m" (interrupt_flag)
          "{x8}" (nr as u64)
          "{x0}" (arg0 as u64)
          "{x1}" (arg1 as u64)
          "{x2}" (arg2 as u64)
        : "x8", "memory"
        : "volatile"
    );
    if interrupted == 0 {
        Ok(result)
    } else {
        Err(Interrupted)
    }
}

@Amanieu рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ @japaric ARM рдХреЗ рд▓рд┐рдП рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рдХреА рдУрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ ред рдпрд╣ рджреЗрдЦрдиреЗ рд▓рд╛рдпрдХ рд╣реЛрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рд╡рд╣ рдкреНрд░рд╕реНрддрд╛рд╡ рдЖрдкрдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред

@рд╢реЗрдкрдорд╛рд╕реНрдЯрд░

@Amanieu рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ @japaric рдПрдЖрд░рдПрдо рдХреЗ рд▓рд┐рдП

рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐:

  • рдпрд╣ рдХрд╛рд░реНрдп рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рдЗрд╕рдХрд╛ рдкреВрд░рдХ рд╣реИред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╡рд┐рдХреНрд░реЗрддрд╛ рдПрдкреАрдЖрдИ рдХреЛ std::arch , рдпреЗ рдПрдкреАрдЖрдИ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВред

  • рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗрд╡рд▓ рддрднреА рдкреНрд░рдпреЛрдЧ рдпреЛрдЧреНрдп рд╣реЛрддрд╛ рд╣реИ рдЬрдм foo(); bar(); baz(); рдЬреИрд╕реЗ рдЖрдВрддрд░рд┐рдХ рдХреЙрд▓ рдХрд╛ рдЕрдиреБрдХреНрд░рдо рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдЙрд╕ рдЕрдиреБрдХреНрд░рдо рд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ - рдпрд╣ рдЬрд░реВрд░реА рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЬрдм рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдХреЛрдб рдЬреЛ рд╕рд╣реА рджрд┐рдЦрддрд╛ рд╣реИ рд╡рд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЧрд▓рдд рдЙрддреНрдкрд╛рджрди рдХрд░рддрд╛ рд╣реИ рдкрд░рд┐рдгрд╛рдо, рдФрд░ рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд░реВрдк рд╕реЗ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ (рд╣рдорд╛рд░реЗ рдкрд╛рд╕ x86 рдФрд░ x86_64 рдореЗрдВ std рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрдЧ рдереЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, https://github.com/rust- lang-nursery/stdsimd/blob/master/coresimd/x86/cpuid.rs#L108 - рдЕрдиреНрдп рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдореЗрдВ рднреА рдпреЗ рдореБрджреНрджреЗ рд╣реИрдВ)ред

  • рдХреБрдЫ рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рдореЗрдВ рддрддреНрдХрд╛рд▓ рдореЛрдб рддрд░реНрдХ рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ foo(3) рдХрд╛рдо рди рдХрд░реЗред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╣рд░ рд╕рдорд╛рдзрд╛рди рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдПрдХ рдЕрдЬреАрдм рд╕рдорд╛рдзрд╛рди рд╣реИ, рдФрд░ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд░рд╕реНрдЯ рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

рддреЛ рдЕрдЧрд░ рд╡рд┐рдХреНрд░реЗрддрд╛ рдПрдкреАрдЖрдИ рдЬрдВрдЧ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИрдВ, std::arch рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ, рдФрд░ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рд╡реЗ рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╕рдордп-рд╕рдордп рдкрд░ рдпрд╛ рддреЛ рдПрдкреАрдЖрдИ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рд╢рд╛рдпрдж рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рднреА рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ / рдпрд╛ рдЙрдиреНрд╣реЗрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЬреЛрдбрд╝рд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдо рднрд╡рд┐рд╖реНрдп рдореЗрдВ "рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдореБрджреНрджреЛрдВ" рдХреЛ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдЧрд░ рдЖрдк рдЬреЛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд╡рд╣ рд╡рд┐рдХреНрд░реЗрддрд╛ рдПрдкреАрдЖрдИ рджреНрд╡рд╛рд░рд╛ рдЙрдЬрд╛рдЧрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╛ рдПрдкреАрдЖрдИ рдХреЛ рдЬреЛрдбрд╝рд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЖрдкрдХреА рдорджрдж рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

рдПрд▓рдПрд▓рд╡реАрдПрдо рдХреЗ рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рд┐рдордб) рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╡реЗ рдЗрдВрдЯреЗрд▓ рдХреЗ рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рдХреЗ рд╕реНрдкрд╖реНрдЯ рдорд╛рдирдЪрд┐рддреНрд░рдг рдХреЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдЕрдиреБрд░реВрдк рдирд╣реАрдВ рд╣реИрдВ - рд╡реЗ рдХрдВрдкрд╛рдЗрд▓рд░ рдЕрдиреБрдХреВрд▓рди рдХреА рдПрдХ рд╡рд┐рд╕реНрддреГрдд рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдЕрдзреАрди рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдПрдХ рд╕рдордп рдпрд╛рдж рд╣реИ рдЬрд╣рд╛рдВ рдореИрдВрдиреЗ рд╕реНрдореГрддрд┐ рд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЕрдиреНрдп рд╕реНрдерд┐рд░рд╛рдВрдХ рд╕реЗ рдХреБрдЫ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреА рдЧрдгрдирд╛ рдХрд░рдХреЗ рд╕реНрдореГрддрд┐ рджрдмрд╛рд╡ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдПрд▓рдПрд▓рд╡реАрдПрдо рдмрд╕ рдкреВрд░реА рдЪреАрдЬ рдХреЛ рдареАрдХ рдЙрд╕реА рдореЗрдореЛрд░реА рд▓реЛрдб рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рд╛, рдЬрд┐рд╕реЗ рдореИрдВ рдЯрд╛рд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛ред рдПрдХ рдЕрд▓рдЧ рдорд╛рдорд▓реЗ рдореЗрдВ рдореИрдВ рдкреЛрд░реНрдЯ5 рджрдмрд╛рд╡ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 16-рдмрд┐рдЯ рдлреЗрд░рдмрджрд▓ рдХреЛ 8-рдмрд┐рдЯ рдлреЗрд░рдмрджрд▓ рдХреЗ рд╕рд╛рде рдмрджрд▓рдиреЗ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдлрд┐рд░ рднреА рдЕрдкрдиреЗ рдЕрдирдВрдд рдЬреНрдЮрд╛рди рдореЗрдВ рд╣рдореЗрд╢рд╛-рд╕рд╣рд╛рдпрдХ рдПрд▓рдПрд▓рд╡реАрдПрдо рдЕрдиреБрдХреВрд▓рдХ рдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдореЗрд░рд╛ 8-рдмрд┐рдЯ рд╢рдлрд▓ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ 16-рдмрд┐рдЯ рд╢рдлрд▓ рд╣реИ рдФрд░ рдЗрд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рджреЛрдиреЛрдВ рдЕрдиреБрдХреВрд▓рди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдмреЗрд╣рддрд░ рдереНрд░реВрдкреБрдЯ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ (рд╡рд┐рд╢реЗрд╖рдХрд░ рд╣рд╛рдЗрдкрд░рдереНрд░реЗрдбрд┐рдВрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ) рд▓реЗрдХрд┐рди рд╡рд┐рд▓рдВрдмрддрд╛ рдореЗрдВ рдХрдореА рдирд╣реАрдВ рдЬрд┐рд╕реЗ рдореИрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рдерд╛ред рдореИрдВрдиреЗ рдЙрд╕ рдкреНрд░рдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╕рднреА рддрд░рд╣ рд╕реЗ рдиреАрдЪреЗ рдЧрд┐рд░рд╛ рджрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдХреЛрдб рдХреЛ рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рд╕реЗ рдкреНрд▓реЗрди рдПрдПрд╕рдПрдо рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╕рд┐рд░реНрдл рдЕрдирд╛рд╡рд╢реНрдпрдХ рдШрд░реНрд╖рдг рдерд╛ред рдмреЗрд╢рдХ рдореИрдВ рдХреБрдЫ рдЙрдЪреНрдЪ рд╕реНрддрд░реАрдп рд╡реЗрдХреНрдЯрд░ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝рд░ рдирд┐рд░реНрджреЗрд╢ рдЪрдпрди рдпрд╛ рдирд┐рд░рдВрддрд░ рдлреЛрд▓реНрдбрд┐рдВрдЧ рдЬреИрд╕реА рдЪреАрдЬреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВрдиреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рддрдп рдХрд┐рдпрд╛ рдХрд┐ рдХреМрди рд╕реЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ, рддреЛ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рдХрд┐ рд╕рдВрдХрд▓рдХ рдЙрд╕рдХреЗ рд╕рд╛рде рдЧрдбрд╝рдмрдбрд╝ рдХрд░реЗред рдПрдХрдорд╛рддреНрд░ рд╡рд┐рдХрд▓реНрдк рдЗрдирд▓рд╛рдЗрди рдПрдПрд╕рдПрдо рд╣реИред

рддреЛ рдЕрдЧрд░ рд╡рд┐рдХреНрд░реЗрддрд╛ рдПрдкреАрдЖрдИ рдЬрдВрдЧ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИрдВ, std::arch рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ, рдФрд░ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рд╡реЗ рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИрдВ

рдореИрдВ рдкрд╣рд▓реЗ рддреЛ рдмрд╕ рдЗрддрдирд╛ рдерд╛

95-99% рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░реЗрдВ

рдФрд░ рдлрд┐рд░

рд╣рд╛рдВ, рдРрд╕реЗ рдорд╛рдорд▓реЗ рд╣реИрдВ рдЬрд┐рдирдХреЗ рд▓рд┐рдП рдЕрднреА рдЕрд╕реЗрдВрдмрд▓реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдРрд╕реЗ рдорд╛рдорд▓реЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдореЗрд╢рд╛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдореИрдВрдиреЗ рдореВрд▓ рд░реВрдк рд╕реЗ рдХрд╣рд╛ (рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдЬреЛрд░):

рдпрд╣ рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓реЛрдЧреЛрдВ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рд╣реИ рдХрд┐ [рдЖрдВрддрд░рд┐рдХ] 95-99% рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред

рдпрд╣ рд╡рд╣реА рдмрд╛рдд рд╣реИ рдЬреЛ @eddyb рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдХрд╣ рд░рд╣реА рд╣реИред рдореИрдВ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реВрдВ рдХрд┐ рдХреНрдпреЛрдВ рдХрдИ рд▓реЛрдЧ рдРрд╕рд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреИрд╕реЗ рдореИрдВ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛рдУрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ

рдореИрдВрдиреЗ

  1. рдПрдХ рдкреЛрд╕реНрдЯрд░ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд┐рд╕рдиреЗ рдпрд╣ рдЬрд╛рдирдиреЗ рдХрд╛ рдХреЛрдИ рдЬрд┐рдХреНрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдХрд┐ рдЖрдВрддрд░рд┐рдХ рдЖрдЬ рд╕реНрдерд┐рд░ рдЖрдВрддрд░рд┐рдХрддрд╛ рдХреА рдУрд░ рдореМрдЬреВрдж рд╣реИред
  2. рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рдкрд░ рдПрдХ рдФрд░ рдкреЛрд╕реНрдЯрд░ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд┐рдпрд╛ рддрд╛рдХрд┐ рд╡реЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдкрд░ рдЬрд▓реНрджреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗ рд╕рдХреЗрдВред

рдореИрдВ рдЗрд╕реЗ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрддрд╛рддрд╛ рд╣реВрдВ: рд╣рд╛рдВ, рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдХрднреА-рдХрднреА рдЖрд╡рд╢реНрдпрдХ рдФрд░ рдЕрдЪреНрдЫреА рд╣реЛрддреА рд╣реИ ред рдореИрдВ рдЙрд╕ рдкрд░ рдмрд╣рд╕ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВ рдХреЗрд╡рд▓ рдЙрди рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рд▓реЛрдЧреЛрдВ рдХреА рдорджрдж рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдЕрднреА рдЙрдкрд▓рдмреНрдз рд╣реИрдВред

рдореИрдВ рдЬреЛ рдХрд╣рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛, рд╡рд╣ рдпрд╣ рдерд╛ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдзрд┐рдХ рд╕рдВрдЧрдард┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг, рдПрдХ рдЙрдЪрд┐рдд рд╕рд░реНрд╡реЗрдХреНрд╖рдг, рдФрд░ рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рд╣рдо рдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдбреЗрдЯрд╛ рдПрдХрддреНрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдлрд┐рд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдмрд╕реЗ рдЖрдо рдЬрд░реВрд░рддреЛрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА (рдЪреВрдВрдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ)ред

рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдореЗрдВ рдПрдХ рдореБрд╢реНрдХрд┐рд▓-рд╕реЗ-рдореЙрдбрд▓ рд╕рдмрд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЗрдирд▓рд╛рдЗрди asm! рд╕реЗ рдХреБрдЫ рдЙрдкрдпреЛрдЧ рдорд┐рд▓рддрд╛ рд╣реИ, рдФрд░ рд╢рд╛рдпрдж рд╣рдореЗрдВ рдЙрди рд╕рдмрд╕реЗрдЯ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдлрд┐рд░ рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

cc @rust-lang/lang

@eddyb _require_ рдПрдХ рдордЬрдмреВрдд рд╢рдмреНрдж рд╣реИ, рдФрд░ рдореБрдЭреЗ рдпрд╣ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рд╣реЛрдирд╛ рдкрдбрд╝реЗрдЧрд╛ рдХрд┐ рдирд╣реАрдВ, рд╣рдореЗрдВ рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рдЦреНрддреА рд╕реЗ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рд╣рдо рд╢реБрджреНрдз рдЕрд╕реЗрдВрдмрд▓реА рднрд╛рд╖рд╛ рдореЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧ рд╕реЗ рдЗрдХрдЯреНрдард╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдлрдПрдлрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рдорд╛рд░реЗ рдЬрдВрдЧ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдХрд╣рд╛ рдерд╛, рдореБрдЭреЗ рдРрд╕рд╛ рдХреЛрдИ рдЧрдВрднреАрд░ OS-рд╕реНрддрд░реАрдп рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдирд╣реАрдВ рдкрддрд╛ рд╣реИ рдЬреЛ рдРрд╕рд╛ рдХрд░рддрд╛ рд╣реЛред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реЛрдЧрд╛ рдмрд╣реБрдд рд╕рд╛рд░реА рдмреЙрдпрд▓рд░ рдкреНрд▓реЗрдЯ (рдкрдврд╝реЗрдВ: рдЧрд▓рддреА рдХрд░рдиреЗ рдХреА рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛), рдПрдХ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдирд┐рд░реНрдорд╛рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ (рдЕрднреА рд╣рдо рдХрд╛рдлреА рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рд╣реИрдВ рдХрд┐ рд╣рдо рдПрдХ рд╕рд╛рдзрд╛рд░рдг cargo рдЖрдордВрддреНрд░рдг рдФрд░ рдПрдХ рд▓рд┐рдВрдХреНрдб рдФрд░ рд▓рдЧрднрдЧ рддреИрдпрд╛рд░-рдЯреВ-рд░рди рдХрд░реНрдиреЗрд▓ рджреВрд╕рд░реЗ рдЫреЛрд░ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддрд╛ рд╣реИ; рд╣рдореЗрдВ рдЕрд╕реЗрдВрдмрд▓рд░ рдФрд░ рд▓рд┐рдВрдХ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдЪрд░рдг рдореЗрдВ рдЖрдордВрддреНрд░рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛), рдФрд░ рдЪреАрдЬреЛрдВ рдХреЛ рдЗрдирд▓рд╛рдЗрди рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдореЗрдВ рднрд╛рд░реА рдХрдореА, рдЖрджрд┐; рд▓рдЧрднрдЧ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдкреНрд░рджрд░реНрд╢рди рд╣рд┐рдЯ рд╣реЛрдЧрд╛ред

рдХрдВрдкрд╛рдЗрд▓рд░ рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рдЬреИрд╕реА рдЪреАрдЬреЗрдВ рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдорджрдж рдХрд░рддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рд▓рдХреНрд╖реНрдп рдЖрдИрдПрд╕рдП рдХреЗ рдкрд░реНрдпрд╡реЗрдХреНрд╖реА рдирд┐рд░реНрджреЗрд╢ рд╕реЗрдЯ рдЬреИрд╕реА рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрдзрд┐рдХ рдЧреВрдврд╝ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рд╕реБрд╡рд┐рдзрд╛рдПрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╣рд╛рдЗрдкрд░рд╡рд╛рдЗрдЬрд░ рдФрд░ рдПрдиреНрдХреНрд▓реЗрд╡ рдлреАрдЪрд░реНрд╕), рдЕрдХреНрд╕рд░ рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рд╣рдо рдЕрдВрджрд░ рд╣реИрдВ рдПрдХ no_std рд╡рд╛рддрд╛рд╡рд░рдгред рдЕрдХреНрд╕рд░ рдЬреЛ рдЖрдВрддрд░рд┐рдХ рддрддреНрд╡ рд╣реЛрддреЗ рд╣реИрдВ рд╡реЗ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ; рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, x86-рдЗрдВрдЯрд░рдкреНрдЯ рдХреЙрд▓рд┐рдВрдЧ рдХрдиреНрд╡реЗрдВрд╢рди рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЯреНрд░реИрдк рдлреНрд░реЗрдо рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдпреЛрдЬрди рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░рд╕реНрдкрд░ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ: рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдореИрдВ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреЗ рдЗрд░рд╛рджреЗ рд╕реЗ рдПрдХ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд┐рд░реНрджреЗрд╢ рдЕрдкрд╡рд╛рдж рд▓реЗрддрд╛ рд╣реВрдВ, рдФрд░ рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдирдХрд▓реА рдирд┐рд░реНрджреЗрд╢ рдПрдХ рдореВрд▓реНрдп рджреЗрддрд╛ рд╣реИ %rax рдпрд╛ рдХреБрдЫ рдореЗрдВ; рдХреЙрд▓рд┐рдВрдЧ рдХрдиреНрд╡реЗрдВрд╢рди рдореБрдЭреЗ рдХреЙрд▓-рд╕рд╛рдЗрдЯ рдкрд░ рд╡рд╛рдкрд╕ рднреЗрдЬрдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЕрдкрдирд╛ рд░реЛрд▓ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдЕрд╕реЗрдВрдмрд▓рд░ рдореЗрдВ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдЕрдкрд╡рд╛рдж рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреЛрдб рд▓рд┐рдЦрдирд╛ рдерд╛ред

рддреЛ рдИрдорд╛рдирджрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ _require_ рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓рд░ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реИ рдХрд┐ рдЗрд╕реЗ рди рд░рдЦрдирд╛ рд▓рдЧрднрдЧ рдПрдХ рдЧреИрд░-рд╕реНрдЯрд╛рд░реНрдЯрд░ рд╣реЛрдЧрд╛ред

@dancrossnyc рдореИрдВ рдЕрд▓рдЧ рд╕рдВрдпреЛрдЬрди, рд╣реИ рдХрд┐ рдкрд░рд╣реЗрдЬ, рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреА рддрд░рд╣ рдЖрдк рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ, рдЪрд╛рд╣реЗ рдХрд┐рддрдирд╛ рдЖрдк рдЗрд╕реЗ рдореЗрдВ рд▓рд┐рдВрдХ рдореЗрдВ рд╕рднреА рдкрд░ рдЬрд░реВрд░рдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрддреНрд╕реБрдХ рд╣реВрдБред

рдЖрдкрдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдПрдХ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ/рд╣рд╛рдЗрдкрд░рд╡рд╛рдЗрдЬрд░/рдПрдиреНрдХреНрд▓реЗрд╡ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдЖрдИрдПрд╕рдП рд╕рдмрд╕реЗрдЯ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рдХреНрдпрд╛ рдпрд╣ рд╕рд╣реА рд╣реИ?

рдЕрдХреНрд╕рд░ рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ

рдХреНрдпрд╛ рдпрд╣ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рд╣реИ, рдпрд╛рдиреА рдХреНрдпрд╛ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдореЗрдВ рдРрд╕реА рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рд╣реИрдВ рдЬреЛ рдЕрдиреБрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрдард┐рди рд╣реИрдВ рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдЕрд╕рдВрднрд╡ рднреА рд╣реИрдВ рдЬрдм рдЖрдВрддрд░рд┐рдХ рдХреЙрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрд▓рдПрд▓рд╡реАрдПрдо?
рдпрд╛ рдпрд╣ рд╕рд┐рд░реНрдл рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдмрд╣реБрдд рд╡рд┐рд╢реЗрд╖-рдЖрд╡рд░рдг рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ?

рдФрд░ рд╣рдо рдПрдХ no_std рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рд╣реИрдВ

рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП, рд╡рд┐рдХреНрд░реЗрддрд╛ рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ std::arch рдФрд░ core::arch (рдкреВрд░реНрд╡ рдПрдХ рдкреБрди: рдирд┐рд░реНрдпрд╛рдд рд╣реИ)ред

x86-рдЗрдВрдЯрд░рдкреНрдЯ рдХреЙрд▓рд┐рдВрдЧ рдХрдиреНрд╡реЗрдВрд╢рди рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЯреНрд░реИрдк рдлреНрд░реЗрдо рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдпреЛрдЬрди рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░рд╕реНрдкрд░ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ

cc @rkruppe рдХреНрдпрд╛ рдЗрд╕реЗ LLVM рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

@eddyb рд╕рд╣реА; рд╣рдореЗрдВ рдЖрдИрдПрд╕рдП рдХреЗ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рд╕рдмрд╕реЗрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореБрдЭреЗ рдбрд░ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕ рд╕рдордп рд╣рдорд╛рд░реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдХреБрдЫ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддрд╛ред

рдХреНрдпрд╛ рдпрд╣ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рд╣реИ, рдпрд╛рдиреА рдХреНрдпрд╛ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдореЗрдВ рдРрд╕реА рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рд╣реИрдВ рдЬреЛ рдЕрдиреБрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрдард┐рди рд╣реИрдВ рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдЕрд╕рдВрднрд╡ рднреА рд╣реИрдВ рдЬрдм рдЖрдВрддрд░рд┐рдХ рдХреЙрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрд▓рдПрд▓рд╡реАрдПрдо?
рдпрд╛ рдпрд╣ рд╕рд┐рд░реНрдл рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдмрд╣реБрдд рд╡рд┐рд╢реЗрд╖-рдЖрд╡рд░рдг рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ?

рдХреБрдЫ рд╣рдж рддрдХ рджреЛрдиреЛрдВ рд╕рддреНрдп рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рдВрддреБрд▓рди рдкрд░ рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдпрд╣рд╛рдВ рдЕрдзрд┐рдХ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИред рдХреБрдЫ рдЪреАрдЬреЗрдВ рдорд╛рдЗрдХреНрд░реЛрдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИрдВ рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░реЛрд╕реЗрд╕рд░ рдкреИрдХреЗрдЬ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИрдВред рдХреНрдпрд╛ рдпрд╣ рдПрдХ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рд▓рд┐рдП рдЙрдЪрд┐рдд рд╣реЛрдЧрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП) рдПрдХ рдЖрдВрддрд░рд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХреБрдЫ рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдХрд░реЗрдВ рдЬреЛ рдХрд┐ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдирд┐рд░реНрджреЗрд╢ рд╕рдмрд╕реЗрдЯ _and_ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ? рдореИрдВ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ред

рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП, рд╡рд┐рдХреНрд░реЗрддрд╛ рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рджреЛрдиреЛрдВ std::arch рдФрд░ core::arch (рдкреВрд░реНрд╡ рдПрдХ reexport рд╣реИ) рдореЗрдВ рд╣реИрдВред

рдпрд╣ рдЬрд╛рдирдирд╛ рд╡рд╛рдХрдИ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИред рдзрдиреНрдпрд╡рд╛рдж!

рдХреНрдпрд╛ рдпрд╣ рдПрдХ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рд▓рд┐рдП рдЙрдЪрд┐рдд рд╣реЛрдЧрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП) рдХреБрдЫ рдХреЛ рдПрдХ рдЖрдВрддрд░рд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдЬрд╛рдЧрд░ рдХрд░рдирд╛ рдЬреЛ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдирд┐рд░реНрджреЗрд╢ рд╕рдмрд╕реЗрдЯ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдФрд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рд╡рд╛рддрд╛рдиреБрдХреВрд▓рд┐рдд рд╣реИ? рдореИрдВ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ред

рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, xsave x86 рдирд┐рд░реНрджреЗрд╢ core::arch рдореЗрдВ рд▓рд╛рдЧреВ рдФрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рд╕рднреА рдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд░ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЛ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдореЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

@gnzlbg xsave рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ; рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдорддрд▓рдм xsaves ?

рдореИрдВрдиреЗ https://rust-lang-nursery.github.io/stdsimd/x86_64/stdsimd/arch/x86_64/index.html рдФрд░ рдЕрдкрдиреЗ рддреНрд╡рд░рд┐рдд рд╕реНрд╡реАрдк рдореЗрдВ рджреЗрдЦреЗ рдЧрдП рдПрдХрдорд╛рддреНрд░ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реА (рдореИрдВрдиреЗ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╕рдВрдкреВрд░реНрдг рдЦреЛрдЬ) xsaves , xsaves64 , xrstors , рдФрд░ xrstors64 ред рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рд╡реЗ рдЖрдВрддрд░рд┐рдХ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╕рд╛рдорд╛рдиреНрдп XSAVE* рдкрд░рд┐рд╡рд╛рд░ рдореЗрдВ рдЖрддреЗ рд╣реИрдВ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореЛрдб рдореЗрдВ рдЕрдкрд╡рд╛рдж рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдХреБрдЫ рд▓реЛрдЧ рд╡рд╛рд╕реНрддрд╡рд┐рдХ-рдореЛрдб рдХреЛрдб рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд▓реИрдВрдЧ/рдПрд▓рдПрд▓рд╡реАрдПрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

@dancrossnyc рд╣рд╛рдБ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рд╡реЗ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдореЗрд░рд╛ рдорддрд▓рдм рдерд╛ (рд╣рдо xsave , xsaves , xsaveopt , ... xsave рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ: https: //github.com/rust-lang-nursery/stdsimd/blob/master/coresimd/x86/xsave.rs)ред

рдпреЗ core , рдЗрд╕рд▓рд┐рдП рдЖрдк рдЗрдирдХрд╛ рдЙрдкрдпреЛрдЧ x86 рдХреЗ рд▓рд┐рдП OS рдХрд░реНрдиреЗрд▓ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рд╕реНрдерд╛рди рдореЗрдВ рд╡реЗ рдмреЗрдХрд╛рд░ рд╣реИрдВ AFAICT (рд╡реЗ рд╣рдореЗрд╢рд╛ рдПрдХ рдЕрдкрд╡рд╛рдж рдЙрдард╛рдПрдВрдЧреЗ), рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ core рдореЗрдВ рдЕрдВрддрд░ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рд╣рдо рдЙрдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ core рдореЗрдВ рдЙрдЬрд╛рдЧрд░ рдХрд░ рд╕рдХрддреЗ рдереЗ рдФрд░ std рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рд╡реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдерд┐рд░ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╡рд╣ рдЬрд╣рд╛рдЬ рд░рд╡рд╛рдирд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИред рдХреМрди рдЬрд╛рдирддрд╛ рд╣реИ, рд╢рд╛рдпрдж рдХреБрдЫ рдУрдПрд╕ рдХрд┐рд╕реА рджрд┐рди рд░рд┐рдВрдЧ 0 рдореЗрдВ рд╕рдмрдХреБрдЫ рдЪрд▓рд╛рддрд╛ рд╣реИ, рдФрд░ рдЖрдк рдЙрдиреНрд╣реЗрдВ рд╡рд╣рд╛рдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ...

@gnzlbg рдореИрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдХреНрдпреЛрдВ xsaveopt рдпрд╛ xsave рдЙрдкрдпреЛрдХреНрддрд╛ рд╕реНрдерд╛рди рдореЗрдВ рдПрдХ рдЕрдкрд╡рд╛рдж рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛: xsaves рдкрд░рд┐рд╡рд╛рд░ рдореЗрдВ рдПрдХрдорд╛рддреНрд░ рдРрд╕рд╛ рдкрд░рд┐рд╡рд╛рд░ рд╣реИ рдЬрд┐рд╕реЗ рдЕрдкрд╡рд╛рдж рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (#GP рдпрджрд┐ CPL>0), рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рдХреЗрд╡рд▓ рд╕рдВрд░рдХреНрд╖рд┐рдд рдореЛрдб рдореЗрдВ (SDM vol.1 ch. 13; vol.2C ch. 5 XSAVES)ред xsave рдФрд░ xsaveopt рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИрдВ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдкреВрд░реНрд╡-рдЦрд╛рд▓реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рд╕реНрдерд╛рди рдзрд╛рдЧреЗ, рдЗрд╕рд▓рд┐рдП рдЖрдВрддрд░рд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдирдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ xsaves рд▓рд┐рдП рдЖрдВрддрд░рд┐рдХ рдпрд╛ рддреЛ рдЗрд╕рд▓рд┐рдП рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдХрд┐рд╕реА рдиреЗ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдореБрджреНрджреЗ рдХреЛ рдорд╣рд╕реВрд╕ рдХрд┐рдП рдмрд┐рдирд╛ xsave рдкрд░рд┐рд╡рд╛рд░ рд╕реЗ рд╕рдм рдХреБрдЫ рдЬреЛрдбрд╝рд╛ (рдпрд╛рдиреА, рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрдерд╛рди рд╕реЗ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдерд╛), рдпрд╛ рдХреЛрдИ рдЗрд╕реЗ рдХреЙрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореЛрдб рд╕реЗред рд╡рд╣ рдмрд╛рдж рд╡рд╛рд▓рд╛ рджреВрд░ рдХреА рдХреМрдбрд╝реА рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рд▓реЛрдЧ рдХреНрд▓реИрдВрдЧ рдФрд░ рдПрд▓рдПрд▓рд╡реАрдПрдо рдХреЗ рд╕рд╛рде рд░рд┐рдпрд▓-рдореЛрдб рдлрд░реНрдорд╡реЗрдпрд░ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВред

рдореБрдЭреЗ рдЧрд▓рдд рдордд рд╕рдордЭреЛ; core рдореЗрдВ LLVM рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдмрдврд╝рд┐рдпрд╛ рд╣реИ; рдЕрдЧрд░ рдореБрдЭреЗ rdtscp рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдПрдХ рдЙрдкрдпреЛрдЧреА рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдЙрд╕ рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг рдЕрдиреБрдХреНрд░рдо рдХреЛ рд▓рд┐рдЦрдирд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдореБрдЭреЗ рдЦреБрд╢реА рд╣реЛрдЧреАред рд▓реЗрдХрд┐рди рдЬрдм рдЖрдк рдХрд░реНрдиреЗрд▓ рдпрд╛ рдЕрдиреНрдп рдирдВрдЧреЗ-рдзрд╛рддреБ рдкрд░реНрдпрд╡реЗрдХреНрд╖реА рдкреНрд░рдХрд╛рд░ рдХреА рдЪреАрдЬрд╝ рд▓рд┐рдЦ рд░рд╣реЗ рд╣реЛрдВ рддреЛ рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рдХрд╛ рд╡рд░реНрддрдорд╛рди рд╕реЗрдЯ рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓рд░ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИред

@dancrossnyc рдЬрдм рдореИрдВрдиреЗ xsave рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рддреЛ рдореИрдВ рдХреБрдЫ рдРрд╕реЗ рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рдХреА рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рдерд╛ рдЬреЛ CPUID рдмрд┐рдЯреНрд╕ XSAVE, XSAVEOPT, XSAVEC, рдЖрджрд┐ рдХреЗ рдкреАрдЫреЗ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред рдЗрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдореЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рдПрдХ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рд▓рд┐рдП рдЙрдЪрд┐рдд рд╣реЛрдЧрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП) рдХреБрдЫ рдХреЛ рдПрдХ рдЖрдВрддрд░рд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдЬрд╛рдЧрд░ рдХрд░рдирд╛ рдЬреЛ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдирд┐рд░реНрджреЗрд╢ рд╕рдмрд╕реЗрдЯ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдФрд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рд╡рд╛рддрд╛рдиреБрдХреВрд▓рд┐рдд рд╣реИ?

рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╡реЗ рд╕реНрдерд┐рд░ рдЬрдВрдЧ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред

рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ xsaves рдХреЗ рд▓рд┐рдП рдЖрдВрддрд░рд┐рдХ рдпрд╛ рддреЛ рдЗрд╕рд▓рд┐рдП рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдХрд┐рд╕реА рдиреЗ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдХреЗ рдореБрджреНрджреЗ рдХреЛ рдорд╣рд╕реВрд╕ рдХрд┐рдП рдмрд┐рдирд╛ xsave рдкрд░рд┐рд╡рд╛рд░ рд╕реЗ рд╕рдм рдХреБрдЫ рдЬреЛрдбрд╝рд╛ рдерд╛

рдореИрдВрдиреЗ рдЗрди рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рдХреЛ рдЬреЛрдбрд╝рд╛ред рд╣рдордиреЗ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдХреЗ рдореБрджреНрджреЛрдВ рдХреЛ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╡реИрд╕реЗ рднреА рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдУрдПрд╕ рдХрд░реНрдиреЗрд▓ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП core рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ рдареАрдХ рд╣реИ рдЬреЛ рдЗрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рдФрд░ рд╡реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрдерд╛рди рдореЗрдВ рд╣рд╛рдирд┐рд░рд╣рд┐рдд рд╣реИрдВ (рдЬреИрд╕реЗ, рдпрджрд┐ рдЖрдк рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ, рдЖрдкрдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддреА рд╣реИ)ред

рд▓реЗрдХрд┐рди рдЬрдм рдЖрдк рдХрд░реНрдиреЗрд▓ рдпрд╛ рдЕрдиреНрдп рдирдВрдЧреЗ-рдзрд╛рддреБ рдкрд░реНрдпрд╡реЗрдХреНрд╖реА рдкреНрд░рдХрд╛рд░ рдХреА рдЪреАрдЬрд╝ рд▓рд┐рдЦ рд░рд╣реЗ рд╣реЛрдВ рддреЛ рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рдХрд╛ рд╡рд░реНрддрдорд╛рди рд╕реЗрдЯ рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓рд░ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИред

рд╕рд╣рдордд, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдореБрджреНрджрд╛ рдЕрднреА рднреА рдЦреБрд▓рд╛ рд╣реИ;)

@gnzlbg рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореЗрд░рд╛ рдорддрд▓рдм xsave et al рдкрд░ рдЦрд░рдЧреЛрд╢- рд╣реЛрд▓реА рджреНрд╡рд╛рд░рд╛ рдЗрд╕реЗ рдкрдЯрд░реА рд╕реЗ рдЙрддрд╛рд░рдирд╛ рдирд╣реАрдВ рд╣реИред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реВрдВ, рдХреЗрд╡рд▓ рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рдЬрд┐рдиреНрд╣реЗрдВ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рд╡реЗ xsaves рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рднреА рдпрд╣ рд╣рдореЗрд╢рд╛ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ xsaves рдФрд░ xrstors рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдирд┐рд░реНрджреЗрд╢ рд╕реЗрдЯ рдХрд╛ рдПрдХ рдмрд╣реБрдд, рдмрд╣реБрдд рдЫреЛрдЯрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИрдВ рдФрд░ рджреЛ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рдЬреЛрдбрд╝рдирд╛ рдЖрдо рддреМрд░ рдкрд░ рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ рдЧреБрдгрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдЕрд▓рдЧ рд╣реИ рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдЙрдкрдпреБрдХреНрдд рд╣реИ _in рд╕рд╛рдорд╛рдиреНрдп_ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, VMX рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ VMWRITE рдирд┐рд░реНрджреЗрд╢ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ; рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдЖрдВрддрд░рд┐рдХ рдХреБрдЫ рдРрд╕рд╛ рдХрд░реЗрдЧрд╛ рдЬреИрд╕реЗ рдирд┐рд░реНрджреЗрд╢ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ рдФрд░ рдлрд┐рд░ "рд╡рд╛рдкрд╕реА" rflags ред рдпрд╣ рдПрдХ рдЖрдВрддрд░рд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдПрдХ рдЕрдЬреАрдм рддрд░рд╣ рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЪреАрдЬ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдиреНрдпрдерд╛ рд╣рдо рдпрд╣рд╛рдБ рд╕рд╣рдордд рд╣реИрдВред

FWIW рдкреНрд░рддрд┐ std::arch RFC рд╣рдо рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреЗрд╡рд▓ std::arch рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рд╡рд┐рдХреНрд░реЗрддрд╛ рдЕрдкрдиреЗ рдПрдкреАрдЖрдИ рдореЗрдВ рдЙрдЬрд╛рдЧрд░ рдХрд░рддреЗ рд╣реИрдВред xsave рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрдВрдЯреЗрд▓ рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреЗ рд╕реА рдПрдкреАрдЖрдИ рдкрд░ рдЙрдЬрд╛рдЧрд░ рдХрд░рддрд╛ рд╣реИ , рдЗрд╕рд▓рд┐рдП рдпрд╣ рдареАрдХ рд╣реИ рдХрд┐ рд╡рд╣рд╛рдВ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ рдХрд┐рд╕реА рдРрд╕реЗ рд╡рд┐рдХреНрд░реЗрддрд╛ рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЙрдЬрд╛рдЧрд░ рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ, рддреЛ рдПрдХ рдореБрджреНрджрд╛ рдЦреЛрд▓реЗрдВ, рдЪрд╛рд╣реЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдореЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рдпрд╛ рдирд╣реАрдВ, рдпрд╣ рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИред

рдпрджрд┐ рд╡рд┐рдХреНрд░реЗрддрд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдВрддрд░рд┐рдХ рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ std::arch рдЗрд╕рдХреЗ рд▓рд┐рдП рдЬрдЧрд╣ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрдИ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ (рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА, рдЧреНрд▓реЛрдмрд▓ рдПрдПрд╕рдПрдо, рдХреЙрд▓рд┐рдВрдЧ рд╕реА, ...)ред

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореИрдВ рд╕рдордЭ рдЧрдпрд╛ рдХрд┐ рдЖрдкрдиреЗ xsave рд▓рд┐рдП рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рд▓рд┐рдЦрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рдЗрдВрдЯреЗрд▓ рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рд╣реИ; рдореЗрд░реА рдкрд┐рдЫрд▓реА рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдЕрднреА рднреА рдЗрд╕ рдмрд╛рдд рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИрдВ рдХрд┐ рдореБрдЭреЗ рдХреНрдпреЛрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ xsaves рдПрдХ рдЖрдВрддрд░рд┐рдХ рд╣реИ (рдпрд╛ рддреЛ рдЗрдВрдЯреЗрд▓ рдореЗрдВ рдПрдХ рдХрдВрдкрд╛рдЗрд▓рд░ рд▓реЗрдЦрдХ рджреНрд╡рд╛рд░рд╛ рджреБрд░реНрдШрдЯрдирд╛ рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рдЗрд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореЛрдб рдХреЗ рд▓рд┐рдП рдЪрд╛рд╣рддрд╛ рдерд╛; рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреВрд░реНрд╡ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬрд▓реНрджреА рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛рдПрдЧрд╛ рд▓реЗрдХрд┐рди рдлрд░реНрдорд╡реЗрдпрд░ рдЕрдЬреАрдм рдЪреАрдЬреЗрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдмрд╛рдж рд╡рд╛рд▓рд╛ рдореБрдЭреЗ рдмрд┐рд▓реНрдХреБрд▓ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛)ред

рд╡реИрд╕реЗ рднреА, рд╣рд╛рдБ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ рд╕рд╣рдордд рд╣реИрдВ: рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рд╣рд░ рдЪреАрдЬ рдХреЗ рд▓рд┐рдП рдЬрдЧрд╣ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рдо asm!() рдХреЛ рд╕реНрдерд┐рд░ рдореЗрдВ рд▓реЗ рдЬрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдореИрдВ рдпрд╣ рд╕реБрдирдХрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрддреНрд╕рд╛рд╣рд┐рдд рд╣реВрдВ рдХрд┐ рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдкреНрд░рдЧрддрд┐ рд╣реЛ рд░рд╣реА рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рдХрд▓ рдХрд╣рд╛ рдерд╛, рдФрд░ рдЕрдЧрд░ рд╣рдо @Florob рдХреЛ рдзреАрд░реЗ рд╕реЗ рдЗрд╕реЗ рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рдХреЗ рдХрд░реАрдм рдмрдмрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрд╣рдиреА

asm! рд▓рд┐рдП рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рд╡рд░рдг рдФрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ:

рдЬрдм рдЖрдк рдХреЛрдИ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо, рдлрд╝рд░реНрдорд╡реЗрдпрд░, рдХреБрдЫ рдЦрд╛рд╕ рдкреНрд░рдХрд╛рд░ рдХреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдпрд╛ рдХреБрдЫ рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд┐рд╕реНрдЯрдо рдХреЛрдб рд▓рд┐рдЦ рд░рд╣реЗ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо-рд╕реНрддрд░реАрдп рдЕрд╕реЗрдВрдмрд▓реА рддрдХ рдкреВрд░реНрдг рдкрд╣реБрдБрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рдерд╛ рдЬреЛ рд╣рд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдореЗрдВ рд╣рд░ рдПрдХ рдирд┐рд░реНрджреЗрд╢ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЬрдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ (рдЬрд┐рд╕реЗ рд╣рдо рдХрд╣реАрдВ рднреА рдкрд╛рд╕ рдирд╣реАрдВ рдЖрддреЗ рд╣реИрдВ), рддреЛ рдпрд╣ рдЕрднреА рднреА рдХреБрдЫ рд╕реНрдЯрдВрдЯ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдЬреЛ рд▓реЛрдЧ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рд╕рд╛рде рдЦреАрдВрдЪрддреЗ рд╣реИрдВред

рдпрд╣рд╛рдВ рдЙрди рдЪреАрдЬреЛрдВ рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЕрдВрд╢ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдЖрдк рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рд╕рд╛рде рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рд╕реЗ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрдирдореЗрдВ рд╕реЗ рд╣рд░ рдПрдХ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рджреЗрдЦрд╛ рд╣реИ (рдпрд╛ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд▓рд┐рдЦрд╛ рд╣реИ), рдХрд╛рд▓реНрдкрдирд┐рдХ рдирд╣реАрдВред

  • рдПрдХ рдЕрд▓рдЧ рдИрдПрд▓рдПрдл рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреИрдЯрд░реНрди рдХреЗ рд╕рднреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдПрдХрддреНрд░ рдХрд░реЗрдВ, рдФрд░ рдлрд┐рд░ рд▓реЛрдбрд┐рдВрдЧ рдХреЛрдб рдореЗрдВ, рдЙрд╕ рдЕрдиреБрднрд╛рдЧ рдХреЛ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЪрд▓рд╛рдП рдЬрд╛ рд░рд╣реЗ рд╕рд┐рд╕реНрдЯрдо рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдкреИрдЪ рдХрд░реЗрдВред
  • рдПрдХ рдЬрдВрдк рдирд┐рд░реНрджреЗрд╢ рд▓рд┐рдЦреЗрдВ рдЬрд┐рд╕рдХрд╛ рд▓рдХреНрд╖реНрдп рд░рдирдЯрд╛рдЗрдо рдкрд░ рдкреИрдЪ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
  • рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдПрдХ рд╕рдЯреАрдХ рдХреНрд░рдо рдЬрд╛рд░реА рдХрд░реЗрдВ (рддрд╛рдХрд┐ рдЖрдк рдЕрд▓рдЧ-рдЕрд▓рдЧ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рдкрд░ рднрд░реЛрд╕рд╛ рди рдХрд░ рд╕рдХреЗрдВ), рддрд╛рдХрд┐ рдЖрдк рдПрдХ рдРрд╕рд╛ рдкреИрдЯрд░реНрди рд▓рд╛рдЧреВ рдХрд░ рд╕рдХреЗрдВ рдЬреЛ рдмреАрдЪ рдореЗрдВ рд╕рдВрднрд╛рд╡рд┐рдд рд░реБрдХрд╛рд╡рдЯреЛрдВ рдХреЛ рдзреНрдпрд╛рди рд╕реЗ рд╕рдВрднрд╛рд▓ рд╕рдХреЗред
  • рдПрдХ рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрддреНрд╕рд░реНрдЬрди рдХрд░реЗрдВ, рдЙрд╕рдХреЗ рдмрд╛рдж asm рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрдд рддрдХ рдПрдХ рдЫрд▓рд╛рдВрдЧ рд▓рдЧрд╛рдПрдВ, рдЙрд╕рдХреЗ рдмрд╛рдж рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдлреЙрд▓реНрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЗ рд▓рд┐рдП рдлреЙрд▓реНрдЯ рд░рд┐рдХрд╡рд░реА рдХреЛрдб рдХреЗ рдмрд╛рдж рдпрджрд┐ рдирд┐рд░реНрджреЗрд╢ рдПрдХ рдЧрд▓рддреА рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рддреЛ рдХреВрджрдиреЗ рдХреЗ рд▓рд┐рдПред
  • рдПрдХ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдЕрдиреБрд░реВрдк рдмрд╛рдЗрдЯреНрд╕ рдХрд╛ рдЕрдиреБрдХреНрд░рдо рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд░реЗрдВ рдЬрд┐рд╕реЗ рдЕрд╕реЗрдВрдмрд▓рд░ рдЕрднреА рддрдХ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рд╣реИред
  • рдХреЛрдб рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рд▓рд┐рдЦреЗрдВ рдЬреЛ рдзреНрдпрд╛рди рд╕реЗ рдПрдХ рдЕрд▓рдЧ рд╕реНрдЯреИрдХ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рджреВрд╕рд░реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред
  • рдХреЙрд▓ рдЕрд╕реЗрдВрдмрд▓реА рд░реВрдЯреАрди рдпрд╛ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдЬрд┐рдиреНрд╣реЗрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдореЗрдВ рддрд░реНрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

+1рдИ6

@eddyb

рдареАрдХ рд╣реИ, рдореИрдВ рдЖрдВрддрд░рд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛ рдФрд░ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдХрд╣рд╛рдВ рд▓реЗрддрд╛ рд╣реИред рдЖрдк рд╢рд╛рдпрдж рд╕рд╣реА рд╣реИрдВ рдФрд░ рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реИред рд╢реБрдХреНрд░рд┐рдпрд╛!

@joshtriplett рдиреЗ рдЗрд╕реЗ

loop {
   :thumbs_up:
}

рдореИрдВ рдХреБрдЫ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЛ рдЬреЛрдбрд╝реВрдВрдЧрд╛:

  • рдЕрдЬреАрдм рд╡рд╛рд╕реНрддреБрд╢рд┐рд▓реНрдк рдореЛрдб рдореЗрдВ рдХреЛрдб рд▓рд┐рдЦрдирд╛, рдЬреИрд╕реЗ BIOS/EFI рдХреЙрд▓ рдФрд░ 16-рдмрд┐рдЯ рд░реАрдпрд▓-рдореЛрдбред
  • рдЕрдЬреАрдм/рдЕрд╕рд╛рдорд╛рдиреНрдп рдПрдбреНрд░реЗрд╕рд┐рдВрдЧ рдореЛрдб рдХреЗ рд╕рд╛рде рдХреЛрдб рд▓рд┐рдЦрдирд╛ (рдЬреЛ рдЕрдХреНрд╕рд░ 16-рдмрд┐рдЯ рд░реАрдпрд▓-рдореЛрдб, рдмреВрдЯрд▓реЛрдбрд░реНрд╕ рдЗрддреНрдпрд╛рджрд┐ рдореЗрдВ рдЖрддрд╛ рд╣реИ)

@ рдорд╛рд░реНрдХ-рдЖрдИрдПрдо рдмрд┐рд▓реНрдХреБрд▓! рдФрд░ рдПрдХ рдмрд┐рдВрджреБ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдмрдирд╛рдирд╛ рдЬрд┐рд╕рдореЗрдВ рд╣рдорд╛рд░реА рджреЛрдиреЛрдВ рд╕реВрдЪрд┐рдпреЛрдВ рдореЗрдВ рдЙрдк-рдорд╛рдорд▓реЗ рд╣реИрдВ: рдХреЙрд▓рд┐рдВрдЧ рд╕рдореНрдореЗрд▓рдиреЛрдВ рдХреЗ рдмреАрдЪ рдЕрдиреБрд╡рд╛рдж рдХрд░рдирд╛ред

рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ #53118 рдмрдВрдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдкреАрдЖрд░ рдХреЛ рдпрд╣рд╛рдВ рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП рдХреЙрдкреА рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рдЕрдЧрд╕реНрдд рд╕реЗ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░реВрдк рд╕реЗ рд╕рдВрдХреЗрдд рдорд┐рд▓рддрд╛ рд╣реИ рдХрд┐ рд╕реНрдерд┐рддрд┐ рдирд╣реАрдВ рдмрджрд▓реА рд╣реИ:


рдЗрдирд▓рд╛рдЗрди рдПрд╕реЗрдореНрдмрд▓реА рдХреЗ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдЖрдореВрд▓-рдЪреВрд▓ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ; рдЕрдкрдиреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЗрд╕рдХрд╛ рддрд╛рддреНрдкрд░реНрдп рд╣реИ рдХрд┐ рд╡реНрдпрд╡рд╣рд╛рд░ рдФрд░ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ rustc рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд░рд╕реНрдЯ рднрд╛рд╖рд╛ рд╕реЗ рдмрдВрдзреА рд╣реИред рдПрд▓рдПрд▓рд╡реАрдПрдо рдЯреВрд▓рдЪреЗрди рдХреЗ рд╕рд╛рде x86/x86_64 рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдВрдкреВрд░реНрдг рджрд╕реНрддрд╛рд╡реЗрдЬ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИред рд╕реНрдкрд╖реНрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╕реНрд╡рдпрдВ рдЕрд╕реЗрдВрдмрд▓реА рдХреЛрдб рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИ, рдмрд▓реНрдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдФрд░ рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣реИред

рдЬрдм рдПрдЖрд░рдПрдо рд▓рдХреНрд╖реНрдп рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ рддреЛ рдореБрдЭреЗ рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕реНрд░реЛрдд рдирд╣реАрдВ рдорд┐рд▓рд╛, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкреНрд░рдпреЛрдЧ рдФрд░ рдПрдЖрд░рдПрдо рдЬреАрд╕реАрд╕реА рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рджрд╕реНрддрд╛рд╡реЗрдЬ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдмрд┐рдВрджреБ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрдВрдж рдкреНрд░рддреАрдд рд╣реЛрддреЗ рд╣реИрдВ:

  • рдПрдПрд╕рдПрдо рд╕рд┐рдВрдЯреИрдХреНрд╕, рдПрдЖрд░рдПрдо/рдПрдордЖрдИрдкреАрдПрд╕ (рдФрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЕрдиреНрдп рд╕реАрдЖрдИрдПрд╕рд╕реА?) рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╣рд▓реЗ рдЧрдВрддрд╡реНрдп рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЗ рд╕рд╛рде рдЗрдВрдЯреЗрд▓-рдПрд╕реНрдХ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдореИрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЛ рд╕рдордЭрддрд╛/рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдЗрдирд▓рд╛рдЗрди рдПрдПрд╕рдПрдо рдиреЗ рдПрдЯреА рдПрдВрдб рдЯреА рд╕рд┐рдВрдЯреИрдХреНрд╕ рд▓рд┐рдпрд╛ рдерд╛ рдЬрд┐рд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо/рдХрдВрдкрд╛рдЗрд▓рд░-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдореБрдЭреЗ рдХреЗрд╡рд▓ рдПрдЖрд░рдПрдо рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рд╕рд╛рде x86 рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рдирд╛рдореЛрдВ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
  • рд╕рдВрдмрдВрдзрд┐рдд рд░реВрдк рд╕реЗ, intel рд╡рд┐рдХрд▓реНрдк рдЕрдорд╛рдиреНрдп рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рдВрдХрд▓рди рдХрд░рддреЗ рд╕рдордп "рдЕрдЬреНрдЮрд╛рдд рдирд┐рд░реНрджреЗрд╢" рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред
  • рдПрдЖрд░рдПрдо рдЬреАрд╕реАрд╕реА рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рджрд╕реНрддрд╛рд╡реЗрдЬ рд╕реЗ рдЕрдиреБрдХреВрд▓рди ( thumbv7em-none-eabi рдХреЗ рдЦрд┐рд▓рд╛рдл arm-none-eabi-* рдЯреВрд▓рдЪреЗрди рдХреЗ рд╕рд╛рде рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП, рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рдкреНрд░рд╛рд░реВрдк рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдмреБрдирд┐рдпрд╛рджреА рдзрд╛рд░рдгрд╛рдПрдВ рднреА рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдпрд╣ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдЖрд░рдПрдо рдХреЗ рд▓рд┐рдП рдЖрдЙрдЯрдкреБрдЯ рд░рдЬрд┐рд╕реНрдЯрд░ (рджреВрд╕рд░рд╛ рдореИрдХреНрд░реЛ рддрд░реНрдХ) рдПрдХ рд░рдЬрд┐рд╕реНрдЯрд░ рд╕рдВрджрд░реНрдн рдХреЗ рд░реВрдк рдореЗрдВ рдЧрд┐рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╛рдиреА $0 рдкрд╣рд▓реЗ рдЖрдЙрдЯрдкреБрдЯ рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ рди рдХрд┐ рдкрд╣рд▓рд╛ рдЗрдирдкреБрдЯ рд░рдЬрд┐рд╕реНрдЯрд░, рдЬреИрд╕рд╛ рдХрд┐ x86 llvm рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣реИред
  • рд╕рд╛рде рд╣реА, рдЕрдиреНрдп рдХрдВрдкрд╛рдЗрд▓рд░-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ _not_ рдореМрдЬреВрдж рд╣реИрдВ; рдореИрдВ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдирд╛рдорд┐рдд рд╕рдВрджрд░реНрднреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рдХреЗрд╡рд▓ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП asm("mov %[result],%[value],ror #1":[result] "=r" (y):[value] "r" (x)); рдЕрдорд╛рдиреНрдп рд╣реИ)ред
  • (рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ x86/x86_64 рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдЙрджрд╛рд╣рд░рдг рдореЗрдВ $0 рдФрд░ $2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд╣реБрдд рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рдХрд┐ рдЙрди рдирдВрдмрд░реЛрдВ рдХреЛ рдХреНрдпреЛрдВ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛ред)

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрд┐рд╕ рдЪреАрдЬ рдиреЗ рдореБрдЭреЗ рд╕рдмрд╕реЗ рдЬреНрдпрд╛рджрд╛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рд╡рд╣ рд╣реИ рд╕рдорд╛рдкрди рдХрдерди:

рдПрдПрд╕рдПрдо рдХрд╛ рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди! рдореИрдХреНрд░реЛ рдПрд▓рдПрд▓рд╡реАрдПрдо рдХреЗ рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓рд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реАрдзрд╛ рдмрд╛рдзреНрдпрдХрд╛рд░реА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреНрд▓реЙрдмрд░реНрд╕, рдмрд╛рдзрд╛рдУрдВ рдЖрджрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдЙрдирдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЛ рднреА рджреЗрдЦрдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВред

рдЬреЛ рд╕рд░реНрд╡рдорд╛рдиреНрдп рд╕рддреНрдп рдкреНрд░рддреАрдд рдирд╣реАрдВ рд╣реЛрддрд╛ред

рдореИрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЛ рд╕рдордЭрддрд╛/рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдЗрдирд▓рд╛рдЗрди рдПрдПрд╕рдПрдо рдиреЗ рдПрдЯреА рдПрдВрдб рдЯреА рд╕рд┐рдВрдЯреИрдХреНрд╕ рд▓рд┐рдпрд╛ рдерд╛ рдЬрд┐рд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо/рдХрдВрдкрд╛рдЗрд▓рд░-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдореБрдЭреЗ рдХреЗрд╡рд▓ рдПрдЖрд░рдПрдо рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рд╕рд╛рде x86 рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рдирд╛рдореЛрдВ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЗрдВрдЯреЗрд▓ рдмрдирд╛рдо рдПрдЯреА рдПрдВрдб рдЯреА рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреА рдзрд╛рд░рдгрд╛ рдХреЗрд╡рд▓ x86 рдкрд░ рдореМрдЬреВрдж рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдРрд╕реЗ рдЕрдиреНрдп рдорд╛рдорд▓реЗ рднреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореБрдЭреЗ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИ)ред рдпрд╣ рдЗрд╕ рдорд╛рдпрдиреЗ рдореЗрдВ рдЕрджреНрд╡рд┐рддреАрдп рд╣реИ рдХрд┐ рд╡реЗ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рднрд╛рд╖рд╛рдПрдВ рд╣реИрдВ рдЬреЛ рд╕рдорд╛рди рдмрд╛рдЗрдирд░реА рдХреЛрдб рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдирд┐рдореЛрдирд┐рдХреНрд╕ рдХрд╛ рд╕реЗрдЯ рд╕рд╛рдЭрд╛ рдХрд░рддреА рд╣реИрдВред GNU рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдиреЗ x86 рджреБрдирд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдПрдЯреА рдПрдВрдб рдЯреА рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдкреНрд░рдореБрдЦ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЗрдирд▓рд╛рдЗрди asm рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реИред рдЖрдк рдЧрд▓рдд рд╣реИрдВ рдХрд┐ рдпрд╣ рдПрд▓рдПрд▓рд╡реАрдПрдо рдХреЗ рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓рд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реАрдзрд╛ рдмрд╛рдзреНрдпрдХрд╛рд░реА рд╣реИ рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ рдЯреЗрдХреНрд╕реНрдЯ рдЕрд╕реЗрдВрдмрд▓реА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдЬреНрдпрд╛рджрд╛рддрд░ рд╕рд╛рджрд╛ рдЯреЗрдХреНрд╕реНрдЯ (рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмрд╛рдж) рдбрдВрдк рдХрд░рддрд╛ рд╣реИред рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдЖрдЬ рдХреЗ asm!() рд▓рд┐рдП рдпрд╛ рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрджреНрд╡рд┐рддреАрдп (рдпрд╛ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рднреА) рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИ рдФрд░ x86 рджреБрдирд┐рдпрд╛ рд╕реЗ рдкрд░реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд░реНрдерд╣реАрди рд╣реИред

рд╕рдВрдмрдВрдзрд┐рдд рд░реВрдк рд╕реЗ, intel рд╡рд┐рдХрд▓реНрдк рдЕрдорд╛рдиреНрдп рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рдВрдХрд▓рди рдХрд░рддреЗ рд╕рдордп "рдЕрдЬреНрдЮрд╛рдд рдирд┐рд░реНрджреЗрд╢" рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред

рдпрд╣ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд "рдЧреВрдВрдЧрд╛"/рд╕рд╛рдзрд╛рд░рдг рд╕рд╛рджрд╛ рдкрд╛рда рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХрд╛ рдкреНрд░рддреНрдпрдХреНрд╖ рдкрд░рд┐рдгрд╛рдо рд╣реИред рдЪреВрдВрдХрд┐ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ .intel_syntax рдирд┐рд░реНрджреЗрд╢ рдЕрд╕рдорд░реНрдерд┐рдд рд╣реИред рдЬреАрд╕реАрд╕реА рдХреЗ рд╕рд╛рде рдЗрдВрдЯреЗрд▓-рд╕реНрдЯрд╛рдЗрд▓ рдЗрдирд▓рд╛рдЗрди-рдПрдПрд╕рдПрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдкреБрд░рд╛рдирд╛ рдФрд░ рдкреНрд░рд╕рд┐рджреНрдз рдХрд╛рдордХрд╛рдЬ рд╣реИ (рдЬреЛ рдПрдЯ рд╕реНрдЯрд╛рдЗрд▓ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд░рддрд╛ рд╣реИ): рдХреЛрдИ рдЗрдирд▓рд╛рдЗрди рдПрдПрд╕рдПрдо рдмреНрд▓реЙрдХ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдмрд╕ .intel_syntax рд▓рд┐рдЦ рджреЗрдЧрд╛, рдлрд┐рд░ рдХреБрдЫ рдЗрдВрдЯреЗрд▓- рд╕реНрдЯрд╛рдЗрд▓ рдПрдПрд╕рдПрдо рдФрд░ рдЕрдВрдд рдореЗрдВ .att_syntax рдХреЗ рд╕рд╛рде рдЕрд╕реЗрдВрдмрд▓рд░ рдХреЛ рд╡рд╛рдкрд╕ рдПрдЯреАрдЯреА рдореЛрдб рдореЗрдВ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдкреНрдд рдХрд░реЗрдВ рддрд╛рдХрд┐ рдпрд╣ рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ (рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд) рдХрдВрдкрд╛рдЗрд▓рд░-рдЬреЗрдирд░реЗрдЯ рдХреЛрдб рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░ рд╕рдХреЗред рдпрд╣ рдПрдХ рдЧрдВрджрд╛ рд╣реИрдХ рд╣реИ рдФрд░ рдореБрдЭреЗ рдпрд╛рдж рд╣реИ рдХрд┐ рдХрдо рд╕реЗ рдХрдо рдПрд▓рдПрд▓рд╡реАрдПрдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдХреБрдЫ рдЕрдЬреАрдм рд╡рд┐рдЪрд┐рддреНрд░рддрд╛рдПрдВ рдереАрдВ, рдЗрд╕рд▓рд┐рдП рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рдЕрдВрддрддрдГ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЕрдлрд╕реЛрд╕ рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рд╕рд╣реА рддрд░реАрдХрд╛ "intel" рд╡рд┐рдХрд▓реНрдк рдХреЛ rustc рд╕реЗ рд╣рдЯрд╛рдирд╛ рд╣реИред

рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рдкреНрд░рд╛рд░реВрдк рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдмреБрдирд┐рдпрд╛рджреА рдзрд╛рд░рдгрд╛рдПрдВ рднреА рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИрдВ

рдЖрдкрдХрд╛ рдЕрд╡рд▓реЛрдХрди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣реА рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдмрд╛рдЗрдирд░реА рдкреНрд░рд╛рд░реВрдк рдФрд░ рдЕрдкрдиреА рдЕрд╕реЗрдВрдмрд▓реА рднрд╛рд╖рд╛ рджреЛрдиреЛрдВ рдмрдирд╛рддрд╛ рд╣реИред рд╡реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд╣реИрдВ рдФрд░ (рдЬреНрдпрд╛рджрд╛рддрд░) рд╕рдВрдХрд▓рдХ рджреНрд╡рд╛рд░рд╛ рдЕрд╕рдВрд╕рд╛рдзрд┐рдд рд╣реИрдВ - рдЬреЛ рдХрдЪреНрдЪреЗ рдЕрд╕реЗрдВрдмрд▓рд░ рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ рд╕рдВрдкреВрд░реНрдг рдмрд┐рдВрджреБ рд╣реИ!

рдореИрдВ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдирд╛рдорд┐рдд рд╕рдВрджрд░реНрднреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рдХреЗрд╡рд▓ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛

рдЕрдлрд╕реЛрд╕ рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ рдПрд▓рдПрд▓рд╡реАрдПрдо рдХреЗ рдЗрдирд▓рд╛рдЗрди рдПрдПрд╕рдПрдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмреАрдЪ рдХрд╛рдлреА рдмрдбрд╝рд╛ рдмреЗрдореЗрд▓ рд╣реИ рдЬреЛ рдХрд┐ рд░рд╕реНрдЯрдХ рдЙрдЬрд╛рдЧрд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЬреАрд╕реАрд╕реА (рдЬреЛ рдХреНрд▓реИрдВрдЧ рдЕрдиреБрдХрд░рдг рдХрд░рддрд╛ рд╣реИ) рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмреАрдЪ рд╣реИред asm!() рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреЗ рдирд┐рд░реНрдгрдп рдХреЗ рдмрд┐рдирд╛ рдЗрд╕рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХрдо рдкреНрд░реЗрд░рдгрд╛ рд╣реИ - рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВрдиреЗ рдмрд╣реБрдд рд╕рдордп рдкрд╣рд▓реЗ рдкреНрд░рдореБрдЦ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд┐рдпрд╛ asm!() рдХреЗ рд╕рд╛рде рдлрдВрд╕рдиреЗ рд╡рд╛рд▓реЗ рд╣реИрдВред рд╕рднреНрдп рдХрд╛рдордХрд╛рдЬ рд╣реИрдВ:

  • рдЗрд╖реНрдЯрддрдо рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рдХ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░реЗрдВ (рдереЛрдбрд╝реА рд╕реА рдХреБрд╣рдиреА рд╕реЗ рдЖрдк рдЖрдорддреМрд░ рдкрд░ рд╡рд╣реА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдк рдХрднреА рднреА рд╕реНрд╡рдпрдВ рдХрдЪреНрдЪреА рдЕрд╕реЗрдВрдмрд▓реА рд▓рд┐рдЦреЗ рдмрд┐рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ)
  • рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдПрдХ рдФрд░ рдХрд╛рдлреА рд╕реБрдВрджрд░ рд╕рдорд╛рдзрд╛рди рдЬреЛ рд▓рдЧрднрдЧ рд╣рд░ рддрд░рд╣ рд╕реЗ рдЗрдирд▓рд╛рдЗрди рдПрдПрд╕рдПрдо рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ (рдЬрдм рддрдХ рдЖрдкрдХреЛ рдирд┐рд░реНрджреЗрд╢ рдЪрдпрди рдФрд░ рд╢реЗрдбреНрдпреВрд▓рд┐рдВрдЧ рдкрд░ рд╕рдЯреАрдХ рдирд┐рдпрдВрддреНрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ)
  • рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЗрдирд▓рд╛рдЗрди рдПрдПрд╕рдПрдо рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП cc рдХреНрд░реЗрдЯ рдХреЛ build.rs рд╕реЗ рдЖрдордВрддреНрд░рд┐рдд рдХрд░реЗрдВ

    • рдореВрд▓ рд░реВрдк рд╕реЗ рдХреЗрд╡рд▓ build.rs рд╕реЗ рдЕрдкрдиреА рдкрд╕рдВрдж рдХреЗ рдХрд┐рд╕реА рднреА рдЕрд╕реЗрдВрдмрд▓рд░ рдХреЛ рдЖрдордВрддреНрд░рд┐рдд рдХрд░реЗрдВ, рдПрдХ рд╕реА рдХрдВрдкрд╛рдЗрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдУрд╡рд░рдХрд┐рд▓ рдХреА рддрд░рд╣ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ build.rs рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдкрд░реЗрд╢рд╛рдиреА рд╕реЗ рдмрдЪрд╛рддрд╛ рд╣реИ

рдпреЗ рд╕рдорд╛рдзрд╛рди рдмрд╣реБрдд рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд┐рдирд╛рд░реЗ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рд╕реЗрдЯ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рднреА рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдорд╛рд░рддреЗ рд╣реИрдВ (рд╕реМрднрд╛рдЧреНрдп рд╕реЗ рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ) рддреЛ рдЖрдк рднрд╛рдЧреНрдп рд╕реЗ рдмрд╛рд╣рд░ рд╣реИрдВред

рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдкреНрд░рд▓реЗрдЦрди рдХрд╛рдлреА рдХрдордЬреЛрд░ рд╣реИ рд▓реЗрдХрд┐рди рдЗрдирд▓рд╛рдЗрди рдПрдПрд╕рдПрдо рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдХрд┐рд╕реА рднреА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдпрд╣ рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рд╢рд╛рдпрдж рдЖрдкрдХреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП ред рдореБрдЭреЗ рдЧрд▓рдд рдордд рд╕рдордЭреЛ - рдЖрдкрдХреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдФрд░ рд╕реАрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди asm!() рдЕрд╕реНрдерд┐рд░ рдФрд░ рдЙрдкреЗрдХреНрд╖рд┐рдд рд╣реИ рдФрд░ рдХреНрдпреЛрдВрдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫреЗ рдХрд╛рдордХрд╛рдЬ рд╣реИрдВ, рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ рдореИрдВ рдХрд┐рд╕реА рднреА рдЧрдВрднреАрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЦрд┐рд▓рд╛рдл рджреГрдврд╝рддрд╛ рд╕реЗ рд╕рд▓рд╛рд╣ рджреВрдВрдЧрд╛ .

C рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЗрдирд▓рд╛рдЗрди asm . рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП build.rs рд╕реЗ cc рдХреНрд░реЗрдЯ рдХреЛ рдЗрдирд╡рд╛рдЗрдЯ рдХрд░реЗрдВ

рдЖрдк рд╕рд╛рджреЗ рдЕрд╕реЗрдВрдмрд▓реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП cc рд╕реЗ build.rs рдЯреЛрдХрд░рд╛ рднреА рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдЕрдзрд┐рдХрддрдо рдорд╛рддреНрд░рд╛ рдореЗрдВ рдирд┐рдпрдВрддреНрд░рдг рджреЗрддрд╛ рд╣реИред рдореИрдВ рджреГрдврд╝рддрд╛ рд╕реЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реВрдВ рдпрджрд┐ рдЗрд╕рдХреЗ рдКрдкрд░ рдХреЗ рджреЛ "рд╕рдорд╛рдзрд╛рди" рдЖрдкрдХреЗ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

@ рдореБрдЦреНрдп-- рд▓рд┐рдЦрд╛ рд╣реИ:

рдпреЗ рд╕рдорд╛рдзрд╛рди рдмрд╣реБрдд рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд┐рдирд╛рд░реЗ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рд╕реЗрдЯ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рднреА рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдорд╛рд░рддреЗ рд╣реИрдВ (рд╕реМрднрд╛рдЧреНрдп рд╕реЗ рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ) рддреЛ рдЖрдк рднрд╛рдЧреНрдп рд╕реЗ рдмрд╛рд╣рд░ рд╣реИрдВред

рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, рдкреВрд░реА рддрд░рд╣ рд╕реЗ рднрд╛рдЧреНрдп рд╕реЗ рдмрд╛рд╣рд░ рдирд╣реАрдВред рдЖрдкрдХреЛ рдмрд╕ рд░рд╕реНрдЯ рдХреЗ inline asm ред рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдХрд┐рдирд╛рд░реЗ рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рд╕реВрдЪреАрдмрджреНрдз рдХрд╛рдордХрд╛рдЬ рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдпрд╣рд╛рдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ

(рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИ: рдореИрдВ рдХрд┐рд╕реА рджрд┐рди рд╕реА рдХреЗ рдмрдЬрд╛рдп рд░рд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд┐рд╕реНрдЯрдо рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрдВрдкреНрдпреВрдЯрд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдФрд░ рд╕рд╛рдорд╛рди рдХреЛ рдкрдврд╝рд╛рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдирд╣реАрдВ рд╣реЛрдиреЗ рд╕реЗ рдпрд╣ рдФрд░ рдЕрдзрд┐рдХ рдЕрдЬреАрдм рд╣реЛ рдЬрд╛рдПрдЧрд╛ред)

рдХрд╛рд╢, рд╣рдо рд░рд╕реНрдЯ рдореЗрдВ рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрддреЗ рдФрд░ рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рдЬрд▓реНрдж рд╕реЗ рдЬрд▓реНрдж рд╕реНрдерд┐рд░ рдХрд░рддреЗред рд╢рд╛рдпрдж рдпрд╣ рд░рд╕реНрдЯ 2019 рдХрд╛ рд▓рдХреНрд╖реНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВ рдЖрдкрдХреА рдЕрдЪреНрдЫреА рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдкрд╣рд▓реЗ рд╕реВрдЪреАрдмрджреНрдз рдХрд┐рд╕реА рднреА рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдареАрдХ рд╣реВрдВ: рдореИрдВ рдЙрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд░рд╣ рд╕рдХрддрд╛ рд╣реВрдВред рдЕрд╕реЗрдВрдмрд▓реА рдХреЛрдб рдХреЛ рдЗрдирд▓рд╛рдЗрди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рд╣рд░ рдЬрдЧрд╣ C рдХреЗ рдмрдЬрд╛рдп рд░рд╕реНрдЯ рд▓рд┐рдЦрдиреЗ рдХреА рдПрдХ рд╢рд░реНрдд рд╣реИ: рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рд╕реНрдерд┐рд░ рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдХрд╛рд╢, рд╣рдо рд░рд╕реНрдЯ рдореЗрдВ рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрддреЗ рдФрд░ рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рдЬрд▓реНрдж рд╕реЗ рдЬрд▓реНрдж рд╕реНрдерд┐рд░ рдХрд░рддреЗред рд╢рд╛рдпрдж рдпрд╣ рд░рд╕реНрдЯ 2019 рдХрд╛ рд▓рдХреНрд╖реНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдХреГрдкрдпрд╛ рд░рд╕реНрдЯ 2019 рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рд▓рд┐рдЦреЗрдВ рдФрд░ рдЗрд╕ рдЪрд┐рдВрддрд╛ рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░реЗрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рд╣рдо рдореЗрдВ рд╕реЗ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рд░реЛрдбрдореИрдк рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдКрдкрд░ рдореЗрд░реА рдЯрд┐рдкреНрдкрдгреА рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП - рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдпрд╣ рдирд╣реАрдВ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ asm!(..) рдореИрдХреНрд░реЛ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ "рдЧрд╣рд░рд╛рдИ рд╕реЗ" рдХреИрд╕реЗ рдкрд╛рд░реНрд╕/рдмрд╛рддрдЪреАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдВ x86 рдФрд░ MIPS/ARM рдЕрд╕реЗрдВрдмрд▓реА рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реВрдВ рд▓реЗрдХрд┐рди рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ llvm рдХрд╛ рдЕрдкрдирд╛ рдЕрд╕реЗрдВрдмрд▓реА рднрд╛рд╖рд╛ рдкреНрд░рд╛рд░реВрдк рдерд╛ред рдореИрдВрдиреЗ рдкрд╣рд▓реЗ x86 рдХреЗ рд▓рд┐рдП рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдерд╛ рдХрд┐ рд╕реА рдФрд░ рдПрдПрд╕рдПрдо рдХреЛ рдмреНрд░рд┐рдЧреЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдПрд╕рдПрдо рдХрд╛ рдХрдореАрдирд╛рдХрд░рдг рдХрд┐рд╕ рд╣рдж рддрдХ рдЪрд▓рд╛ рдЧрдпрд╛ред рд░рд╕реНрдЯ рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рд╕реЗрдХреНрд╢рди рдореЗрдВ рд╢рдмреНрджреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдореЗрд░рд╛ рдЕрдиреБрдорд╛рди (рдЕрдм рдЕрдорд╛рдиреНрдп) рдпрд╣ рдерд╛ рдХрд┐ LLVM рдХрд╛ рдЕрдкрдирд╛ ASM рдкреНрд░рд╛рд░реВрдк рдерд╛ рдЬрд┐рд╕реЗ рдпрд╛ рддреЛ at&t рдпрд╛ рдЗрдВрдЯреЗрд▓ рдореЛрдб рдореЗрдВ x86 рдЕрд╕реЗрдВрдмрд▓реА рдХреА рдирдХрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдЖрд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рдП рдЧрдП x86 рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рдерд╛ред

(рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдореИрдХреНрд░реЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рд╕реЗ рдореБрдЭреЗ рдХреНрдпрд╛ рдорджрдж рдорд┐рд▓реА, рдЬрд┐рд╕рдиреЗ рд╕реНрдкрд╖реНрдЯ рдХрд┐рдпрд╛ рдХрд┐ рдХреНрдпрд╛ рдЪрд▓ рд░рд╣рд╛ рдерд╛)

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрд╕ рдкреГрд╖реНрда рдкрд░ рдХрдо рдЕрдореВрд░реНрддрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХрд░реЗрдВ рдХрд┐ рдПрд▓рдПрд▓рд╡реАрдПрдо рджреНрд╡рд╛рд░рд╛ рдХреНрдпрд╛ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕реАрдзреЗ рдПрдПрд╕рдПрдо рдХреЗ рд░реВрдк рдореЗрдВ рдХреНрдпрд╛ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА рдЬрд╛рддреА рд╣реИред рдЬрдВрдЧ рдХреЗ рд▓рд┐рдП рдХреМрди рд╕реЗ рд╣рд┐рд╕реНрд╕реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИрдВ, рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЪрд▓рд╛рдП рдЬрд╛ рд░рд╣реЗ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдХреЗ рд▓рд┐рдП рдХреМрди рд╕реЗ рд╣рд┐рд╕реНрд╕реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИрдВ, рдФрд░ рдХреМрди рд╕реЗ рд╣рд┐рд╕реНрд╕реЗ рдЧреЛрдВрдж рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВ рдЬреЛ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕рд╛рде рд░рдЦрддрд╛ рд╣реИред

рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЗрдирд▓рд╛рдЗрди рдПрдПрд╕рдПрдо рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП cc рдХреНрд░реЗрдЯ рдХреЛ build.rs рд╕реЗ рдЖрдордВрддреНрд░рд┐рдд рдХрд░реЗрдВ

рдХреНрд░реЙрд╕-рд▓реИрдВрдЧреНрд╡реЗрдЬ рдПрд▓рдЯреАрдУ рдкрд░ рд╣рд╛рд▓ рдХреА рдкреНрд░рдЧрддрд┐ рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕ рдПрд╡реЗрдиреНрдпреВ рдХреЗ рдХреБрдЫ рдбрд╛рдЙрдирд╕рд╛рдЗрдбреНрд╕ рдХреЛ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕ "рдмрд╛рд╣рд░реА рдЕрд╕реЗрдВрдмрд▓реА рдмреНрд▓реЙрдм" рдХреЛ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред ( рд╢рд╛рдпрдж рдирд╣реАрдВ )

рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЗрдирд▓рд╛рдЗрди рдПрдПрд╕рдПрдо рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП cc рдХреНрд░реЗрдЯ рдХреЛ build.rs рд╕реЗ рдЖрдордВрддреНрд░рд┐рдд рдХрд░реЗрдВ

рдХреНрд░реЙрд╕-рд▓реИрдВрдЧреНрд╡реЗрдЬ рдПрд▓рдЯреАрдУ рдкрд░ рд╣рд╛рд▓ рдХреА рдкреНрд░рдЧрддрд┐ рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕ рдПрд╡реЗрдиреНрдпреВ рдХреЗ рдХреБрдЫ рдбрд╛рдЙрдирд╕рд╛рдЗрдбреНрд╕ рдХреЛ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕ "рдмрд╛рд╣рд░реА рдЕрд╕реЗрдВрдмрд▓реА рдмреНрд▓реЙрдм" рдХреЛ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдЕрдЧрд░ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рдореИрдВ рд╕реА рдореЗрдВ рдЕрдкрдиреА рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдирд╣реАрдВ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдореИрдВ рдЗрд╕реЗ рдЬрдВрдЧ рдореЗрдВ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред :-)

рдореИрдВ рд╕реА рдореЗрдВ рдЕрдкрдиреА рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдирд╣реАрдВ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдЖрдк .s рдФрд░ .S рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕реАрдзреЗ рд╕рдВрдХрд▓рд┐рдд рдФрд░ рд▓рд┐рдВрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрд╣ рдЯреЛрдХрд░рд╛ рджреЗрдЦреЗрдВ ), рдЬреЛ рдореЗрд░реА рдкреБрд╕реНрддрдХ рдореЗрдВ рд╕реА рд╕реЗ рдХрд╛рдлреА рджреВрд░ рд╣реИрдВред :)

рдЕрдЧрд░ рдЗрд╕ рдПрд╡реЗрдиреНрдпреВ рдХреЗ рдХреБрдЫ рдбрд╛рдЙрдирд╕рд╛рдЗрдбреНрд╕ рдХреЛ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХреНрд░реЙрд╕-рд▓реИрдВрдЧреНрд╡реЗрдЬ рдПрд▓рдЯреАрдУ рдПрд▓рдПрд▓рд╡реАрдПрдо рдЖрдИрдЖрд░ рд╣реЛрдиреЗ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрд╕реЗрдВрдмрд▓реА рдЗрд╕реЗ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХрд░реЗрдЧреАред

рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХреНрд░реЙрд╕-рд▓реИрдВрдЧреНрд╡реЗрдЬ рдПрд▓рдЯреАрдУ рдПрд▓рдПрд▓рд╡реАрдПрдо рдЖрдИрдЖрд░ рд╣реЛрдиреЗ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрд╕реЗрдВрдмрд▓реА рдЗрд╕реЗ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХрд░реЗрдЧреАред

рдЖрдк LLVM IR рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рдореЙрдбреНрдпреВрд▓ рд▓реЗрд╡рд▓ рдЕрд╕реЗрдВрдмрд▓реА рдореЗрдВ рд╕реНрдЯрдл рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЛ рдкрддрд╛ рд╣реИ рдХрд┐ рдирд╡реАрдирддрдо рдкреНрд░рд╕реНрддрд╛рд╡/рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреНрдпрд╛ рд╣реИ? рдЪреВрдВрдХрд┐ рд╡рд░реНрд╖ рдХрд╛ рд╡рд┐рд╖рдп "рдкрд░рд┐рдкрдХреНрд╡рддрд╛ рдФрд░ рдЬреЛ рд╣рдордиреЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ рд╣реИ рдЙрд╕реЗ рдкреВрд░рд╛ рдХрд░рдирд╛" рд╣реИ, рдпрд╣ рдЕрдВрддрддрдГ asm рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╢рд╛рдирджрд╛рд░ рдЕрд╡рд╕рд░ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред

рдкрд┐рдЫрд▓реЗ рдлрд░рд╡рд░реА рдореЗрдВ рдПрдХ рдирдП (рд╕реНрдерд┐рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП) рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреА рдЕрд╕реНрдкрд╖реНрдЯ рдпреЛрдЬрдирд╛рдУрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рдереА: https://paper.dropbox.com/doc/FFI-5NmXV30TGiSsr9dIxpqpq

рдЙрди рдиреЛрдЯреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ @joshtriplett рдФрд░ @Amanieu рдиреЗ RFC рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдЗрди рдЕрдк рдХрд┐рдпрд╛ред

рдирдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреА рд╕реНрдерд┐рддрд┐ рдХреНрдпрд╛ рд╣реИ?

рдЗрд╕реЗ RFC'ed рдФрд░ рд░рд╛рдд рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

рдкрд┐рдВрдЧ @joshtriplett @Amanieu рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдореИрдВ рдпрд╣рд╛рдВ рдЪреАрдЬреЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ! рдореИрдВ рд╢реАрдШреНрд░ рд╣реА рд╕рдВрдкрд░реНрдХ рдореЗрдВ рд░рд╣реВрдВрдЧрд╛ред

@cramertj AFAICT рдХреЛрдИ рднреА рдЗрд╕реЗ рдЖрдЧреЗ рдмрдврд╝рд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рдЕрдирдмреНрд▓реЙрдХ рд╣реИ рдФрд░ рдХрд┐рд╕реА рдХреЗ рдХрджрдо рдЙрдард╛рдиреЗ рдФрд░ рдХрд╛рдо рдореЗрдВ рд▓рдЧрд╛рдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИред рд╕рдордЧреНрд░ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЛ рд╕реНрдХреЗрдЪ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдкреНрд░реА-рдЖрд░рдПрдлрд╕реА рд╣реИ, рдФрд░ рдЕрдЧрд▓реЗ рдЪрд░рдг рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдФрд░ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдпрд╛ рддреЛ рдПрдХ рдкреНрд░реЛ рдореИрдХреНрд░реЛ рдХреЗ рд░реВрдк рдореЗрдВ, рдПрдХ рдХрд╛рдВрдЯрд╛ рдореЗрдВ, рдпрд╛ рдПрдХ рдЕрд▓рдЧ рдЕрд╕реНрдерд┐рд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВред

рдХреЛрдИ рд╢рд╛рдпрдж рдЙрд╕ рдкреВрд░реНрд╡-рдЖрд░рдПрдлрд╕реА рдХреЛ рдЙрдЪрд┐рдд рдЖрд░рдПрдлрд╕реА рдореЗрдВ рдмрджрд▓рдиреЗ рдФрд░ рдЗрд╕реЗ рдЬрдорд╛ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд┐рдирд╛ рдРрд╕рд╛ рдЖрд░рдПрдлрд╕реА рдЖрд╢реНрд╡рд╕реНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред


рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рд╕реНрдкрд╖реНрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкреВрд░реНрд╡-рдЖрд░рдПрдлрд╕реА рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕рдордЭрд╛рддрд╛ рд╣реВрдВ:

рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдк рд╕реЗ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдореИрдкрд┐рдВрдЧ рдХреЛ рдЙрдкрдпреБрдХреНрдд рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ (cf. llvm-constraint 6)

рдЬрд╣рд╛рдВ рд▓реИрдВрдЧ-рд░реЗрдл рдореЗрдВ рджрд░реНрдЬрдиреЛрдВ рдЖрд░реНрдХ-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░рдЬрд┐рд╕реНрдЯрд░ рд╡рд░реНрдЧ рд╣реИрдВред рдПрдХ рдЖрд░рдПрдлрд╕реА рдЗрди рд╕рднреА рдХреЛ рдмрд╛рд╣рд░ рдирд╣реАрдВ рдирд┐рдХрд╛рд▓ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИ рдХрд┐ рд╡реЗ рд╕рднреА рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдЙрдиреНрд╣реЗрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╛ рд╕рд╛рд░реНрдердХ рд╣реИрдВ, рдпрд╛ рдПрд▓рдПрд▓рд╡реАрдПрдо рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд "рд╕реНрдерд┐рд░" рд╣реИрдВ, рдЬреЛ рдпрд╣рд╛рдВ рд╕реЗ рдЙрдЬрд╛рдЧрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрджрд┐ред рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рд▓рд╛рдн рд╣реЛрдЧрд╛ рдЬреЛ рдХреЛрдИ рднреА рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдмрд╕ рдЗрди рдореЗрдВ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред

рдХреНрдпрд╛ RISC-V рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдпрд╣рд╛рдВ #![feature(asm)] рд╕рд╛рде рд╕рдорд░реНрдерд┐рдд рд╣реИ?

рдореЗрд░реА рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╕рдорд░реНрдерд┐рдд рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рд╕рднреА рдЕрд╕реЗрдВрдмрд▓реА рд╕рдорд░реНрдерд┐рдд рд╣реИрдВ; рдпрд╣ рдПрд▓рд╡реАрдПрдо рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рдПрдПрд╕рдПрдо рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдХрдЪреНрдЪреА рдкрд╣реБрдВрдЪ рд╣реИред

рд╣рд╛рдВ, рдЖрд░рдЖрдИрдПрд╕рд╕реА-рд╡реА рд╕рдорд░реНрдерд┐рдд рд╣реИред рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЗрдирдкреБрдЯ/рдЖрдЙрдЯрдкреБрдЯ/ рдХреНрд▓реЛрдмрд░ рдмрд╛рдзрд╛ рд╡рд░реНрдЧ

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рд╣реИ - рдпрджрд┐ рдЖрдкрдХреЛ рдЗрдирдкреБрдЯ/рдЖрдЙрдЯрдкреБрдЯ/рдХреНрд▓реЙрдмрд░ рдмрд╛рдзрд╛рдУрдВ рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдореЗрдВ рдмрд╛рдзрд╛ рдбрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рд▓ рд░рдЬрд┐рд╕реНрдЯрд░ рдирд╛рдореЛрдВ (x0-x31, f0-f31) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рди рдХрд┐ рдПрдмреАрдЖрдИ рдирд╛рдоред рдЕрд╕реЗрдВрдмрд▓реА рдЦрдВрдб рдореЗрдВ рд╣реА, рдЖрдк рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд░рдЬрд┐рд╕реНрдЯрд░ рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЬреИрд╕рд╛ рдХрд┐ рдЗрди рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдирдпрд╛ рд╣реИ, рдХреНрдпрд╛ рдореИрдВ рдмрд╕ рдЗрддрдирд╛ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ ... рдпрд╣ рдкреВрд░реА рдЪрд░реНрдЪрд╛ _silly_ рд▓рдЧрддреА рд╣реИред рдпрд╣ рдХреИрд╕реЗ рд╣реИ рдХрд┐ рдПрдХ рднрд╛рд╖рд╛ (рдЕрд╕реЗрдВрдмрд▓реА) рдЬрд┐рд╕реЗ рдЗрд╕рдХреЗ рдорд╢реАрди рдХреЛрдб рдХреЗ рд╕рд╛рде 1 рд╕реЗ 1 рдореИрдкрд┐рдВрдЧ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрддрдирд╛ рд╕рд┐рд░рджрд░реНрдж рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ?

рдореИрдВ рдмрд╣реБрдд рдЙрд▓рдЭрди рдореЗрдВ рд╣реВрдБ:

  • рдпрджрд┐ рдЖрдк рдПрдПрд╕рдПрдо рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдХреНрдпрд╛ рдЗрд╕реЗ рд╣рд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ _рдФрд░ рдмреИрдХрдПрдВрдб_ рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рд┐рдП ( #[cfg(...)] рдорд╛рдирд╡ рджреНрд╡рд╛рд░рд╛) рдЖрдк рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?
  • рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ "рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕" рдкреНрд░рд╢реНрди рд╡рд┐рд╡рд╛рджрд╛рд╕реНрдкрдж рд╣реИ ... рдмрд╕ рдЙрд╕ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рд▓рд┐рдП рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ рд╕рдВрдХрд▓рдХ рдХрд╛ рдмреИрдХрдПрдВрдб рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИред
  • рд░рд╕реНрдЯ рдХреЛ рдХреЗрд╡рд▓ рд╕рд╣реА рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдореЗрдВ рдмрд╛рдЗрдЯреНрд╕ рдбрд╛рд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдПрд╕рдЯреАрдбреА рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдФрд░ рдЬреЛ рднреА рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдЙрд╕рдХреЗ рд▓рд┐рдП рд╕реНрдЯреИрдХ рдкрд░ рдкреБрд╢/рдкреЙрдк рдХрд░реЗрдВ - рдлрд┐рд░ рд╕реЗ, рдЗрд╕реЗ рд╣рд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рд╣рд░ рдмреИрдХрдПрдВрдб рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд┐рдЫрд▓реА рд╕рдВрдЧрддрддрд╛ рдПрдХ рдореБрджреНрджрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдмрдЧ рдФрд░ рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдХрднреА рд╕реНрдерд┐рд░ рдирд╣реАрдВ рд╣реБрдЖ рдерд╛, рд╢рд╛рдпрдж рдЗрд╕реЗ рдмреИрдХрдПрдВрдб рдХреЗ рд╕рд╛рде рдкрд╛рд╕ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ред рдПрд▓рдПрд▓рд╡реАрдПрдо рдпрд╛ рдЬреАрд╕реАрд╕реА рдпрд╛ рдХрд┐рд╕реА рдФрд░ рдХреА рдЧрд▓рддрд┐рдпреЛрдВ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рд╡реНрдпрд╡рд╕рд╛рдп рдореЗрдВ рдЬрдВрдЧ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдЬрдВрдЧ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдФрд░ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рд▓рд┐рдП рдорд╢реАрди рдХреЛрдб рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд╡реНрдпрд╡рд╕рд╛рдп рдореЗрдВ рд╣реИ ... рдФрд░ рдПрдПрд╕рдПрдо рдореВрд▓ рд░реВрдк рд╕реЗ рд╡рд╣ рдХреЛрдб рд╣реИ!

рдпрд╣рд╛рдВ рдХреЛрдИ рдкреНрд░рдЧрддрд┐ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдХреЛрдИ рднреА рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдореЗрдВ рд╕рдордп рдирд╣реАрдВ рд▓рдЧрд╛ рд░рд╣рд╛ рд╣реИред рдХрд┐рд╕реА рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХрд╛ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИред

рдЗрд╕ рд╕реВрддреНрд░ рдХреЛ рдкрдврд╝рддреЗ рд╣реБрдП, рдореЗрд░реЗ рдорди рдореЗрдВ рдПрдХ рд╡рд┐рдЪрд╛рд░ рдЖрдпрд╛ рдФрд░ рдЗрд╕реЗ рдкреЛрд╕реНрдЯ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдпрджрд┐ рдореИрдВ рдПрдХ рдкреБрд░рд╛рдиреА рдкреЛрд╕реНрдЯ рдХрд╛ рдЙрддреНрддрд░ рджреЗ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдпрд╣ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рд╣реИ:

@ рдореБрдЦреНрдп-- рдиреЗ рдХрд╣рд╛:

рджреЛрдиреЛрдВ рдЕрдиреБрдХреВрд▓рди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдмреЗрд╣рддрд░ рдереНрд░реВрдкреБрдЯ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ (рд╡рд┐рд╢реЗрд╖рдХрд░ рд╣рд╛рдЗрдкрд░рдереНрд░реЗрдбрд┐рдВрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ) рд▓реЗрдХрд┐рди рд╡рд┐рд▓рдВрдмрддрд╛ рдореЗрдВ рдХрдореА рдирд╣реАрдВ рдЬрд┐рд╕реЗ рдореИрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рдерд╛ред рдореИрдВрдиреЗ рдЙрд╕ рдкреНрд░рдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╕рднреА рддрд░рд╣ рд╕реЗ рдиреАрдЪреЗ рдЧрд┐рд░рд╛ рджрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдХреЛрдб рдХреЛ рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рд╕реЗ рдкреНрд▓реЗрди рдПрдПрд╕рдПрдо рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╕рд┐рд░реНрдл рдЕрдирд╛рд╡рд╢реНрдпрдХ рдШрд░реНрд╖рдг рдерд╛ред рдмреЗрд╢рдХ рдореИрдВ рдХреБрдЫ рдЙрдЪреНрдЪ рд╕реНрддрд░реАрдп рд╡реЗрдХреНрдЯрд░ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝рд░ рдирд┐рд░реНрджреЗрд╢ рдЪрдпрди рдпрд╛ рдирд┐рд░рдВрддрд░ рдлреЛрд▓реНрдбрд┐рдВрдЧ рдЬреИрд╕реА рдЪреАрдЬреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВрдиреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рддрдп рдХрд┐рдпрд╛ рдХрд┐ рдХреМрди рд╕реЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ, рддреЛ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рдХрд┐ рд╕рдВрдХрд▓рдХ рдЙрд╕рдХреЗ рд╕рд╛рде рдЧрдбрд╝рдмрдбрд╝ рдХрд░реЗред рдПрдХрдорд╛рддреНрд░ рд╡рд┐рдХрд▓реНрдк рдЗрдирд▓рд╛рдЗрди рдПрдПрд╕рдПрдо рд╣реИред

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрдирд▓рд╛рдЗрди рдПрдПрд╕рдПрдо рдХреЗ рдмрдЬрд╛рдп, рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣рд╛рдВ рдПрд▓рдПрд▓рд╡реАрдПрдо рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝рд░ рдХреЛ рдмрддрд╛рддреА рд╣реИ: "рдереНрд░реВрдкреБрдЯ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░реЗрдВ", "рд╡рд┐рд▓рдВрдмрддрд╛ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░реЗрдВ", "рдмрд╛рдЗрдирд░реА рдЖрдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░реЗрдВ"ред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдорд╛рдзрд╛рди рдЕрдкрд╕реНрдЯреНрд░реАрдо рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рди рдХреЗрд╡рд▓ рдЖрдкрдХреА рд╡рд┐рд╢реЗрд╖ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╣рд▓ рдХрд░реЗрдЧрд╛ (рдирд┐рдореНрди-рд╡рд┐рд▓рдВрдмрддрд╛ рдкреНрд░рджрд╛рди рдХрд░рдХреЗ рд▓реЗрдХрд┐рди рдЕрдиреНрдпрдерд╛ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдЖрдЗрд╕реЛрдореЛрд░реНрдлрд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди), рдпрд╣ рдЬрдВрдЧ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдкреНрд░рджрд░реНрд╢рди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдкрд░ рдЕрдзрд┐рдХ рдмрдврд╝рд┐рдпрд╛ рдирд┐рдпрдВрддреНрд░рдг рд░рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ рдпрд╣ рдЙрдирдХреЗ рд▓рд┐рдП рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИред

@ felix91gr рдпрд╣

@ рдорд╛рд░реНрдХ-рдЖрдИрдПрдо рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВред рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдПрдХ рд╢рд╛рдмреНрджрд┐рдХ рдЙрджреНрдзрд░рдг рд░рдЦрд╛ рд╣реИ! рдореИрдВ

рдореЗрд░рд╛ рдореБрджреНрджрд╛ рдпрд╣ рдерд╛ рдХрд┐ рднрд▓реЗ рд╣реА рдЖрдк рдЗрдирд▓рд╛рдЗрди рдПрдПрд╕рдПрдо рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ "рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдореЗрд░реА рдЬрд╝рд░реВрд░рдд рдХреЗ рд╡рд┐рдкрд░реАрдд рддрд░реАрдХреЗ рд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ" (рдЬреЛ рдЙрдирдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреНрд▓рд╛рд╕рд┐рдХ рд╣реИ: рд╡рд┐рд▓рдВрдмрддрд╛ рдмрдирд╛рдо рдереНрд░реВрдкреБрдЯ) рд╣рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд╢рд╛рдпрдж (рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрдИрдПрдордУ) рдЬреЛ рдХреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ рдЕрдиреБрдХреВрд▓рди рдХреЗ рдЕрдзрд┐рдХ рд╕реБрдХреНрд╖реНрдо рдирд┐рдпрдВрддреНрд░рдг рджреНрд╡рд╛рд░рд╛ рдмреЗрд╣рддрд░ рд╕реЗрд╡рд╛ рджреА рдЬрд╛ рд╕рдХрддреА рд╣реИ :)

рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдЖрд▓реЛрдХ рдореЗрдВ, рдЗрд╕ рдЕрдВрдХ рдХреА рдЕрдзрд┐рдХрд╛рдВрд╢ рдЪрд░реНрдЪрд╛ рдЕрдм рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдирд╣реАрдВ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдореИрдВ рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрд╡рд╛рдж рдХреЗ рд▓рд┐рдП рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЯреНрд░реИрдХрд┐рдВрдЧ рдореБрджреНрджреЛрдВ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ:

  • рдПрд▓рдПрд▓рд╡реАрдПрдо-рд╢реИрд▓реА рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рд▓рд┐рдП рдЯреНрд░реИрдХрд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛ ( llvm_asm ) #70173
  • рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рд▓рд┐рдП рдЯреНрд░реИрдХрд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛ ( asm! ) #72016
рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

drewcrawford picture drewcrawford  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Robbepop picture Robbepop  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

lambda-fairy picture lambda-fairy  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

cuviper picture cuviper  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

overvenus picture overvenus  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ