{"id":25818,"date":"2020-04-08T15:00:03","date_gmt":"2020-04-08T15:00:03","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/cppblog\/?p=25818"},"modified":"2024-09-10T07:56:03","modified_gmt":"2024-09-10T07:56:03","slug":"msvc-backend-updates-in-visual-studio-2019-version-16-5","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/cppblog\/msvc-backend-updates-in-visual-studio-2019-version-16-5\/","title":{"rendered":"MSVC Backend Updates in Visual Studio 2019 Version 16.5"},"content":{"rendered":"<p><span data-contrast=\"none\">In <\/span><a href=\"https:\/\/visualstudio.microsoft.com\/downloads\/\"><span data-contrast=\"none\">Visual Studio 2019<\/span><\/a><span data-contrast=\"none\"> version<\/span> <span data-contrast=\"none\">16.<\/span><span data-contrast=\"none\">5<\/span> <span data-contrast=\"none\">we have continued to improve<\/span> <span data-contrast=\"none\">the <\/span><span data-contrast=\"none\">C++ backend with <\/span><span data-contrast=\"none\">new features, <\/span><span data-contrast=\"none\">new and improved optimizations<\/span><span data-contrast=\"none\">, build throughput<\/span><span data-contrast=\"none\"> improvements<\/span><span data-contrast=\"none\">, and <\/span><span data-contrast=\"none\">better <\/span><span data-contrast=\"none\">security.<\/span><span data-contrast=\"none\"> Here is a brief list <\/span><span data-contrast=\"none\">of improvements <\/span><span data-contrast=\"none\">for you<\/span><span data-contrast=\"none\"> to review<\/span><span data-contrast=\"none\">.<\/span><\/p>\n<ul>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"none\">Compiler switch mitigation<\/span><span data-contrast=\"none\"> for the <\/span><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/jcc-erratum-mitigation-in-msvc\/\"><span data-contrast=\"none\">Intel JCC erratum<\/span><\/a><span data-contrast=\"none\">.<\/span><\/li>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"none\">AMD Zen3 architecture instruction<\/span><span data-contrast=\"none\"> support.<\/span><\/li>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-aria-posinset=\"2\" data-aria-level=\"1\"><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/avx2-floating-point-improvements-in-visual-studio-2019-version-16-5\/\"><span data-contrast=\"none\">AVX2 floating point improvements<\/span><\/a><span data-contrast=\"none\">: vector instructions optimized<\/span><span data-contrast=\"none\"> to a single constant <\/span><span data-contrast=\"none\">with known<\/span><span data-contrast=\"none\"> initial arguments<\/span><span data-contrast=\"none\">.<\/span><\/li>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"none\">ARM64 NEON <\/span><span data-contrast=\"none\">intrinsics<\/span> <span data-contrast=\"none\">improvements:<\/span>\n<ul>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-aria-posinset=\"2\" data-aria-level=\"1\">I<span data-contrast=\"none\">mplementation of all remaining ARM64 NEON <\/span><span data-contrast=\"none\">intrinsics<\/span><span data-contrast=\"none\">.<\/span><\/li>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"none\">P<\/span><span data-contrast=\"none\">erformance <\/span><span data-contrast=\"none\">improvement <\/span><span data-contrast=\"none\">of some existing NEON <\/span><span data-contrast=\"none\">intrinsics<\/span><span data-contrast=\"none\">.<\/span><\/li>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"none\">E<\/span><span data-contrast=\"none\">rror reporting <\/span><span data-contrast=\"none\">improvement <\/span><span data-contrast=\"none\">for NEON <\/span><span data-contrast=\"none\">intrinsics<\/span><span data-contrast=\"none\"> that take compile time constant arguments.<\/span><\/li>\n<\/ul>\n<\/li>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"none\">S<\/span><span data-contrast=\"none\">peculative <\/span><span data-contrast=\"none\">memcpy<\/span><span data-contrast=\"none\"> optimization <\/span><span data-contrast=\"none\">to speed<\/span><span data-contrast=\"none\"> up <\/span><span data-contrast=\"none\">memcpy<\/span><span data-contrast=\"none\"> operations by 2x-18x when the source and destination don&#8217;t overlap<\/span><span data-contrast=\"none\">, <\/span><span data-contrast=\"none\">in addition to speculative <\/span><span data-contrast=\"none\">memset<\/span><span data-contrast=\"none\"> optimization<\/span><span data-contrast=\"none\">.<\/span><\/li>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-aria-posinset=\"2\" data-aria-level=\"1\"><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/more-spectre-mitigations-in-msvc\/\"><span data-contrast=\"none\">More <\/span><span data-contrast=\"none\">Spectr<\/span><span data-contrast=\"none\">e<\/span><span data-contrast=\"none\"> Mitigations in MSVC<\/span><\/a><span data-contrast=\"none\">: <\/span><a href=\"https:\/\/docs.microsoft.com\/en-us\/cpp\/build\/reference\/qspectre-load?view=vs-2019\"><span data-contrast=\"none\">\/<\/span><span data-contrast=\"none\">Qspectre<\/span><span data-contrast=\"none\">-load<\/span><\/a><span data-contrast=\"none\"> and <\/span><a href=\"https:\/\/docs.microsoft.com\/en-us\/cpp\/build\/reference\/qspectre-load-cf?view=vs-2019\"><span data-contrast=\"none\">\/<\/span><span data-contrast=\"none\">Qspectre<\/span><span data-contrast=\"none\">-load-<\/span><span data-contrast=\"none\">cf<\/span><\/a><span data-contrast=\"none\"> flags added to mitigate against speculative execution side-channel attacks based on loads<\/span><span data-contrast=\"none\">.<\/span><\/li>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"none\">Added a powerful new optimization known as jump-threading, which simplifies control-flow. It eliminates unneeded intermediate jumps and branches on program paths that can be evaluated at compile time, based on the values of variables and other compile-time information.<\/span><\/li>\n<\/ul>\n<p>For additional optimizations implemented in MSVC in previous releases, check out our <a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/msvc-backend-updates-in-visual-studio-2019-versions-16-3-and-16-4\/\" rel=\"noopener noreferrer\" target=\"_blank\">MSVC Backend Updates in Visual Studio 2019 Versions 16.3 and 16.4<\/a><\/p>\n<p><span data-contrast=\"none\">Do you want to experience the new improvements of the C++ backend? <\/span><span data-contrast=\"none\">P<\/span><span data-contrast=\"none\">lease<\/span><span data-contrast=\"none\"> download <\/span><a href=\"https:\/\/visualstudio.microsoft.com\/downloads\/\"><span data-contrast=\"none\">the latest Visual Studio 2019<\/span><\/a><span data-contrast=\"none\"> and <\/span><span data-contrast=\"none\">give it a try! Any feedback is welcome<\/span><span data-contrast=\"none\">. We can be reached via the comments below,\u00a0<a href=\"https:\/\/developercommunity.visualstudio.com\/spaces\/8\/index.html\">Developer Community<\/a>, email (<a href=\"mailto:visualcpp@microsoft.com\">visualcpp@microsoft.com<\/a>), and Twitter (<a href=\"https:\/\/twitter.com\/visualc\">@VisualC<\/a>).<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In Visual Studio 2019 version 16.5 we have continued to improve the C++ backend with new features, new and improved optimizations, build throughput improvements, and better security. Here is a brief list of improvements for you to review. Compiler switch mitigation for the Intel JCC erratum. AMD Zen3 architecture instruction support. AVX2 floating point improvements: [&hellip;]<\/p>\n","protected":false},"author":20906,"featured_media":35994,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[3946,1],"tags":[],"class_list":["post-25818","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-backend","category-cplusplus"],"acf":[],"blog_post_summary":"<p>In Visual Studio 2019 version 16.5 we have continued to improve the C++ backend with new features, new and improved optimizations, build throughput improvements, and better security. Here is a brief list of improvements for you to review. Compiler switch mitigation for the Intel JCC erratum. AMD Zen3 architecture instruction support. AVX2 floating point improvements: [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/posts\/25818","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/users\/20906"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/comments?post=25818"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/posts\/25818\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/media\/35994"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/media?parent=25818"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/categories?post=25818"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/tags?post=25818"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}