Другой очевидный выбор - реализовать встроенную сборку только на определенных архитектурах и сохранить исходный (неоптимизированный) C ++ для любой другой архитектуры, а не пытаться генерировать сборку для всех архитектур. (Конечно, #ifdefed, конечно.) Тогда вы получаете выгоду от оптимизации на одной архитектуре с базовыми функциями на всех.
Однако, когда мы делали это в проектах, над которыми я работал в прошлом, это было худшее, что нужно было поддерживать - какой-то другой фрагмент кода изменился бы, и именно то, что передавалось в изолированные функции. ) изменится, и оригинальный C ++ и сборка больше не будут совпадать, и было много воплей и скрежетов зубов.