[i] Использование функций деления в ассемблерных файлах
Процессоры К1967ВН02BG/04BG не имеют выделенного набора команд для выполнения операций деления чисел в формате с фиксированной и плавающей точкой. Однако использование ряда других команд (например, команда обратного приближения RECIPS) позволяет реализовать алгоритм деления чисел.
При разработке программы на языке высокого уровня (C/C++) алгоритм деления реализовывается автоматически компилятором clang: в местах выполнения операции деления в зависимости от типов операндов вызывается соответствующая функция деления. Данные функции деления являются скомпилированными и входят в состав библиотеки clib.dlb.
При разработке программы на ассемблере для выполнения операции деления можно либо реализовать собственный алгоритм деления (пример алгоритма приведён в «Руководстве по программированию», пункт 10.2.15 «Обратное приближение (плавающая арифметика)»), либо воспользоваться функциями из библиотеки clib.dlb. В таблице ниже приведены доступные в clib.dlb функции деления. Все функции принимают два аргумента – делимое и делитель, возвращают частное.
Таблица 1 - Описание функций деления из библиотеки clib.dlb
Название функции |
Первый аргумент (делимое) |
Второй аргумент (делитель) |
Возвращаемое значение (частное) |
Описание |
__DIV32 |
J4 |
J5 |
J8 |
Деление знаковых 32-битных целочисленных операндов |
__DIV32U |
J4 |
J5 |
J8 |
Деление беззнаковых 32-битных целочисленных операндов |
__DIV64 |
XR5:4 |
XR7:6 |
XR9:8 |
Деление знаковых 64-битных целочисленных операндов |
__DIV64U |
XR5:4 |
XR7:6 |
XR9:8 |
Деление беззнаковых 64-битных целочисленных операндов |
__FPDIV |
XR4 |
XR5 |
XR8 |
Деление операндов в формате с плавающей точкой одинарной точности |
__FDDIV |
XR5:4 |
XR7:6 |
XR9:8 |
Деление операндов в формате с плавающей точкой двойной точности |
Необходимо учитывать, что реализация этих функций следует конвенции о вызовах (документ «ML_ЦППО_Clang_Руководство_пользователя_R_Vx», пункт «4.7. Конвенция вызовов»), поэтому в процессе выполнения функций могут быть изменены значения в регистрах вычислительных модулей, которые относятся к scratch-регистрам:
XR0-XR23, YR0-YR23, J0-J15, K0-K15.
Сохранить статью в PDF