Комментарии 27
Может лучше его допиливать вместо того чтоб ассемблерные вставки в библиотеках делать?
С предзагрузкой, кстати есть много фокусов, типа fast memcpy, который на объёмных данных работает раза в полтора-два быстрее чем обычный.
На самом деле вы не совсем правы в данном моменте, вы начали говорить про ARMv7(не путать с ARM7), то есть ядро Cortex M0-3-4, за 0 точно не скажу, но в M3/4 еспользуется набор инструкций Thumb-2, по сути смесь ARM+Thumb
Скорее всего, у Вас проблемы из-за того, что библиотеки были скомпилированы под какой-нибудь уж совсем-совсем Generic ABI, поэтому в них не используется плавающая точка или ещё что-нибудь.
А насчет изучения — в любом случае это интернесно, так что время, я считаю, зря не потратил:)
1. Сами пишите, что сам SoX не оптимизирован под ARM. Тем более, в декодировании участвуют и ffmpeg, и другие кодеки, а это возможный источник дополнительных тормозов и пр.
2. Интересно, как смотрите нагрузку. Бинарные модули работают в окружении приложения и в top'е нагрузка указывается как от самого приложения.
3. По поводу компиляции. Средства компилирования NDK (make-файлы) лишь автоматизируют сборку. Наверняка можно также, как в статье, руками выполнить обычную сборку с необходимыми оптимизациями.
LDR r4, [r5] : r4 = *r5
STR r4, [r5] : *r5 = r4
Да как вы задрали своим Си-шным синтаксисом. Сишечка - это контекстно-зависимый язык. Вы используете куски выражений без контекста. Что из этого должен понять читатель?
Вы написали *r5. Что это значит? Какой тип вы предполагаете имеется у регистра? У регистра нет типа, это просто хранилище значения. Так что вы хотели сказать, написав *r5?
Можно с некоторой вероятностью предположить, что в регистре r5 лежит адрес ячейки, из которой значение будет загружено в r4. Но это вероятностное понимание того, что автор силился показать. Мы не знаем что на самом деле лежит в r5, мы однозначно не понимаем что означает звездочка перед регистром. Перед переменной мы бы еще могли сказать, зная тип переменной, но перед регистром - нет.
Неужели нельзя формулировать мысли так, чтобы небыло неоднозначностей? Ну хотя бы когда речь идет о языках программирования?
ARM аccемблер