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