Float в целочисленное преобразование с использованием iPhone SIMD Float Unit

StackOverflow https://stackoverflow.com/questions/1136574

Вопрос

В настоящее время я пытаюсь оптимизировать код, связанный с DSP с акулой, и обнаружил, что я трачу много времени на поплавок в целочисленное преобразование:

SInt16 nextInt = nextFloat * 32768.0f + 0.5f;

Поскольку iPhone, кажется, имеет соавтор ARM11 FP, мне интересно, могу ли я заменить свой код на инструкции FTOSI. Есть некоторые документация Доступно на веб -сайте ARM, но у меня нет опыта в общении с оптимизированной рукой. Кто -то делал это раньше?
Я думаю, что мог бы встроить код с

__asm__ volatile

Но как мне проверить, доступна ли инструкция?
Как я могу передать свою ценность?

РЕДАКТИРОВАТЬ1: Как уже отметил Луи, я забыл упомянуть, что выключен с «компиляцией для большого пальца».

EDIT2: Поскольку я хочу преобразовать Float в подписанный Int16, а не Unsigned Int, я изменил инструкцию ARM с FTOUI на FTOSI. Это была ошибка в оригинальном посте.

Это было полезно?

Решение

Это может быть очевидный вопрос, но вы уверены, что нацелены на руку? По умолчанию iPhone SDK компилирует все приложения для большого пальца, в котором используется программное плавание (включая преобразование float/int).

Во всяком случае, если у устройства есть копрецессор VFP, у него есть инструкция. Вы можете проверить, есть ли у него подходящий коконсор, прочитав регистр FPSID и убедившись, что это поддерживаемая модель.

Я подозреваю, что можно с уверенностью предположить, что все iPhone поддерживают это. Среди прочего, ассемблер Apple имеет поддержку для OpCode, а бэкэнд ARM LLVM использует его для преобразования типа, что означает, что, когда Apple в конечном итоге поддерживает LLVM на телефоне, их компилятор будет генерировать инструкции FTOUI.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top