{"id":288032,"date":"2018-08-16T14:21:29","date_gmt":"2018-08-16T10:21:29","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=288032"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=288032","title":{"rendered":"\u041f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435, \u0447\u0442\u043e \u0432\u044b \u0445\u043e\u0442\u0435\u043b\u0438 \u0437\u043d\u0430\u0442\u044c \u043f\u0440\u043e \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u0432 ARM, \u043d\u043e \u0431\u043e\u044f\u043b\u0438\u0441\u044c \u0441\u043f\u0440\u043e\u0441\u0438\u0442\u044c"},"content":{"rendered":"\n<div data-io-article-url=\"https:\/\/habr.com\/company\/embox\/blog\/418295\/\" class=\"post__text post__text-html js-mediator-article\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/uz\/l3\/0w\/uzl30wgy6ecwi5eg7gmrtrdbzd4.jpeg\" align=\"right\" width=\"320\">\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0445\u043e\u0447\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 \u0434\u043b\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432 \u0441 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043e\u0439 ARM. \u0414\u0443\u043c\u0430\u044e, \u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u0430 \u043f\u0440\u0435\u0436\u0434\u0435 \u0432\u0441\u0435\u0433\u043e \u0442\u0435\u043c, \u043a\u0442\u043e \u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u0441\u0432\u043e\u044e \u041e\u0421 \u043d\u0430 ARM-\u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0438\u043c \u043d\u0443\u0436\u043d\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0439 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0442\u043e\u0447\u043a\u0438 (\u0447\u0442\u043e \u043c\u044b \u0438 \u0434\u0435\u043b\u0430\u043b\u0438 \u0434\u043b\u044f <a href=\"https:\/\/github.com\/embox\/embox\">Embox<\/a>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0434\u043e \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0442\u043e\u0447\u043a\u043e\u0439).<\/p>\n<p>  \u0418\u0442\u0430\u043a, \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043c.<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h2>\u0424\u043b\u0430\u0433\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430<\/h2>\n<p>  \u0414\u043b\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0442\u043e\u0447\u043a\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435 \u0444\u043b\u0430\u0433\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443. \u0411\u0435\u0433\u043b\u043e\u0435 <a href=\"https:\/\/gcc.gnu.org\/onlinedocs\/gcc\/ARM-Options.html\">\u0433\u0443\u0433\u043b\u0435\u043d\u0438\u0435<\/a> \u043d\u0430\u0441 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043c\u044b\u0441\u043b\u0438, \u0447\u0442\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0432\u0430\u0436\u043d\u044b \u0434\u0432\u0435 \u043e\u043f\u0446\u0438\u0438: -mfloat-abi \u0438 -mfpu. \u041e\u043f\u0446\u0438\u044f -mfloat-abi \u0437\u0430\u0434\u0430\u0435\u0442 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%94%D0%B2%D0%BE%D0%B8%D1%87%D0%BD%D1%8B%D0%B9_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81_%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B9\">ABI<\/a> \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 \u0438 \u043c\u043e\u0436\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u043e\u0434\u043d\u043e \u0438\u0437 \u0442\u0440\u0435\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439: \u2018soft\u2019, \u2018softfp\u2019 \u0438 \u2018hard\u2019. \u0412\u0430\u0440\u0438\u0430\u043d\u0442 \u2018soft\u2019, \u043a\u0430\u043a \u0438 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0438\u0437 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f, \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435 \u0432\u044b\u0437\u043e\u0432\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 (\u044d\u0442\u043e\u0442 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u0440\u0430\u043d\u044c\u0448\u0435). \u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0434\u0432\u0430 \u2018softfp\u2019 \u0438 \u2018hard\u2019 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0437\u0436\u0435, \u043f\u043e\u0441\u043b\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u044f \u043e\u043f\u0446\u0438\u0438 -mfpu.<\/p>\n<h2>\u0424\u043b\u0430\u0433 -mfpu \u0438 \u0432\u0435\u0440\u0441\u0438\u044f VFP<\/h2>\n<p>  \u041e\u043f\u0446\u0438\u044f -mfpu, \u043a\u0430\u043a \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0432 <a href=\"https:\/\/gcc.gnu.org\/onlinedocs\/gcc\/ARM-Options.html\">\u043e\u043d\u043b\u0430\u0439\u043d-\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 gcc<\/a>, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u0430\u0434\u0430\u0442\u044c \u0442\u0438\u043f \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u0443\u0440\u044b \u0438 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b:  <\/p>\n<blockquote><p>\u2018auto\u2019, \u2018vfpv2\u2019, \u2018vfpv3\u2019, \u2018vfpv3-fp16\u2019, \u2018vfpv3-d16\u2019, \u2018vfpv3-d16-fp16\u2019, \u2018vfpv3xd\u2019, \u2018vfpv3xd-fp16\u2019, \u2018neon-vfpv3\u2019, \u2018neon-fp16\u2019, \u2018vfpv4\u2019, \u2018vfpv4-d16\u2019, \u2018fpv4-sp-d16\u2019, \u2018neon-vfpv4\u2019, \u2018fpv5-d16\u2019, \u2018fpv5-sp-d16\u2019, \u2018fp-armv8\u2019, \u2018neon-fp-armv8\u2019 and \u2018crypto-neon-fp-armv8\u2019. \u041f\u0440\u0438\u0447\u0435\u043c \u2018neon\u2019 \u044d\u0442\u043e \u0442\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0447\u0442\u043e \u0438 \u2018neon-vfpv3\u2019, \u0430 \u2018vfp\u2019 \u044d\u0442\u043e \u2018vfpv2\u2019.<\/p><\/blockquote>\n<p> \u041c\u043e\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 (arm-none-eabi-gcc (15:5.4.1+svn241155-1) 5.4.1 20160919) \u0432\u044b\u0434\u0430\u0451\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a, \u043d\u043e \u0441\u0443\u0442\u0438 \u0434\u0435\u043b\u0430 \u044d\u0442\u043e \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442. \u041d\u0430\u043c \u0432 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u043a\u0430\u043a \u0432\u043b\u0438\u044f\u0435\u0442 \u0442\u043e\u0442 \u0438\u043b\u0438 \u0438\u043d\u043e\u0439 \u0444\u043b\u0430\u0433 \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430, \u043d\u0443 \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043a\u0430\u043a\u043e\u0439 \u0444\u043b\u0430\u0433 \u043a\u043e\u0433\u0434\u0430 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c.<\/p>\n<p>  \u042f \u043d\u0430\u0447\u0438\u043d\u0430\u043b \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 imx6, \u043d\u043e \u043e\u0442\u043b\u043e\u0436\u0438\u043c \u0438 \u0435\u0435 \u043d\u0435\u043d\u0430\u0434\u043e\u043b\u0433\u043e, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0441\u043e\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 neon \u0438\u043c\u0435\u0435\u0442 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043f\u043e\u0437\u0436\u0435, \u0430 \u043d\u0430\u0447\u043d\u0435\u043c \u0441 \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u044f \u2014 \u0441 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b <a href=\"http:\/\/infocenter.arm.com\/help\/index.jsp?topic=\/com.arm.doc.dui0159b\/Cegeadbj.html\">integrator\/cp<\/a>,<br \/>  \u0421\u0430\u043c\u043e\u0439 \u043f\u043b\u0430\u0442\u044b \u0443 \u043c\u0435\u043d\u044f \u043d\u0435\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0442\u043b\u0430\u0434\u043a\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043b\u0430\u0441\u044c \u043d\u0430 \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0435 qemu. \u0412 qemu \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 Interator\/cp \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0430 \u043d\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0435 <a href=\"https:\/\/wiki.qemu.org\/Documentation\/Platforms\/ARM\">ARM926EJ-S<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0441\u043e\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 <a href=\"http:\/\/infocenter.arm.com\/help\/index.jsp?topic=\/com.arm.doc.ddi0287b\/i1019986.html\">VFP9-S<\/a>. \u0414\u0430\u043d\u043d\u044b\u0439 \u0441\u043e\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0443 Vector Floating-point Architecture version 2 (VFPv2). \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c -mfpu=vfpv2, \u043d\u043e \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u043e\u043f\u0446\u0438\u0439 \u043c\u043e\u0435\u0433\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430, \u0442\u0430\u043a\u043e\u0433\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u043d\u0435 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c. \u041d\u0430 <a href=\"https:\/\/www.linuxquestions.org\/questions\/linux-embedded-and-single-board-computer-78\/compiling-hello-world-c-program-for-arm-arm926ej-s-rev-5-v5l-with-arm-linux-gnueabi-4175457470\/\">\u043f\u0440\u043e\u0441\u0442\u043e\u0440\u0430\u0445 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430<\/a> \u044f \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u043b \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0441 \u0444\u043b\u0430\u0433\u0430\u043c\u0438 -mcpu=arm926ej-s -mfpu=vfpv3-d16, \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b, \u0438 \u0443 \u043c\u0435\u043d\u044f \u0432\u0441\u0435 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u043b\u043e\u0441\u044c. \u041f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b <a href=\"http:\/\/infocenter.arm.com\/help\/index.jsp?topic=\/com.arm.doc.ddi0222b\/ch02s09s09.html\">\u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 undefined instruction<\/a>, \u0447\u0442\u043e \u0431\u044b\u043b\u043e \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u043e, \u0432\u0435\u0434\u044c \u0441\u043e\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0431\u044b\u043b <a href=\"http:\/\/infocenter.arm.com\/help\/index.jsp?topic=\/com.arm.doc.ddi0240b\/ch05s11s04.html\">\u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d<\/a>.<\/p>\n<p>  \u0414\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b, \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0441\u043e\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u043d\u0443\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0431\u0438\u0442 EN [30] \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435 <a href=\"http:\/\/infocenter.arm.com\/help\/index.jsp?topic=\/com.arm.doc.ddi0238c\/CCDHCFGA.html\">FPEXC<\/a>. \u0414\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u044d\u0442\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u044b VMSR<\/p>\n<pre><code class=\"cpp\">    \/* Enable FPU extensions *\/                                             asm volatile (\"VMSR FPEXC, %0\" : : \"r\" (1 &lt;&lt; 30);<\/code><\/pre>\n<p>  \u0412\u043e\u043e\u0431\u0449\u0435-\u0442\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u0430 VMSR \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u043e\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u043c \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u0435\u0441\u043b\u0438 \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d \u0441\u043e\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440, \u043d\u043e \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a \u044d\u0442\u043e\u043c\u0443 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0443 <a href=\"http:\/\/infocenter.arm.com\/help\/index.jsp?topic=\/com.arm.doc.ddi0238c\/CCDHCFGA.html\">\u0435\u0433\u043e \u043d\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442<\/a>. \u041f\u0440\u0430\u0432\u0434\u0430, \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445, \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a \u044d\u0442\u043e\u043c\u0443 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0443 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0432 <a href=\"http:\/\/infocenter.arm.com\/help\/index.jsp?topic=\/com.arm.doc.dui0068b\/BCFHHBDD.html\">\u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435<\/a>.<\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u043e\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u0441\u0442\u0430\u043b\u0438 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442\u044c \u043d\u0430\u0448\u0438 \u0442\u0435\u0441\u0442\u044b \u043d\u0430 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u041d\u043e \u043a\u043e\u0433\u0434\u0430 \u044f \u0432\u043a\u043b\u044e\u0447\u0438\u043b \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e (-O2), \u0441\u0442\u0430\u043b\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0442\u044c \u0443\u0436\u0435 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u043e\u0435 \u0440\u0430\u043d\u0435\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 undefined instruction. \u041f\u0440\u0438\u0447\u0435\u043c \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u043b\u043e \u043e\u043d\u043e \u043d\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 <a href=\"http:\/\/infocenter.arm.com\/help\/index.jsp?topic=\/com.arm.doc.dui0489c\/CJAEFGHE.html\">vmov<\/a> \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u044b\u0437\u044b\u0432\u0430\u043b\u0430\u0441\u044c \u0432 \u043a\u043e\u0434\u0435 \u0440\u0430\u043d\u044c\u0448\u0435, \u043d\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u043b\u0430\u0441\u044c \u0443\u0441\u043f\u0435\u0448\u043d\u043e (\u0431\u0435\u0437 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f). \u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u044f \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b \u0432 \u043a\u043e\u043d\u0446\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0444\u0440\u0430\u0437\u0443 \u201cThe instructions that copy immediate constants are available in VFPv3\u201d (\u0442.\u0435. \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0441 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430\u043c\u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 VFPv3). \u0418 \u0440\u0435\u0448\u0438\u043b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u043a\u0430\u043a\u0430\u044f \u0436\u0435 \u0432\u0435\u0440\u0441\u0438\u044f \u0440\u0435\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0432 \u043c\u043e\u0435\u043c \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0435. \u0412\u0435\u0440\u0441\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435 <a href=\"http:\/\/infocenter.arm.com\/help\/index.jsp?topic=\/com.arm.doc.ddi0238c\/CHDCGIBE.html\">FPSID<\/a>. \u0418\u0437 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0441\u043b\u0435\u0434\u0443\u0435\u0442, \u0447\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c 0x41011090. \u042d\u0442\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 1 \u0432 \u043f\u043e\u043b\u0435 architecture [19..16] \u0442\u043e \u0435\u0441\u0442\u044c VFPv2. \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0441\u0434\u0435\u043b\u0430\u0432 \u0440\u0430\u0441\u043f\u0435\u0447\u0430\u0442\u043a\u0443 \u043f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435, \u044f \u044d\u0442\u043e \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043b<\/p>\n<pre><code>    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<\/code><\/pre>\n<p>  \u041f\u0440\u043e\u0447\u0438\u0442\u0430\u0432 \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0447\u0442\u043e \u2018vfp\u2019 \u044d\u0442\u043e alias \u2018vfpv2\u2019, \u044f \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u043b \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0444\u043b\u0430\u0433, \u0432\u0441\u0435 \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e. \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044f\u0441\u044c \u043a <a href=\"https:\/\/www.linuxquestions.org\/questions\/linux-embedded-and-single-board-computer-78\/compiling-hello-world-c-program-for-arm-arm926ej-s-rev-5-v5l-with-arm-linux-gnueabi-4175457470\/\">\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435<\/a>, \u0433\u0434\u0435 \u044f \u0443\u0432\u0438\u0434\u0435\u043b \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u044f \u0444\u043b\u0430\u0433\u043e\u0432 -mcpu=arm926ej-s -mfpu=vfpv3-d16 \u043e\u0442\u043c\u0435\u0447\u0443, \u0447\u0442\u043e \u0431\u044b\u043b \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u0435\u043d, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0444\u043b\u0430\u0433\u043e\u0432 \u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0443\u0435\u0442 -mfloat-abi=soft. \u0422\u043e \u0435\u0441\u0442\u044c, \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435\u0442. \u0422\u043e\u0447\u043d\u0435\u0435, -mfpu \u0438\u043c\u0435\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e \u043e\u0442\u043b\u0438\u0447\u043d\u043e\u0435 \u043e\u0442 \u2018soft\u2019 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u043b\u044f -mfloat-abi.<\/p>\n<h2>\u0410\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440<\/h2>\n<p>  \u041f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043e\u0431 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0435. \u0412\u0435\u0434\u044c \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0430, \u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u0435 \u0437\u043d\u0430\u0435\u0442.<\/p>\n<h3>\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u044b<\/h3>\n<p>  \u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432. VFP \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0432\u0435\u0440\u0448\u0430\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0441 32-\u0431\u0438\u0442\u043d\u044b\u043c\u0438 (s0..s31) \u0438 64-\u0431\u0438\u0442\u043d\u044b\u043c\u0438 (d0..d15) \u0447\u0438\u0441\u043b\u0430\u043c\u0438 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0442\u043e\u0447\u043a\u043e\u0439, \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u044d\u0442\u0438\u043c\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c\u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435 \u043d\u0438\u0436\u0435.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/jr\/lo\/w0\/jrlow0oljuvwjd0y5bb-qkxlyh4.png\"><\/p>\n<p>  Q0-Q15 \u2014 \u044d\u0442\u043e 128-\u0431\u0438\u0442\u043d\u044b\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0438\u0437 \u0431\u043e\u043b\u0435\u0435 \u0441\u0442\u0430\u0440\u0448\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u0439 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 SIMD, \u043e \u043d\u0438\u0445 \u0447\u0443\u0442\u044c \u043f\u043e\u0437\u0436\u0435.<\/p>\n<h3>\u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u043a\u043e\u043c\u0430\u043d\u0434<\/h3>\n<p>  \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 VFP-\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c\u0438 \u0441\u0442\u043e\u0438\u0442 \u043e\u0442\u0434\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443, \u043d\u043e \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e. \u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430 \u043a\u043e\u043c\u0430\u043d\u0434 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0430 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c\u0438 \u043e\u0431\u0449\u0435\u0433\u043e \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u043d\u043e\u0432\u044b\u043c\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c\u0438 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0442\u0440\u0443\u0434\u0430. \u0427\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0430 \u201cv\u201d.<\/p>\n<pre><code>vmov d0, r0, r1 \/* \u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f r0 \u0438 r1, \u0442.\u043a. \u0432 d0 64 \u0431\u0438\u0442\u0430, \u0430 \u0432 r0-1 \u0442\u043e\u043b\u044c\u043a\u043e 32 *\/ vmov r0, r1, d0 vadd d0, d1, d2 vldr d0, r0 vstm r0!, {d0-d15} vldm r0!, {d0-d15}<\/code><\/pre>\n<p>  \u0418 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. \u041f\u043e\u043b\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u043e\u043c\u0430\u043d\u0434 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 <a href=\"http:\/\/infocenter.arm.com\/help\/topic\/com.arm.doc.qrc0007e\/QRC0007_VFP.pdf\">\u0441\u0430\u0439\u0442\u0435 ARM<\/a>.<\/p>\n<p>  \u041d\u0443 \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u0437\u0430\u0431\u044b\u0432\u0430\u0442\u044c \u043e \u0432\u0435\u0440\u0441\u0438\u0438 VFP, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u043e \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0439 \u0432\u0440\u043e\u0434\u0435 \u0442\u043e\u0439, \u0447\u0442\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u0432\u044b\u0448\u0435.<\/p>\n<h2>\u0424\u043b\u0430\u0433 -mfloat-abi \u2018softfp\u2019 \u0438 \u2018hard\u2019 <\/h2>\n<p>  \u0412\u0435\u0440\u043d\u0435\u043c\u0441\u044f \u043a -mfloat-abi. \u0415\u0441\u043b\u0438 \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c <a href=\"https:\/\/gcc.gnu.org\/onlinedocs\/gcc\/ARM-Options.html\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e<\/a>, \u0442\u043e \u0443\u0432\u0438\u0434\u0438\u043c:  <\/p>\n<blockquote><p>\u2018softfp\u2019 allows the generation of code using hardware floating-point instructions, but still uses the soft-float calling conventions. \u2018hard\u2019 allows generation of floating-point instructions and uses FPU-specific calling conventions.<\/p><\/blockquote>\n<p> \u0422\u043e \u0435\u0441\u0442\u044c, \u0440\u0435\u0447\u044c \u0438\u0434\u0435\u0442 \u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e. \u041d\u043e, \u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435, \u043c\u043d\u0435 \u0431\u044b\u043b\u043e \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0432 \u0447\u0435\u043c \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u043c\u0435\u0436\u0434\u0443 \u201csoft-float\u201d \u0438 \u201cFPU-specific\u201d calling conventions. \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u0432, \u0447\u0442\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 hard \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0442\u043e\u0447\u043a\u043e\u0439, \u0430 \u0441\u043b\u0443\u0447\u0430\u0435 softfp \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b, \u044f \u043d\u0430\u0448\u0435\u043b \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u044d\u0442\u043e\u043c\u0443 \u043d\u0430 <a href=\"https:\/\/wiki.debian.org\/ArmHardFloatPort\/VfpComparison\">\u0432\u0438\u043a\u0438 debian<\/a>. \u0418 \u0445\u043e\u0442\u044f \u044d\u0442\u043e \u0434\u043b\u044f \u0441\u043e\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432 NEON, \u043d\u043e \u044d\u0442\u043e \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u0415\u0449\u0435 \u043e\u0434\u0438\u043d \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442, \u0447\u0442\u043e \u043f\u0440\u0438 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435 softfp \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043c\u043e\u0436\u0435\u0442, \u043d\u043e \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u0443\u044e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443:  <\/p>\n<blockquote><p>\u201cCompiler can make smart choices about when and if it generates emulated or real FPU instructions depending on chosen FPU type (-mfpu=) \u201c<\/p><\/blockquote>\n<p> \u0414\u043b\u044f \u043b\u0443\u0447\u0448\u0435\u0439 \u044f\u0441\u043d\u043e\u0441\u0442\u0438 \u044f \u0440\u0435\u0448\u0438\u043b \u043f\u043e\u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0438 \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u0438\u0432\u0438\u043b\u0441\u044f, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043f\u0440\u0438 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u0439 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 -O0 \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u0431\u044b\u043b\u0430 \u043e\u0447\u0435\u043d\u044c \u043d\u0435\u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0438 \u043a\u0430\u0441\u0430\u043b\u0430\u0441\u044c \u043d\u0435 \u0442\u0435\u0445 \u043c\u0435\u0441\u0442, \u0433\u0434\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0430\u044f \u0442\u043e\u0447\u043a\u0430. \u0414\u043e\u0433\u0430\u0434\u0430\u0432\u0448\u0438\u0441\u044c, \u0447\u0442\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0441\u0435 \u0443\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u0441\u0442\u0435\u043a, \u0430 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b, \u044f \u0432\u043a\u043b\u044e\u0447\u0438\u043b \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e -O2 \u0438 \u043e\u043f\u044f\u0442\u044c \u0443\u0434\u0438\u0432\u0438\u043b\u0441\u044f, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0441 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043d\u0430\u0447\u0438\u043d\u0430\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0442\u043e\u0447\u043a\u043e\u0439, \u043a\u0430\u043a \u0434\u043b\u044f \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 hard, \u0442\u0430\u043a \u0438 \u0434\u043b\u044f sotffp, \u0438 \u0440\u0430\u0437\u043d\u0438\u0446\u0430, \u043a\u0430\u043a \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 -O0 \u0431\u044b\u043b\u0430 \u043e\u0447\u0435\u043d\u044c \u043d\u0435\u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f. \u0412 \u0438\u0442\u043e\u0433\u0435 \u0434\u043b\u044f \u0441\u0435\u0431\u044f \u044f \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u043b \u044d\u0442\u043e \u0442\u0435\u043c \u0447\u0442\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0440\u0435\u0448\u0430\u0435\u0442 <a href=\"https:\/\/wiki.debian.org\/ArmHardFloatPort\/VfpComparison\">\u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443<\/a>, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u0443\u044e \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043c\u0435\u0436\u0434\u0443 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c\u0438 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 \u0438 \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u043c\u0438, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u0430\u0434\u0430\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c. \u0418 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043f\u0440\u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0438\u043c\u0435\u044e\u0449\u0438\u0435\u0441\u044f \u0432 \u0435\u0433\u043e \u0440\u0430\u0441\u043f\u043e\u0440\u044f\u0436\u0435\u043d\u0438\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u044b.<\/p>\n<p>  \u041d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441, \u043a\u0430\u043a\u043e\u0439 \u0436\u0435 \u0444\u043b\u0430\u0433 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u2018softfp\u2019 \u0438\u043b\u0438 \u2018hard\u2019, \u044f \u043e\u0442\u0432\u0435\u0442\u0438\u043b \u0434\u043b\u044f \u0441\u0435\u0431\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c: \u0432\u0435\u0437\u0434\u0435 \u0433\u0434\u0435 \u043d\u0435\u0442 \u0443\u0436\u0435 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0441 \u0444\u043b\u0430\u0433\u043e\u043c \u2018softfp\u2019 \u0447\u0430\u0441\u0442\u0435\u0439, \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u2018hard\u2019. \u0415\u0441\u043b\u0438 \u0436\u0435 \u0442\u0430\u043a\u0438\u0435 \u0435\u0441\u0442\u044c, \u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u2018softfp\u2019.<\/p>\n<h2>\u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430<\/h2>\n<p>  \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 Embox \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0432\u044b\u0442\u0435\u0441\u043d\u044f\u044e\u0449\u0443\u044e \u043c\u043d\u043e\u0433\u043e\u0437\u0430\u0434\u0430\u0447\u043d\u043e\u0441\u0442\u044c, \u0434\u043b\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0432 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0435, \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043d\u0443\u0436\u043d\u0430 \u0431\u044b\u043b\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0441\u043e\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430. \u0422\u0443\u0442 \u0435\u0441\u0442\u044c \u043f\u0430\u0440\u0430 \u043d\u044e\u0430\u043d\u0441\u043e\u0432. \u041f\u0435\u0440\u0432\u044b\u0439: \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0447\u0442\u043e <a href=\"http:\/\/infocenter.arm.com\/help\/index.jsp?topic=\/com.arm.doc.dui0283b\/Bcfchhif.html\">\u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0441\u043e \u0441\u0442\u0435\u043a\u043e\u043c \u0434\u043b\u044f \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0438\u0445 \u0442\u043e\u0447\u0435\u043a (vstm\/vldm) \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442 \u043d\u0435 \u0432\u0441\u0435 \u0440\u0435\u0436\u0438\u043c\u044b<\/a>. \u0412\u0442\u043e\u0440\u043e\u0439: \u044d\u0442\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u0431\u043e\u043b\u0435\u0435, \u0447\u0435\u043c \u0441 \u0448\u0435\u0441\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u044c\u044e 64-\u0431\u0438\u0442\u043d\u044b\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432. \u0415\u0441\u043b\u0438 \u0437\u0430 \u0440\u0430\u0437 \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c\/\u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432, \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0432\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438.<\/p>\n<p>  \u0415\u0449\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u043e\u0434\u043d\u0443 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u043f\u043e 256 \u0431\u0430\u0439\u0442 VFP-\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e (\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u043e\u0431\u0449\u0435\u0433\u043e \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0442 \u0432\u0441\u0435\u0433\u043e 64 \u0431\u0430\u0439\u0442\u0430, \u0442\u0430\u043a \u0447\u0442\u043e \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f). \u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e\u0439 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0432\u0435\u0440\u0448\u0430\u0442\u044c \u044d\u0442\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u044d\u0442\u0438\u043c\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c\u0438 \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f.<\/p>\n<p>  \u041a\u0430\u043a \u044f \u0443\u0436\u0435 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b, \u043f\u0440\u0438 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u043c \u0441\u043e\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0435 VFP \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u043a \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044e \u201cUndefined Instruction\u201d. \u0412 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0435 \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0447\u0435\u043c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0432\u044b\u0437\u0432\u0430\u043d\u043e, \u0438 \u0435\u0441\u043b\u0438 \u0434\u0435\u043b\u043e \u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 VPF-\u0441\u043e\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430, \u0442\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u043e\u043c\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0439 VFP-\u0441\u043e\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440.<\/p>\n<p>  \u0412 \u0438\u0442\u043e\u0433\u0435 \u0443\u0436\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435\/\u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u043b\u043e\u0441\u044c \u043c\u0430\u043a\u0440\u043e\u0441\u0430\u043c\u0438<\/p>\n<pre><code>#define ARM_FPU_CONTEXT_SAVE_INC(tmp, stack) \\     vmrs      tmp, FPEXC ; \\     stmia     stack!, {tmp}; \\     ands      tmp, tmp, #1&lt;&lt;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&lt;&lt;30; \\     beq       fpu_out_load_inc; \\     vldmia    stack!, {d0-d15}; \\ fpu_out_load_inc:<\/code><\/pre>\n<p>  \u0414\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u0432 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0442\u043e\u0447\u043a\u0438 \u043c\u044b \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438 \u0442\u0435\u0441\u0442, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432 \u043e\u0434\u043d\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u0435 \u0432 \u0446\u0438\u043a\u043b\u0435 \u043c\u044b \u0434\u0435\u043b\u0430\u0435\u043c \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435, \u0430 \u0432 \u0434\u0440\u0443\u0433\u043e\u043c \u0434\u0435\u043b\u0435\u043d\u0438\u0435, \u043f\u043e\u0442\u043e\u043c \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b.<\/p>\n<pre><code class=\"cpp\">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 &lt; TICK_COUNT; ) {         res_out[0][i] = res;          if (i == 0 || res_out[1][i - 1] &gt; 0) {             i++;         }          if (res &gt; 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 &lt; TICK_COUNT; ) {         res_out[1][i] = res;          if (res_out[0][i] != 0) {             i++;         }          if (res &lt; 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(&amp;threads[0], NULL, fpu_context_thr1_hnd, &amp;tid);     if (status != 0) {         test_assert(0);     }      status = pthread_create(&amp;threads[1], NULL, fpu_context_thr2_hnd, &amp;tid);     if (status != 0) {         test_assert(0);     }      pthread_join(threads[0], (void**)&amp;status);     pthread_join(threads[1], (void**)&amp;status);      test_assert(res_out[0][0] != 0 &amp;&amp; res_out[1][0] != 0);      for (int i = 1; i &lt; TICK_COUNT; i++) {         test_assert(res_out[0][i] &lt; res_out[0][i - 1]);         test_assert(res_out[1][i] &gt; res_out[1][i - 1]);     } }<\/code><\/pre>\n<p>  \u0422\u0435\u0441\u0442 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043b \u043f\u0440\u0438 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u0439 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u0438 \u0443\u043a\u0430\u0437\u0430\u043b\u0438 \u0432 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0442\u0435\u0441\u0442\u0430, \u0447\u0442\u043e \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d \u0441 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0435\u0439, EMBOX_TEST_SUITE(\u00abFPU context consistency test. Must be compiled with -02\u00bb); \u0445\u043e\u0442\u044f \u0437\u043d\u0430\u0435\u043c, \u0447\u0442\u043e \u0442\u0435\u0441\u0442\u044b \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u043d\u0430 \u044d\u0442\u043e \u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c\u0441\u044f.<\/p>\n<h2>\u0421\u043e\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 NEON \u0438 SIMD<\/h2>\n<p>  \u041f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u043f\u043e\u0447\u0435\u043c\u0443 \u044f \u043e\u0442\u043b\u043e\u0436\u0438\u043b \u0440\u0430\u0441\u0441\u043a\u0430\u0437 \u043f\u0440\u043e imx6. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c \u0447\u0442\u043e \u043e\u043d \u043e\u0441\u043d\u043e\u0432\u0430\u043d \u043d\u0430 \u044f\u0434\u0440\u0435 Cortex-A9 \u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0439 \u0441\u043e\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 NEON (https:\/\/developer.arm.com\/technologies\/neon ). NEON \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f VFPv3, \u043d\u043e \u044d\u0442\u043e \u0435\u0449\u0435 \u0438 \u0441\u043e\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 SIMD. VFP \u0438 NEON \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043e\u0434\u043d\u0438 \u0438 \u0442\u0435 \u0436\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b. VFP \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b 32- \u0438 64-\u0440\u0430\u0437\u0440\u044f\u0434\u043d\u044b\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b, \u0430 NEON \u2014 64- \u0438 128-\u0431\u0438\u0442\u043d\u044b\u0435, \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u043a\u0430\u043a \u0440\u0430\u0437 \u0438 \u0431\u044b\u043b\u0438 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u044b Q0-Q16. \u041f\u043e\u043c\u0438\u043c\u043e \u0446\u0435\u043b\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0438 \u0447\u0438\u0441\u0435\u043b \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 NEON \u0442\u0430\u043a\u0436\u0435 \u0443\u043c\u0435\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043a\u043e\u043b\u044c\u0446\u043e\u043c \u043c\u043d\u043e\u0433\u043e\u0447\u043b\u0435\u043d\u043e\u0432 16-\u0439 \u0438\u043b\u0438 8-\u0439 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u043f\u043e \u043c\u043e\u0434\u0443\u043b\u044e 2.<\/p>\n<p>  \u0420\u0435\u0436\u0438\u043c vfp \u0434\u043b\u044f NEON \u043f\u043e\u0447\u0442\u0438 \u043d\u0438\u0447\u0435\u043c \u043d\u0435 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u043e\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 vfp9-s. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043b\u0443\u0447\u0448\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0434\u043b\u044f -mfpu \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b vfpv3 \u0438\u043b\u0438 vfpv3-d32 \u0434\u043b\u044f \u043b\u0443\u0447\u0448\u0435\u0439 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u043d \u0438\u043c\u0435\u0435\u0442 32 64-\u0431\u0438\u0442\u043d\u044b\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430. \u0418 \u0434\u043b\u044f \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0441\u043e\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430\u043c c10 \u0438 c11. \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043c\u0430\u043d\u0434<\/p>\n<pre><code class=\"cpp\">\/* Allow access to c10 &amp; c11 coprocessors *\/     asm volatile (\"mrc p15, 0, %0, c1, c0, 2\" : \"=r\" (val) :);     val |= 0xf &lt;&lt; 20;     asm volatile (\"mcr p15, 0, %0, c1, c0, 2\" : : \"r\" (val));<\/code><\/pre>\n<p>  \u043d\u043e \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u043e\u0442\u043b\u0438\u0447\u0438\u0439 \u043d\u0435\u0442.<\/p>\n<p>  \u0414\u0440\u0443\u0433\u043e\u0435 \u0434\u0435\u043b\u043e \u0435\u0441\u043b\u0438 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c -mfpu=neon, \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c SIMD-\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438.<\/p>\n<h2>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 SIMD \u0432 C<\/h2>\n<p>  \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b &lt;&lt;\u0440\u0430\u0441\u0441\u043e\u0432\u044b\u0432\u0430\u0442\u044c&gt;&gt; \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c \u0432\u0440\u0443\u0447\u043d\u0443\u044e, \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0438\u043d\u043a\u043b\u0443\u0434\u0438\u0442\u044c \u201carm_neon.h\u201d \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0442\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445:<br \/>  float32x4_t \u0434\u043b\u044f \u0447\u0435\u0442\u044b\u0440\u0451\u0445 32-\u0431\u0438\u0442\u043d\u044b\u0445 \u0444\u043b\u043e\u0430\u0442\u043e\u0432 \u0432 \u043e\u0434\u043d\u043e\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435, uint8x8_t \u0434\u043b\u044f \u0432\u043e\u0441\u044c\u043c\u0438 8-\u0431\u0438\u0442\u043d\u044b\u0445 \u0446\u0435\u043b\u044b\u0445 \u0447\u0438\u0441\u0435\u043b \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. \u0414\u043b\u044f \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a \u043e\u0434\u043d\u043e\u043c\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u043a\u0430\u043a \u043a \u043c\u0430\u0441\u0441\u0438\u0432\u0443, \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435, \u043f\u0440\u0438\u0441\u0432\u043e\u0435\u043d\u0438\u0435 \u0438 \u0442.\u0434. \u043a\u0430\u043a \u0434\u043b\u044f \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code class=\"cpp\">uint32x4_t a = {1, 2, 3, 4}, b = {5, 6, 7, 8}; uint32x4_t c = a * b; printf(\u201cResult=[%d, %d, %d, %d]\\n\u201d, c[0], c[1], c[2], c[3]);<\/code><\/pre>\n<p>  \u0421\u0430\u043c\u043e \u0441\u043e\u0431\u043e\u0439, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044e \u043f\u0440\u043e\u0449\u0435. \u0414\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 GCC \u0444\u043b\u0430\u0433 -ftree-vectorize.<\/p>\n<pre><code class=\"cpp\">void simd_test() {     int a[LEN], b[LEN], c[LEN];      for (int i = 0; i &lt; LEN; i++) {         a[i] = i;         b[i] = LEN - i;     }      for (int i = 0; i &lt; LEN; i++) {         c[i] = a[i] + b[i];     }      for (int i = 0; i &lt; LEN; i++) {         printf(\"c[i] = %d\\n\", c[i]);     } }<\/code><\/pre>\n<p>  \u0426\u0438\u043a\u043b \u0441\u043e \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434:<\/p>\n<pre><code>600059a0:       f4610adf        vld1.64 {d16-d17}, [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 {d18-d19}, [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 &lt;foo+0x58&gt;                600059cc:       e28d5dbf        add     r5, sp, #12224  ; 0x2fc0           600059d0:       e2444004        sub     r4, r4, #4                         600059d4:       e285503c        add     r5, r5, #60     ; 0x3c  <\/code><\/pre>\n<p>  \u041f\u0440\u043e\u0432\u0435\u0434\u044f \u0442\u0435\u0441\u0442\u044b \u043d\u0430 \u0440\u0430\u0441\u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u0434, \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438, \u0447\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432 \u0446\u0438\u043a\u043b\u0435, \u043f\u0440\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0438 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0434\u0430\u0435\u0442 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u0430\u0436 \u0432 7 \u0440\u0430\u0437. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u043b\u0438\u044f\u0435\u0442 \u0440\u0430\u0441\u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447\u0430\u0445, \u0432\u0437\u044f\u043b\u0438 MESA3d \u0441 \u0435\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0439 \u044d\u043c\u0443\u043b\u044f\u0446\u0438\u0435\u0439 \u0438 \u043f\u043e\u043c\u0435\u0440\u0438\u043b\u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e fps \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0444\u043b\u0430\u0433\u0430\u043c\u0438, \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u0432\u044b\u0438\u0433\u0440\u044b\u0448 \u0432 2 \u043a\u0430\u0434\u0440\u0430 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 (15 \u043f\u0440\u043e\u0442\u0438\u0432 13), \u0442\u043e \u0435\u0441\u0442\u044c, \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u043e\u043a\u043e\u043b\u043e 15-20%.<\/p>\n<p>  \u041f\u0440\u0438\u0432\u0435\u0434\u0443 \u0435\u0449\u0435 \u043e\u0434\u0438\u043d <a href=\"http:\/\/infocenter.arm.com\/help\/index.jsp?topic=\/com.arm.doc.faqs\/ka13544.html\">\u043f\u0440\u0438\u043c\u0435\u0440 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043c\u0430\u043d\u0434 NEON<\/a>, \u043d\u0435 \u043d\u0430\u0448\u0435\u0433\u043e, \u0430 \u043e\u0442 ARM-\u0430.<\/p>\n<p>  \u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u0443\u0441\u043a\u043e\u0440\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0447\u0442\u0438 \u043d\u0430 50 \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u043e\u0432 \u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 \u043e\u0431\u044b\u0447\u043d\u044b\u043c. \u041f\u0440\u0430\u0432\u0434\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0442\u0430\u043c \u043d\u0430 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0435.<\/p>\n<p>  \u041e\u0431\u044b\u0447\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f:<\/p>\n<pre><code>WordCopy       LDR r3, [r1], #4       STR r3, [r0], #4       SUBS r2, r2, #4       BGE WordCopy<\/code><\/pre>\n<p>  \u0446\u0438\u043a\u043b \u0441 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c\u0438 \u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c\u0438 neon:<\/p>\n<pre><code>NEONCopyPLD       PLD [r1, #0xC0]       VLDM r1!,{d0-d7}       VSTM r0!,{d0-d7}       SUBS r2,r2,#0x40   BGE NEONCopyPLD<\/code><\/pre>\n<p>  \u041f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e 64 \u0431\u0430\u0439\u0442\u0430 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0447\u0435\u043c \u043f\u043e 4 \u0438 \u0442\u0430\u043a\u043e\u0435 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u0430\u0441\u0442 \u043f\u0440\u0438\u0440\u043e\u0441\u0442 \u043d\u0430 10%, \u043d\u043e \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 40% \u043f\u043e\u0445\u043e\u0436\u0435 \u0434\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441\u043e\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430.<\/p>\n<h2>Cortex-M<\/h2>\n<p>  \u0420\u0430\u0431\u043e\u0442\u0430 \u0441 FPU \u0432 Cortex-M \u043c\u0430\u043b\u043e \u0447\u0435\u043c \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0433\u043e \u0432\u044b\u0448\u0435. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u043e\u0442 \u0442\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 \u0432\u044b\u0448\u0435 \u043c\u0430\u043a\u0440\u043e\u0441 \u0434\u043b\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f fpu-\u0448\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430<\/p>\n<pre><code>#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:<\/code><\/pre>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 vstmia \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b s0-s31 \u0438 \u043f\u043e-\u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435 \u0431\u0443\u0434\u0443 \u0441\u0438\u043b\u044c\u043d\u043e \u0432\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438, \u043e\u0431\u044a\u044f\u0441\u043d\u044e \u0442\u043e\u043b\u044c\u043a\u043e diff. \u0418\u0442\u0430\u043a, \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0434\u043b\u044f STM32F7discovery c <a href=\"http:\/\/infocenter.arm.com\/help\/index.jsp?topic=\/com.arm.doc.ddi0489b\/Chdefdgf.html\">cortex-m7<\/a> \u0434\u043b\u044f \u043d\u0435\u0433\u043e, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0444\u043b\u0430\u0433 -mfpu=fpv5-sp-d16. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0432 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445, \u043d\u0443\u0436\u043d\u043e \u0435\u0449\u0435 \u0431\u043e\u043b\u0435\u0435 \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u044e \u0441\u043e\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0443 \u043e\u0434\u043d\u043e\u0433\u043e \u0438 \u0442\u043e\u0433\u043e \u0436\u0435 cortex-m. \u0422\u0430\u043a, \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043d\u0435 \u0441 \u0434\u0432\u043e\u0439\u043d\u043e\u0439 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c\u044e, \u0430 \u0441 \u043e\u0434\u0438\u043d\u0430\u0440\u043d\u043e\u0439, \u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u0431\u044b\u0442\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 D0-D16, \u043a\u0430\u043a \u0443 \u043d\u0430\u0441 \u0432 <a href=\"http:\/\/infocenter.arm.com\/help\/index.jsp?topic=\/com.arm.doc.100166_0001_00_en\/ric1417175936874.html\">stm32f4discovery<\/a>, \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0441 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c\u0438 S0-S31. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c -mfpu=fpv4-sp-d16.<\/p>\n<p>  \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u043c \u0436\u0435 \u043e\u0442\u043b\u0438\u0447\u0438\u0435\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u043e\u043d\u0438 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u043f\u0440\u044f\u043c\u043e \u0432 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u044f\u0434\u0440\u0430 \u0434\u043b\u044f \u043f\u0440\u0438\u0447\u0435\u043c \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u043e\u043d\u0438 \u0440\u0430\u0437\u043d\u044b\u0435 <a href=\"http:\/\/infocenter.arm.com\/help\/index.jsp?topic=\/com.arm.doc.100166_0001_00_en\/ric1417779386775.html\">cortex-m4<\/a> \u0434\u043b\u044f <a href=\"http:\/\/infocenter.arm.com\/help\/index.jsp?topic=\/com.arm.doc.100166_0001_00_en\/ric1417779386775.html\">cortex-m7<\/a>.<\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>  \u041d\u0430 \u044d\u0442\u043e\u043c \u044f \u0437\u0430\u043a\u043e\u043d\u0447\u0443 \u0441\u0432\u043e\u0439 \u043a\u0440\u0430\u0442\u043a\u0438\u0439 \u0440\u0430\u0441\u0441\u043a\u0430\u0437 \u043f\u0440\u043e \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u0434\u043b\u044f ARM. \u041e\u0442\u043c\u0435\u0447\u0443, \u0447\u0442\u043e \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b \u043e\u0447\u0435\u043d\u044c \u043c\u043e\u0449\u043d\u044b\u0435 \u0438 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u043d\u043e \u0438 \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0438\u043b\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u0440\u043e\u0434\u0430 \u043c\u0443\u043b\u044c\u0442\u0438\u043c\u0435\u0434\u0438\u0430-\u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438. \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u044e \u044d\u0442\u0443 \u043c\u043e\u0449\u044c, \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c \u043a\u0430\u043a \u043e\u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u0430. \u041d\u0430\u0434\u0435\u044e\u0441\u044c \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u043c\u043e\u0433\u043b\u0430 \u0432 \u044d\u0442\u043e\u043c \u0447\u0443\u0442\u044c \u043b\u0443\u0447\u0448\u0435 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f.<\/div>\n<p>        <script class=\"js-mediator-script\">!function(e){function t(t,n){if(!(n in e)){for(var r,a=e.document,i=a.scripts,o=i.length;o--;)if(-1!==i[o].src.indexOf(t)){r=i[o];break}if(!r){r=a.createElement(\"script\"),r.type=\"text\/javascript\",r.async=!0,r.defer=!0,r.src=t,r.charset=\"UTF-8\";var d=function(){var e=a.getElementsByTagName(\"script\")[0];e.parentNode.insertBefore(r,e)};\"[object Opera]\"==e.opera?a.addEventListener?a.addEventListener(\"DOMContentLoaded\",d,!1):e.attachEvent(\"onload\",d):d()}}}t(\"\/\/mediator.mail.ru\/script\/2820404\/\",\"_mediator\")}(window);<\/script>     <br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/company\/embox\/blog\/418295\/\"> https:\/\/habr.com\/company\/embox\/blog\/418295\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div data-io-article-url=\"https:\/\/habr.com\/company\/embox\/blog\/418295\/\" class=\"post__text post__text-html js-mediator-article\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/uz\/l3\/0w\/uzl30wgy6ecwi5eg7gmrtrdbzd4.jpeg\" align=\"right\" width=\"320\">\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0445\u043e\u0447\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 \u0434\u043b\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432 \u0441 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043e\u0439 ARM. \u0414\u0443\u043c\u0430\u044e, \u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u0430 \u043f\u0440\u0435\u0436\u0434\u0435 \u0432\u0441\u0435\u0433\u043e \u0442\u0435\u043c, \u043a\u0442\u043e \u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u0441\u0432\u043e\u044e \u041e\u0421 \u043d\u0430 ARM-\u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0438\u043c \u043d\u0443\u0436\u043d\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0439 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0442\u043e\u0447\u043a\u0438 (\u0447\u0442\u043e \u043c\u044b \u0438 \u0434\u0435\u043b\u0430\u043b\u0438 \u0434\u043b\u044f <a href=\"https:\/\/github.com\/embox\/embox\">Embox<\/a>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0434\u043e \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0442\u043e\u0447\u043a\u043e\u0439).<\/p>\n<p>  \u0418\u0442\u0430\u043a, \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043c.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-288032","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/288032","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=288032"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/288032\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=288032"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=288032"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=288032"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}