Руководство по Ada (Ada 2022)
C.1 Доступ к операциям процессора
Этот подпункт определяет правила доступа к машинным инструкциям из программы Ada.
Требования к реализации
Реализация должна поддерживать вставки машинного кода (см. 13.8) или встроенные подпрограммы (см. 6.3.1) (или оба). Реализация должна допускать использование сущностей Ada в качестве операндов для таких вставок машинного кода или встроенных подпрограмм.
Рекомендации по реализации
Поддержка машинного кода или встроенных функций должна обеспечивать доступ ко всем операциям, обычно доступным программистам на языке ассемблера для целевой среды, включая привилегированные инструкции, если таковые имеются.
Поддержка интерфейсных аспектов (см. Приложение B) должна включать интерфейс к ассемблеру; по умолчанию ассемблер должен быть связан с идентификатором соглашения Assembler.
Если сущность экспортируется в язык ассемблера, то реализация должна разместить её по адресу, и должна гарантировать, что она сохраняется в процессе компоновки, даже если на неё нет других ссылок из кода Ada. Реализация должна предполагать, что любой вызов подпрограммы машинного кода или ассемблера разрешено читать или обновлять каждый объект, указанный как экспортированный.
Требования к документации
Реализация должна документировать издержки, связанные с вызовом подпрограмм машинного кода или встроенных подпрограмм по сравнению с полностью встроенным вызовом и с обычным вызовом вне блока.
Реализация должна документировать типы пакета System.Machine_Code, применимые для вставок машинного кода, и атрибуты, используемые вставках машинного кода для ссылок на сущности Ada.
Реализация должна документировать соглашения вызова подпрограмм, связанные с идентификаторами соглашений, доступными для использования с аспектом Convention (Ada и Assembler, как минимум), включая сохранение регистров, распространение исключений, передачу параметров и возврат значения функции.
Для экспортируемых и импортируемых подпрограмм реализация должна документировать отображение между строкой Link_Name, если указана, или обозначением Ada, если нет, и внешним именем связи, используемым для такой подпрограммы.
Рекомендации по реализации
Реализация должна гарантировать, что вызовы встроенных и машинных подпрограмм связаны с незначительными или отсутствующими издержками.
Рекомендуется предоставлять встроенные подпрограммы для удобного доступа к любым операциям процессора, которые обеспечивают особые возможности или эффективность и не доступны иначе через конструкции языка. Примеры таких инструкций включают:
- Атомарные операции чтения-модификации-записи — например, тест и установка, сравнение и обмен, декремент и тест, вставка/удаление.
- Стандартные числовые функции — например, sin, log.
- Операции обработки строк — например, трансляция и проверка.
- Операции над векторами — например, сравнение вектора с пороговыми значениями.
- Прямые операции с портами ввода/вывода.