LINUX.ORG.RU

История изменений

Исправление wandrien, (текущая версия) :

А ещё иногда бывает, что последовательное деление и вычисление остатка от деления над одними и теми же операндами компилируются в две инструкции ассемблера, вместо того, чтобы взять уже посчитанный после деления остаток из соответствующего регистра. И это при том, что деление — одна из самых дорогих операций.

Спасибо, что напомнили. Я размышлял об этом, но как-то позабыл.

Однако, не совсем понятно как такие фичи выразить в языке.

Думаю, что встроенной функций, которая компилируется в нативный код машины, если архитектура поддерживает аппаратное деление, и в вызов библиотечной функции, если не поддерживает.

В коде программы использование будет типа такого:

int div, mod;
__divmod(@div, @mod, x, y);

Какой-то более удобный синтаксис не придумывается. Впрочем, операция деления сама по себе достаточно редкая, чтобы заморачиваться отдельным синтаксисом для divmod.

Исходная версия wandrien, :

А ещё иногда бывает, что последовательное деление и вычисление остатка от деления над одними и теми же операндами компилируются в две инструкции ассемблера, вместо того, чтобы взять уже посчитанный после деления остаток из соответствующего регистра. И это при том, что деление — одна из самых дорогих операций.

Спасибо, что напомнили. Я размышлял об этом, но как-то позабыл.

Однако, не совсем понятно как такие фичи выразить в языке.

Думаю, что встроенной функций, которая компилируется в нативный код машины, если архитектура поддерживает аппаратное деление, и в вызов библиотечной функции, если не поддерживает.

В коде программы использование будет типа такого:

int div, mod;
__divmod(div, mod, x, y);

Какой-то более удобный синтаксис не придумывается. Впрочем, операция деления сама по себе достаточно редкая, чтобы заморачиваться отдельным синтаксисом для divmod.