
рдирдорд╕реНрдХрд╛рд░, рд╣реЗрдмреНрд░! рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдПрдЖрд░рдПрдо рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рд╕рд╛рде рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд▓рд┐рдП рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдХрд╛рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд▓реЗрдЦ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ рдЬреЛ рдЕрдкрдиреЗ рдУрдПрд╕ рдХреЛ рдПрдЖрд░рдПрдо рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕рд╛рде рд╣реА рдЙрдиреНрд╣реЗрдВ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ (рдЬреЛ рд╣рдордиреЗ
Embox рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдерд╛, рдЬреЛ рдкрд╣рд▓реЗ рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдСрдкрд░реЗрд╢рдВрд╕ рдХреЗ рдПрдХ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рдереЗ) рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рддреЛ рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред
рд╕рдВрдХрд▓рдХ рдЭрдВрдбреЗ
рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рд╕рд╣реА рдЭрдВрдбреЗ рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╣рдо рдореЗрдВ рд╕реЗ рдПрдХ рддреНрд╡рд░рд┐рдд
googling рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рджреЛ рд╡рд┐рдХрд▓реНрдк рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ: -mfloat-abi рдФрд░ -mfpuред -Mfloat-abi рд╡рд┐рдХрд▓реНрдк рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдСрдкрд░реЗрд╢рдВрд╕ рдХреЗ рд▓рд┐рдП
ABI рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рддреАрди рдорд╛рди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ: 'рд╕реЙрдлреНрдЯ', 'рд╕реЙрдлреНрдЯрдлрдк' рдФрд░ 'рд╣рд╛рд░реНрдб'ред 'рд╕реЙрдлреНрдЯ' рд╡рд┐рдХрд▓реНрдк, рдЬреИрд╕рд╛ рдХрд┐ рдирд╛рдо рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ, рд╕рдВрдХрд▓рдХ рдХреЛ рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИ (рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдкрд╣рд▓реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛)ред -Mfpu рд╡рд┐рдХрд▓реНрдк рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╢реЗрд╖ рджреЛ 'рд╕реЙрдлреНрдЯрдлрдк' рдФрд░ 'рд╣рд╛рд░реНрдб' рдХреЛ рдереЛрдбрд╝рд╛ рдмрд╛рдж рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛ред
-Mfpu рдзреНрд╡рдЬ рдФрд░ VFP рд╕рдВрд╕реНрдХрд░рдг
-Mfpu рд╡рд┐рдХрд▓реНрдк, рдЬреИрд╕рд╛ рдХрд┐
gcc рдСрдирд▓рд╛рдЗрди рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдЖрдкрдХреЛ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдХрд▓реНрдк рд▓реЗ рд╕рдХрддрд╛ рд╣реИ:
'рдСрдЯреЛ', 'vfpv2', 'vfpv3', 'vfpv3-fp16', 'vfpv3-d16', 'vfpv3-d16-fp16', 'vfpv3xd', 'vfpv3xd-fp16', 'vonpv3-dp16' -fp16 ',' vfpv4 ',' vfpv4-d16 ',' fpv4-sp-d16 ',' neon-vfpv4 ',' fpv5-d16 ',' fpv5-sp-d16 ',' fp-armv8 ',' neon -fp-armv8 'рдФрд░' crypto-neon-fp-armv8 'ред рдФрд░ 'рдирд┐рдпреЙрди' 'рдирд┐рдпреЛрди-рд╡реАрдПрдлрд╡реА 3' рдХреЗ рд╕рдорд╛рди рд╣реИ, рдФрд░ 'рд╡реАрдПрдлрдкреА' 'рд╡реАрдПрдлрдкреАрд╡реА 2' рд╣реИред
рдореЗрд░рд╛ рд╕рдВрдХрд▓рдХ (рдЖрд░реНрдо-рдПрдиреА-рдИрдмреА-рдЬреАрд╕реАрд╕реА (15: 5.4.1 + svn241155-1) 5.4.1 20160919) рдереЛрдбрд╝реА рдЕрд▓рдЧ рд╕реВрдЪреА рдмрдирд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд╛рд░ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИред рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдореЗрдВ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдпрд╛ рд╡рд╣ рдзреНрд╡рдЬ рд╕рдВрдХрд▓рдХ рдХреЛ рдХреИрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдзреНрд╡рдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдм рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореИрдВрдиреЗ imx6 рдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЛ рд╕рдордЭрдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ рдереЛрдбрд╝реА рджреЗрд░ рдХреЗ рд▓рд┐рдП рд╕реНрдердЧрд┐рдд рдХрд░ рджреЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдирд┐рдпреЙрди рдХреЛрдкреНрд░реЛрд╕реЗрд╕рд░ рдореЗрдВ рдРрд╕реА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ рдХрд┐ рдореИрдВ рдмрд╛рдж рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХрд░реВрдВрдЧрд╛, рдФрд░ рд╣рдо рдПрдХ рд╕рд░рд▓ рдорд╛рдорд▓реЗ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗ -
рдЗрдВрдЯреАрдЧреНрд░реЗрдЯрд░ / рд╕реАрдкреА рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рд╕реЗ,
рдореЗрд░реЗ рдкрд╛рд╕ рдмреЛрд░реНрдб рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреНрдпреВрдореВ рдПрдореБрд▓реЗрдЯрд░ рдкрд░ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреА рдЧрдИред Qemu рдореЗрдВ, Interator / cp рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо
ARM926EJ-S рдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ
VFP9-S рдХреЛрдкреНрд░реЛрд╕реЗрд╕рд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдХреЛрдкреНрд░реЛрд╕реЗрд╕рд░ рд╡реЗрдХреНрдЯрд░ рдлреНрд▓реЛрдЯрд┐рдВрдЧ-рдкреЙрдЗрдВрдЯ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рд╕рдВрд╕реНрдХрд░рдг 2 (VFPv2) рдХрд╛ рдЕрдиреБрдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реИред рддрджрдиреБрд╕рд╛рд░, рдЖрдкрдХреЛ -mfpu = vfpv2 рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдореЗрд░реЗ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдирд╣реАрдВ рдерд╛ред
рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░, рдореБрдЭреЗ рдЭрдВрдбреЗ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрдХрд▓рди рд╡рд┐рдХрд▓реНрдк рдорд┐рд▓рд╛ -mcpu = arm926ej-s -mfpu = vfpv3-d16, рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛, рдФрд░ рдореЗрд░реЗ рд▓рд┐рдП рд╕рдВрдХрд▓рд┐рдд рд╕рдм рдХреБрдЫред рдЬрдм рдореИрдВрдиреЗ рд╢реБрд░реБрдЖрдд рдХреА, рддреЛ рдореБрдЭреЗ рдПрдХ
рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд┐рд░реНрджреЗрд╢ рдЕрдкрд╡рд╛рдж рдорд┐рд▓рд╛ , рдЬреЛ рдХрд┐ рдЕрдиреБрдорд╛рди рдХреЗ рдореБрддрд╛рдмрд┐рдХ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдкреНрд░реЛрд╕реЗрд╕рд░
рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдХреЛрдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ
FPEXC рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ EN рдмрд┐рдЯ [30] рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ VMSR рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
asm volatile ("VMSR FPEXC, %0" : : "r" (1 << 30);
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╡реАрдПрдордПрд╕рдЖрд░ рдХрдорд╛рдВрдб рдХреЛрдкреНрд░реЛрд╕реЗрд╕рд░ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХ рджреЗрддрд╛ рд╣реИ рдпрджрд┐ рдХреЛрдкрд░реЛрд╕реЗрд╕рд░ рдЪрд╛рд▓реВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рд░рдЬрд┐рд╕реНрдЯрд░ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рд╕реЗ рдЗрд╕рдХрд╛
рдХрд╛рд░рдг рдирд╣реАрдВ рдмрдирддрд╛ рд╣реИ ред рд╕рдЪ рд╣реИ, рджреВрд╕рд░реЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЗрд╕ рд░рдЬрд┐рд╕реНрдЯрд░ рддрдХ рдкрд╣реБрдВрдЪ рдХреЗрд╡рд▓
рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдореЛрдб рдореЗрдВ рд╕рдВрднрд╡
рд╣реИ ред
рдХреЛрдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рдмрд╛рдж, рдЧрдгрд┐рддреАрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд░реАрдХреНрд╖рдг рдкрд╛рд╕ рд╣реЛрдиреЗ рд▓рдЧреЗред рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВрдиреЗ рдЕрдиреБрдХреВрд▓рди (-рдУ 2) рдХреЛ рдЪрд╛рд▓реВ рдХрд┐рдпрд╛, рддреЛ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦрд┐рдд рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдЕрдиреБрджреЗрд╢ рдЕрдкрд╡рд╛рдж рдХреЛ рдЙрдард╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдФрд░ рдпрд╣
vmov рдирд┐рд░реНрджреЗрд╢ рдкрд░ рдЙрддреНрдкрдиреНрди рд╣реБрдЖ рдЬрд┐рд╕реЗ рдкрд╣рд▓реЗ рдХреЛрдб рдореЗрдВ рдХрд╣рд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ (рдмрд┐рдирд╛ рдЕрдкрд╡рд╛рдж рдХреЗ) рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЕрдВрдд рдореЗрдВ, рдореИрдВрдиреЗ рдкреГрд╖реНрда рдХреЗ рдЕрдВрдд рдореЗрдВ рдкрд╛рдпрд╛ рдХрд┐ рд╡рд╛рдХреНрдпрд╛рдВрд╢ "рдирд┐рд░реНрджреЗрд╢ рдЬреЛ рддрддреНрдХрд╛рд▓ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ VFPv3 рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ" (рдЕрд░реНрдерд╛рдд, рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд▓рди VFPv3 рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рдФрд░ рдореИрдВрдиреЗ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдореЗрд░реЗ рдПрдореБрд▓реЗрдЯрд░ рдореЗрдВ рдХреМрди рд╕рд╛ рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╕рдВрд╕реНрдХрд░рдг
рдПрдлрдкреАрдПрд╕рдЖрдИрдбреА рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдкреНрд░рд▓реЗрдЦрди рд╕реЗ рдпрд╣ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ рдХрд┐ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд╛ рдореВрд▓реНрдп 0x41011090 рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреНрд╖реЗрддреНрд░ [19..16] рдЕрд░реНрдерд╛рдд VFPv2 рдореЗрдВ 1 рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рдПрдХ рдкреНрд░рд┐рдВрдЯрдЖрдЙрдЯ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдпрд╣ рдорд┐рд▓ рдЧрдпрд╛
unit: initializing embox.arch.arm.fpu.vfp9_s: VPF info: Hardware FP support Implementer = 0x41 (ARM) Subarch: VFPv2 Part number = 0x10 Variant = 0x09 Revision = 0x00
рдзреНрдпрд╛рди рд╕реЗ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж рдХрд┐ 'vfp' рдЙрд░реНрдл тАЛтАЛ'vfpv2' рд╣реИ, рдореИрдВрдиреЗ рд╕рд╣реА рдзреНрд╡рдЬ рд╕реЗрдЯ рдХрд┐рдпрд╛, рдпрд╣ рдХрд╛рдо рдХрд┐рдпрд╛ред рдЙрд╕
рдкреГрд╖реНрда рдкрд░ рд▓реМрдЯрддреЗ рд╣реБрдП рдЬрд╣рд╛рдВ рдореИрдВрдиреЗ рдЭрдВрдбреЗ рдХрд╛ рд╕рдВрдпреЛрдЬрди рджреЗрдЦрд╛ -mcpu = arm926ej-s -mfpu = vfpv3-d16, рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВ рдкрд░реНрдпрд╛рдкреНрдд рд╕рд╛рд╡рдзрд╛рди рдирд╣реАрдВ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ -mfloat-abi / рдЭрдВрдбреЗ рдХреА рд╕реВрдЪреА рдореЗрдВ рд╕реЙрдлреНрдЯ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреЛрдИ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рд╕рдорд░реНрдерди рдирд╣реАрдВ рд╣реИред рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, -mfpu рдХреЗрд╡рд▓ рддрднреА рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ рдЬрдм 'рд╕реЙрдлреНрдЯ' рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреЛрдИ рдорд╛рди mfloat-abi рдкрд░ рд╕реЗрдЯ рд╣реЛред
рдХреЛрдбрд╛рдВрддрд░рдХ
рдпрд╣ рдЕрд╕реЗрдВрдмрд▓рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред рдЖрдЦрд┐рд░рдХрд╛рд░, рдореБрдЭреЗ рд░рдирдЯрд╛рдЗрдо рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдВрдХрд▓рдХ, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рд╕рдВрджрд░реНрдн рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рд╣реИред
рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ
рдЪрд▓реЛ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред VFP рдЖрдкрдХреЛ 32-рдмрд┐рдЯ (s0..s31) рдФрд░ 64-рдмрд┐рдЯ (d0..d15) рдлреНрд▓реЛрдЯрд┐рдВрдЧ-рдкреЙрдЗрдВрдЯ рдирдВрдмрд░реЛрдВ рдХреЗ рд╕рд╛рде рдСрдкрд░реЗрд╢рди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрди рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рдмреАрдЪ рдкрддреНрд░рд╛рдЪрд╛рд░ рдиреАрдЪреЗ рджреА рдЧрдИ рддрд╕реНрд╡реАрд░ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

Q0-Q15 рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рд╕реЗ 128-рдмрд┐рдЯ рд░рдЬрд┐рд╕реНрдЯрд░ рд╣реИрдВ рдЬреЛ SIMD рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдВ, рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдмрд╛рдж рдореЗрдВред
рдХрдорд╛рди рдкреНрд░рдгрд╛рд▓реА
рдмреЗрд╢рдХ, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ VFP рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рд╕рдВрдХрд▓рдХ рдХреЛ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рдЖрдкрдХреЛ рд╕рдВрджрд░реНрдн рд╕реНрд╡рд┐рдЪ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рд╛рдорд╛рдиреНрдп-рдЙрджреНрджреЗрд╢реНрдп рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдбрд╛рдВрддрд░рдХ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреА рдЕрдиреБрдорд╛рдирд┐рдд рд╕рдордЭ рд╣реИ, рддреЛ рдирдП рдирд┐рд░реНрджреЗрд╢реЛрдВ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░, рдЙрдкрд╕рд░реНрдЧ "v" рдмрд╕ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред
vmov d0, r0, r1 /* r0 r1, .. d0 64 , r0-1 32 */ vmov r0, r1, d0 vadd d0, d1, d2 vldr d0, r0 vstm r0!, {d0-d15} vldm r0!, {d0-d15}
рдФрд░ рдЗрд╕реА рддрд░рд╣ред рдЖрджреЗрд╢реЛрдВ рдХреА рдПрдХ рдкреВрд░реА рд╕реВрдЪреА
рдПрдЖрд░рдПрдо рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИред
рдФрд░ рд╣рд╛рдВ, рд╡реАрдПрдлрдкреА рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдордд рднреВрд▓рдирд╛ рддрд╛рдХрд┐ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдХреА рддрд░рд╣ рдХреЛрдИ рднреА рд╕реНрдерд┐рддрд┐ рди рд╣реЛред
рдЭрдВрдбрд╛-рдореБрдлрд╝реНрд▓рдд-рдЕрдмреА 'рд╕реЙрдлреНрдЯрдлрд╝рдк' рдФрд░ 'рд╣рд╛рд░реНрдб'
рд╡рд╛рдкрд╕ -mfloat-abi рдпрджрд┐ рдЖрдк
рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкрдврд╝рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ:
'рд╕реЙрдлреНрдЯрдлрдк' рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдлреНрд▓реЛрдЯрд┐рдВрдЧ-рдкреЙрдЗрдВрдЯ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЛрдб рдХреА рдкреАрдврд╝реА рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рд╕реЙрдлреНрдЯ-рдлреНрд▓реЛрдЯ рдХреЙрд▓рд┐рдВрдЧ рд╕рдореНрдореЗрд▓рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред 'рд╣рд╛рд░реНрдб' рдлреНрд▓реЛрдЯрд┐рдВрдЧ-рдкреЙрдЗрдВрдЯ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреА рдкреАрдврд╝реА рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ FPU- рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреЙрд▓рд┐рдВрдЧ рд╕рдореНрдореЗрд▓рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рдпрд╣реА рд╣реИ, рд╣рдо рдПрдХ рд╕рдорд╛рд░реЛрд╣ рдореЗрдВ рддрд░реНрдХ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдерд╛ рдХрд┐ "рд╕реЙрдлреНрдЯ-рдлреНрд▓реЛрдЯ" рдФрд░ "рдПрдлрдкреАрдпреВ-рд╡рд┐рд╢рд┐рд╖реНрдЯ" рдХреЙрд▓рд┐рдВрдЧ рд╕рдореНрдореЗрд▓рдиреЛрдВ рдореЗрдВ рдХреНрдпрд╛ рдЕрдВрддрд░ рд╣реИред рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рд╣рд╛рд░реНрдб рдХреЗрд╕ рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╕реЙрдлреНрдЯрдлреНрдк рдХреЗрд╕ рдкреВрд░реНрдгрд╛рдВрдХ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдореБрдЭреЗ
рдбреЗрдмрд┐рдпрди рд╡рд┐рдХреА рдкрд░ рдкреБрд╖реНрдЯрд┐ рдорд┐рд▓реАред рдФрд░ рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдиреАрдпрди рдХреЙрдкреЛрд░реЛрд╕реЗрд╕рд░реНрд╕ рдХреЗ рд▓рд┐рдП рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ред рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╕реЙрдлреНрдЯрдлрдк рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде, рдХрдВрдкрд╛рдЗрд▓рд░ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рд╕рдорд░реНрдерди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ:
"рдХрдВрдкрд╛рдЗрд▓рд░ рд╕реНрдорд╛рд░реНрдЯ рд╡рд┐рдХрд▓реНрдк рдЪреБрди рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╡рд╣ рдХрдм рдФрд░ рдХреНрдпреЛрдВ рдЪреБрдирд┐рдВрджрд╛ FPU рдкреНрд░рдХрд╛рд░ (-mfpu =) рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдореБрд▓реЗрдЯреЗрдб рдпрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ FPU рдирд┐рд░реНрджреЗрд╢ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ"
рдмреЗрд╣рддрд░ рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдФрд░ рдмрд╣реБрдд рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рд╣реБрдЖ, рдХреНрдпреЛрдВрдХрд┐ -O0 рдЕрдиреБрдХреВрд▓рди рдмрдВрдж рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде, рдЕрдВрддрд░ рдмрд╣реБрдд рдорд╛рдореВрд▓реА рдерд╛ рдФрд░ рдЙрди рдЬрдЧрд╣реЛрдВ рдкрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддрд╛ рдЬрд╣рд╛рдВ рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рдерд╛ред рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗрд╡рд▓ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рд╕реНрдЯреИрдХ рдкрд░ рд╕рдм рдХреБрдЫ рдзрдХреНрдХрд╛ рджреЗрддрд╛ рд╣реИ, рдореИрдВрдиреЗ -O2 рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рдЪрд╛рд▓реВ рдХрд┐рдпрд╛ рдФрд░ рдлрд┐рд░ рд╕реЗ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рд╣реЛ рдЧрдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд╕рд╛рде рдХрдВрдкрд╛рдЗрд▓рд░ рдиреЗ рд╣рд╛рд░реНрдб рдФрд░ рд╕реЛрдлреНрдЯрд╡реЗрдпрд░ рджреЛрдиреЛрдВ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд▓рд┐рдП рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рдФрд░ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдФрд░ -O0 рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдмрд╣реБрдд рдорд╣рддреНрд╡рд╣реАрди рдерд╛ред рдирддреАрдЬрддрди, рдЦреБрдж рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЗрд╕ рддрдереНрдп рд╕реЗ рд╕рдордЭрд╛рдпрд╛ рдХрд┐ рд╕рдВрдХрд▓рдХ рдЗрд╕ рддрдереНрдп рд╕реЗ рдЬреБрдбрд╝реА
рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдлреНрд▓реЛрдЯрд┐рдВрдЧ-рдкреЙрдЗрдВрдЯ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдФрд░ рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдХрд╛рдлреА рдЧрд┐рд░рд╛рд╡рдЯ рдЖрдПрдЧреАред рдФрд░ рд╕рдВрдХрд▓рдХ, рдЬрдм рдЕрдиреБрдХреВрд▓рди, рдЕрдкрдиреЗ рдирд┐рдкрдЯрд╛рди рдореЗрдВ рд╕рднреА рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред
рдпрд╣ рдкреВрдЫреЗ рдЬрд╛рдиреЗ рдкрд░ рдХрд┐ рдХреМрди рд╕рд╛ рдзреНрд╡рдЬ 'рд╕реЙрдлреНрдЯрдлрдк' рдпрд╛ 'рд╣рд╛рд░реНрдб' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд▓рд┐рдП рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЙрддреНрддрд░ рджрд┐рдпрд╛: рдЬрд╣рд╛рдВ рднреА рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 'рд╕реЙрдлреНрдЯрдлреИрдк' рдзреНрд╡рдЬ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдЖрдкрдХреЛ 'рд╣рд╛рд░реНрдб' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдХреЛрдИ рд╣реИ, рддреЛ рдЖрдкрдХреЛ 'рд╕реЙрдлреНрдЯрдлрдк' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдкреНрд░рд╕рдВрдЧ рд╕реНрд╡рд┐рдЪ
рдЪреВрдВрдХрд┐ рдПрдордмреЙрдХреНрд╕ рдкреНрд░реАрдорд┐рдЯрд┐рд╡ рдорд▓реНрдЯреАрдЯрд╛рд╕реНрдХрд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рд╕рдВрджрд░реНрдн рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдЗрд╕рдХреЗ рд▓рд┐рдП, рдХреЛрдкреНрд░реЛрд╕реЗрд╕рд░ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЛ рд╕рд╣реЗрдЬрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рд╣реИрдВред рдкрд╣рд▓рд╛: рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐
рд╕реНрдЯреИрдХ рдСрдкрд░реЗрд╢рди рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯреНрд╕ (vstm / vldm) рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╕рднреА рдореЛрдб рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ ред рджреВрд╕рд░рд╛: рдпреЗ рдСрдкрд░реЗрд╢рди рд╕реЛрд▓рд╣ 64-рдмрд┐рдЯ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдкрдХреЛ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдЕрдзрд┐рдХ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ / рд╕рд╣реЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рджреЛ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдореИрдВ рдПрдХ рдФрд░ рдЫреЛрдЯрд╛ рдЕрдиреБрдХреВрд▓рди рджреВрдВрдЧрд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рд░ рд╡реАрдкреАрдПрдл рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ 256 рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рд╕рд╣реЗрдЬрдирд╛ рдФрд░ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ (рд╕рд╛рдорд╛рдиреНрдп рдЙрджреНрджреЗрд╢реНрдп рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЗрд╡рд▓ 64 рдмрд╛рдЗрдЯреНрд╕ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЕрдВрддрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ)ред рд╕реНрдкрд╖реНрдЯ рдЕрдиреБрдХреВрд▓рди рдЗрди рдСрдкрд░реЗрд╢рдиреЛрдВ рдХреЛ рдХреЗрд╡рд▓ рддрднреА рдХрд░реЗрдЧрд╛ рдЬрдм рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЗрди рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЛ рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдЬрдм рд╡реАрдПрдлрдкреА рдХреЛрдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕реА рдирд┐рд░реНрджреЗрд╢ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдПрдХ "рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд┐рд░реНрджреЗрд╢" рдЕрдкрд╡рд╛рдж рдХреЗ рд░реВрдк рдореЗрдВ рд╣реЛрдЧрд╛ред рдЗрд╕ рдЕрдкрд╡рд╛рдж рдХреЗ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ, рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЕрдкрд╡рд╛рдж рдХреНрдпрд╛ рд╣реИ, рдФрд░ рдЕрдЧрд░ рдпрд╣ рд╡реАрдкреАрдПрдл рдХреЛрдкреНрд░реЛрд╕реЗрд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдмрд╛рдд рд╣реИ, рддреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╡реАрдПрдлрдкреА рдХреЛрдкреНрд░реЛрд╕реЗрд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдирддреАрдЬрддрди, рд╕рдВрджрд░реНрдн рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рд┐рдЦреЗ рдЧрдП рд╕реЗрд╡ / рд░рд┐рд╕реНрдЯреЛрд░ рдХреЛ рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рд╕рд╛рде рд╕рдкреНрд▓реАрдореЗрдВрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛
#define ARM_FPU_CONTEXT_SAVE_INC(tmp, stack) \ vmrs tmp, FPEXC ; \ stmia stack!, {tmp}; \ ands tmp, tmp, #1<<30; \ beq fpu_out_save_inc; \ vstmia stack!, {d0-d15}; \ fpu_out_save_inc: #define ARM_FPU_CONTEXT_LOAD_INC(tmp, stack) \ ldmia stack!, {tmp}; \ vmsr FPEXC, tmp; \ ands tmp, tmp, #1<<30; \ beq fpu_out_load_inc; \ vldmia stack!, {d0-d15}; \ fpu_out_load_inc:
рдлреНрд▓реЛрдЯрд┐рдВрдЧ-рдкреЙрдЗрдВрдЯ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рд╕рдВрджрд░реНрдн рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рдСрдкрд░реЗрд╢рди рдХреА рд╢реБрджреНрдзрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдПрдХ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрд╛ рдерд╛ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдПрдХ рдзрд╛рдЧреЗ рдореЗрдВ рдПрдХ рд▓реВрдк рдореЗрдВ рдЧреБрдгрд╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рджреВрд╕рд░реЗ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╣реИрдВред
EMBOX_TEST_SUITE("FPU context consistency test. Must be compiled with -02"); #define TICK_COUNT 10 static float res_out[2][TICK_COUNT]; static void *fpu_context_thr1_hnd(void *arg) { float res = 1.0f; int i; for (i = 0; i < TICK_COUNT; ) { res_out[0][i] = res; if (i == 0 || res_out[1][i - 1] > 0) { i++; } if (res > 0.000001f) { res /= 1.01f; } sleep(0); } return NULL; } static void *fpu_context_thr2_hnd(void *arg) { float res = 1.0f; int i = 0; for (i = 0; i < TICK_COUNT; ) { res_out[1][i] = res; if (res_out[0][i] != 0) { i++; } if (res < 1000000.f) { res *= 1.01f; } sleep(0); } return NULL; } TEST_CASE("Test FPU context consistency") { pthread_t threads[2]; pthread_t tid = 0; int status; status = pthread_create(&threads[0], NULL, fpu_context_thr1_hnd, &tid); if (status != 0) { test_assert(0); } status = pthread_create(&threads[1], NULL, fpu_context_thr2_hnd, &tid); if (status != 0) { test_assert(0); } pthread_join(threads[0], (void**)&status); pthread_join(threads[1], (void**)&status); test_assert(res_out[0][0] != 0 && res_out[1][0] != 0); for (int i = 1; i < TICK_COUNT; i++) { test_assert(res_out[0][i] < res_out[0][i - 1]); test_assert(res_out[1][i] > res_out[1][i - 1]); } }
рдЕрдиреБрдХреВрд▓рди рдХреЗ рдмрдВрдж рд╣реЛрдиреЗ рдкрд░ рдкрд░реАрдХреНрд╖рдг рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкрд╛рд░рд┐рдд рд╣реЛ рдЧрдпрд╛, рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рд╡рд░рдг рдореЗрдВ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдХрд┐ рдЗрд╕реЗ рдЕрдиреБрдХреВрд▓рди, EMBOX_TEST_SUITE ("FPU рд╕рдВрджрд░реНрдн рд╕рдВрдЧрддрддрд╛ рдкрд░реАрдХреНрд╖рдгред -02 рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП") рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдЗрд╕ рдкрд░ рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╕рд╣-рдкреНрд░реЛрд╕реЗрд╕рд░ рдиреАрдпрди рдФрд░ SIMD
рдпрд╣ рдмрддрд╛рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ рдХрд┐ рдореИрдВрдиреЗ imx6 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╣рд╛рдиреА рдХреНрдпреЛрдВ рд╕реНрдердЧрд┐рдд рдХреА рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдХреЙрд░реНрдЯреЗрдХреНрд╕-рдП 9 рдХреЛрд░ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдЕрдзрд┐рдХ рдЙрдиреНрдирдд рдиреАрдпрди рдХреЛрдкреНрд░реЛрд╕реЗрд╕рд░ (https://developer.arm.com/technologies/neon) рд╢рд╛рдорд┐рд▓ рд╣реИрдВред NEON рди рдХреЗрд╡рд▓ VFPv3 рд╣реИ, рдмрд▓реНрдХрд┐ рдпрд╣ рдПрдХ SIMD рдХреЙрдкреАрд░реЛрд╕реЗрд╕рд░ рднреА рд╣реИред VFP рдФрд░ рдиреАрдпрди рд╕рдорд╛рди рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред VFP рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП 32-рдмрд┐рдЯ рдФрд░ 64-рдмрд┐рдЯ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ NEON 64-рдмрд┐рдЯ рдФрд░ 128-рдмрд┐рдЯ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдмрд╛рдж рд╡рд╛рд▓реЗ рдХреЛ Q0-Q16 рдирд╛рдорд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдкреВрд░реНрдгрд╛рдВрдХ рдорд╛рдиреЛрдВ рдФрд░ рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ-рдкреЙрдЗрдВрдЯ рдирдВрдмрд░реЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, NEON 16 рд╡реАрдВ рдпрд╛ 8 рд╡реАрдВ рдбрд┐рдЧреНрд░реА рдореЛрдбреБрд▓реЛ 2 рдХреА рдмрд╣реБрдкрдж рд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рднреА рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред
NEON рдХреЗ рд▓рд┐рдП vfp рдореЛрдб, disassembled vfp9-s coprocessor рд╕реЗ рд▓рдЧрднрдЧ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИред рдмреЗрд╢рдХ, рдмреЗрд╣рддрд░ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП -ffv3 рдпрд╛ vfpv3-d32 рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ 32 64-рдмрд┐рдЯ рд░рдЬрд┐рд╕реНрдЯрд░ рд╣реИрдВред рдФрд░ рдХреЛрдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ c10 рдФрд░ c11 рдХреЛрдкреНрд░реЛрд╕реЗрд╕рд░ рддрдХ рдкрд╣реБрдБрдЪ рдкреНрд░рджрд╛рди рдХрд░рдиреА рд╣реЛрдЧреАред рдпрд╣ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
asm volatile ("mrc p15, 0, %0, c1, c0, 2" : "=r" (val) :); val |= 0xf << 20; asm volatile ("mcr p15, 0, %0, c1, c0, 2" : : "r" (val));
рд▓реЗрдХрд┐рди рдЕрдиреНрдп рдмреБрдирд┐рдпрд╛рджреА рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реИрдВред
рдПрдХ рдФрд░ рдмрд╛рдд рдЕрдЧрд░ рдЖрдк -mfpu = рдирд┐рдпреЙрди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХрдВрдкрд╛рдЗрд▓рд░ SIMD рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
C рдореЗрдВ SIMD рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
<< рд░рдЬрд┐рд╕реНрдЯрд░ >> рдореВрд▓реНрдпреЛрдВ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк "arm_neon.h" рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
float32x4_t рдЪрд╛рд░ 32-рдмрд┐рдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ, 8 8-рдмрд┐рдЯ рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рд▓рд┐рдП uint8x8_t рдФрд░ рдЗрддрдиреЗ рдкрд░ред рдПрдХрд▓ рдорд╛рди рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрд╕реЗ рдПрдХ рд╕рд░рдгреА, рдЬреЛрдбрд╝, рдЧреБрдгрд╛, рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ, рдЖрджрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд╕рд╛рдорд╛рдиреНрдп рдЪрд░ рдХреЗ рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
uint32x4_t a = {1, 2, 3, 4}, b = {5, 6, 7, 8}; uint32x4_t c = a * b; printf(тАЬResult=[%d, %d, %d, %d]\nтАЭ, c[0], c[1], c[2], c[3]);
рдмреЗрд╢рдХ, рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╡реИрд╢реНрд╡реАрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╡реИрд╢реНрд╡реАрдХрд░рдг рдХреЗ рд▓рд┐рдП, рдЬреАрд╕реАрд╕реА рдореЗрдВ -ftree-рд╡реЗрдХреНрдЯрд░рд╛рдЗрдЬ рдзреНрд╡рдЬ рдЬреЛрдбрд╝реЗрдВред
void simd_test() { int a[LEN], b[LEN], c[LEN]; for (int i = 0; i < LEN; i++) { a[i] = i; b[i] = LEN - i; } for (int i = 0; i < LEN; i++) { c[i] = a[i] + b[i]; } for (int i = 0; i < LEN; i++) { printf("c[i] = %d\n", c[i]); } }
рдЕрддрд┐рд░рд┐рдХреНрдд рд▓реВрдк рдирд┐рдореНрди рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ:
600059a0: f4610adf vld1.64 , [r1 :64] 600059a4: e2833010 add r3, r3, #16 600059a8: e28d0a03 add r0, sp, #12288 ; 0x3000 600059ac: e2811010 add r1, r1, #16 600059b0: f4622adf vld1.64 , [r2 :64] 600059b4: e2822010 add r2, r2, #16 600059b8: f26008e2 vadd.i32 q8, q8, q9 600059bc: ed430b04 vstr d16, [r3, #-16] 600059c0: ed431b02 vstr d17, [r3, #-8] 600059c4: e1530000 cmp r3, r0 600059c8: 1afffff4 bne 600059a0 <foo+0x58> 600059cc: e28d5dbf add r5, sp, #12224 ; 0x2fc0 600059d0: e2444004 sub r4, r4, #4 600059d4: e285503c add r5, r5, #60 ; 0x3c
рд╕рдорд╛рдирд╛рдВрддрд░ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдордиреЗ рдкрд╛рдпрд╛ рдХрд┐ рд▓реВрдк рдореЗрдВ рд╕рд░рд▓ рдЬреЛрдбрд╝, рдмрд╢рд░реНрддреЗ рдХрд┐ рдЪрд░ рд╕реНрд╡рддрдВрддреНрд░ рд╣реЛрдВ, рддреНрд╡рд░рдг рдХреЛ 7 рдЧреБрдирд╛ рдЕрдзрд┐рдХ рджреЗрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдордиреЗ рдпрд╣ рджреЗрдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрд┐рддрдирд╛ рд╕рдорд╛рдирд╛рдВрддрд░ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ, MESA3d рдХреЛ рдЕрдкрдиреЗ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдЕрдиреБрдХрд░рдг рдХреЗ рд╕рд╛рде рд▓рд┐рдпрд╛ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдЭрдВрдбреЗ рдХреЗ рд╕рд╛рде рдПрдлрдкреАрдПрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдорд╛рдкрд╛, рд╣рдореЗрдВ 2 рдлреНрд░реЗрдо рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб (15 рдмрдирд╛рдо 13) рдХрд╛ рд▓рд╛рдн рдорд┐рд▓рд╛, рдЕрд░реНрдерд╛рдд рддреНрд╡рд░рдг рд▓рдЧрднрдЧ 15-20% рд╣реИред ред
рдореИрдВ
NEON рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рддреНрд╡рд░рдг рдХрд╛ рдПрдХ рдФрд░
рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛ , рд╣рдорд╛рд░рд╛ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ ARM рд╕реЗред
рдореЗрдореЛрд░реА рдХреЛ рдХреЙрдкреА рдХрд░рдирд╛ рд╕рд╛рдорд╛рдиреНрдп рд╕реЗ 50 рдкреНрд░рддрд┐рд╢рдд рдЕрдзрд┐рдХ рддреЗрдЬ рд╣реИред рдЕрд╕реЗрдВрдмрд▓рд░ рдореЗрдВ рд╕рд╣реА рдЙрджрд╛рд╣рд░рдг рд╣реИрдВред
рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдЪрдХреНрд░:
WordCopy LDR r3, [r1], #4 STR r3, [r0], #4 SUBS r2, r2, #4 BGE WordCopy
рдирд┐рдпреЙрди рдХрдорд╛рдВрдб рдФрд░ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рд╕рд╛рде рд▓реВрдк:
NEONCopyPLD PLD [r1, #0xC0] VLDM r1!,{d0-d7} VSTM r0!,{d0-d7} SUBS r2,r2,#0x40 BGE NEONCopyPLD
рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ 64 рдмрд╛рдЗрдЯреНрд╕ рджреНрд╡рд╛рд░рд╛ рдХреЙрдкреА рдХрд░рдирд╛ 4 рдмрд╛рдЗрдЯреНрд╕ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬрд╝ рд╣реИ, рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреА рдХреЙрдкреА 10% рдХреА рд╡реГрджреНрдзрд┐ рджреЗрдЧреА, рд▓реЗрдХрд┐рди рд╢реЗрд╖ 40% рдХреЙрдкреАрдкреНрд░реЛрд╕реЗрд╕рд░ рдХрд╛ рдХрд╛рдо рджреЗрддреА рд╣реИред
рдХреЙрд░реНрдЯреЗрдХреНрд╕-рдПрдо
рдХреЛрд░реНрдЯреЗрдХреНрд╕-рдПрдо рдореЗрдВ рдПрдлрдкреАрдпреВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдПрдХ рд╕реЗ рдмрд╣реБрдд рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╣реИ рдХрд┐ рдЙрдкрд░реЛрдХреНрдд рдореИрдХреНрд░реЛ fpu-shny рд╕рдВрджрд░реНрдн рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рджрд┐рдЦрддрд╛ рд╣реИ
#define ARM_FPU_CONTEXT_SAVE_INC(tmp, stack) \ ldr tmp, =CPACR; \ ldr tmp, [tmp]; \ tst tmp, #0xF00000; \ beq fpu_out_save_inc; \ vstmia stack!, {s0-s31}; fpu_out_save_inc:
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, vstmia рдХрдорд╛рдВрдб рдХреЗрд╡рд▓ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ s0-s31 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХрдВрдЯреНрд░реЛрд▓ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЛ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдКрдВрдЧрд╛, рдореИрдВ рдХреЗрд╡рд▓ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░реВрдВрдЧрд╛ред рддреЛ, рд╣рдордиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреНрд░рдорд╢рдГ
рдХреЛрд░реНрдЯреЗрдХреНрд╕- рдПрдо 7 рдХреЗ рд╕рд╛рде рдПрд╕рдЯреАрдПрдо 32 рдПрдл 7 рдбрд┐рд╕реНрдХреЛрд╡рд░реА рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛, рд╣рдореЗрдВ рдХреНрд░рдорд╢рдГ рдПрдордПрдлрдкреАрдпреВ = fpv5-sp-d16 рдЭрдВрдбрд╛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореЛрдмрд╛рдЗрд▓ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ, рдЖрдкрдХреЛ рдХреЛрдкреНрд░реЛрд╕реЗрд╕рд░ рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдЕрдзрд┐рдХ рдмрд╛рд░реАрдХреА рд╕реЗ рджреЗрдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рд╣реА рдХреЛрд░реНрдЯреЗрдХреНрд╕-рдПрдо рдХреЗ рдкрд╛рд╕ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд┐рдХрд▓реНрдк рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЖрдкрдХрд╛ рд╡рд┐рдХрд▓реНрдк рджреЛрд╣рд░реА рд╕рдЯреАрдХрддрд╛ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХрд▓ рдХреЗ рд╕рд╛рде, рддреЛ D0-D16 рд░рдЬрд┐рд╕реНрдЯрд░ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕
stm32f4discovery рд╣реИ , рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рд╕рд╛рде S0-S31 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рд▓рд┐рдП рд╣рдо -mfpu = fpv4-sp-d16 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдореБрдЦреНрдп рдЕрдВрддрд░ рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рдирд┐рдпрдВрддреНрд░рдг рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рд╣реИ, рд╡реЗ рд╕реАрдзреЗ рдореБрдЦреНрдп рдХреЛрд░ рдХреЗ рдкрддрд╛ рд╕реНрдерд╛рди рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИрдВ, рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╡реЗ
рдХреЛрд░реНрдЯреЗрдХреНрд╕-рдПрдо 7 рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ
- рдЕрд▓рдЧ
рдХреЛрд░реНрдЯреЗрдХреНрд╕-рдПрдо 4 рд╣реИрдВ ред
рдирд┐рд╖реНрдХрд░реНрд╖
рдЗрд╕ рдкрд░ рдореИрдВ рдПрдЖрд░рдПрдо рдХреЗ рд▓рд┐рдП рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдкрдиреА рдЫреЛрдЯреА рдХрд╣рд╛рдиреА рд╕рдорд╛рдкреНрдд рдХрд░реВрдВрдЧрд╛ред рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдзреБрдирд┐рдХ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рди рдХреЗрд╡рд▓ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд▓рд┐рдП, рдмрд▓реНрдХрд┐ рд╕рд┐рдЧреНрдирд▓ рдпрд╛ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреА рдорд▓реНрдЯреАрдореАрдбрд┐рдпрд╛ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рднреА рдмрд╣реБрдд рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдФрд░ рдЙрдкрдпреБрдХреНрдд рд╣реИрдВред рдЗрд╕ рд╕рднреА рд╢рдХреНрддрд┐ рдХрд╛ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕ рд▓реЗрдЦ рдиреЗ рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХреАред