Сергей Борщ 179 April 12, 2023 Posted April 12, 2023 · Report post 3 минуты назад, jcxz сказал: Это сработало! Осталось выделение R0-R3 отдать на откуп компиилятору. Дочитал раздел описания llvm до конца, нашел про модификаторы. Мое битье пока ни к чему не привело, но может вас натолкнет на мысли: " STMIA %5!, %M0 \n" /tmp/ccfqO5Uk.s:684: Error: bad range in register list -- `stmia r2!,{r0-r0}' 2 минуты назад, Arlleex сказал: LDM/STM пофигу, в каком порядке перечислены в {reglist}. Но gcc ругается: Цитата /tmp/cczFIC5s.s:684: Warning: register range not in ascending order Quote Share this post Link to post Share on other sites More sharing options...
jcxz 350 April 12, 2023 Posted April 12, 2023 · Report post 8 минут назад, Сергей Борщ сказал: Мое битье пока ни к чему не привело, но может вас натолкнет на мысли: Нет, так я тоже пробовал - не переваривает. Quote Share this post Link to post Share on other sites More sharing options...
Сергей Борщ 179 April 12, 2023 Posted April 12, 2023 · Report post 4 минуты назад, jcxz сказал: Нет, так я тоже пробовал Изменено: опять поспешил. Quote Share this post Link to post Share on other sites More sharing options...
adnega 15 April 12, 2023 Posted April 12, 2023 · Report post В 12.04.2023 в 14:55, Arlleex сказал: LDM/STM пофигу, в каком порядке перечислен {reglist}. Там в КОП инструкции эти регистры отмечаются битовой маской. А инструкция проходится по списку этих битов, начиная с младшего. Поэтому важен порядок лишь загрузки данных в сами регистры, а не то, как они выглядят в списке LDM/STM. Это понятно. Но как компилятору объяснить, что порядок в reg_list имеет значение? GCC выдает предупреждение, но как заставить соблюдать порядок номеров регистров? Quote Share this post Link to post Share on other sites More sharing options...
jcxz 350 April 12, 2023 Posted April 12, 2023 · Report post 1 час назад, Сергей Борщ сказал: Мое битье пока ни к чему не привело, но может вас натолкнет на мысли: С одним %M0 всё прекрасно работает: STMIA %5!, %M0 Но как туда вставить более чем один регистр??? Перепробовал уже кучу разных вариантов: STMIA %5!, %M0,%M1 STMIA %5!, %M0,1 STMIA %5!, %M0...%M1 STMIA %5!, %M0-%M1 STMIA %5!, %M0-1 STMIA %5!, %M0...1 ... ничего не сработало. На некоторых типа: STMIA %5!, %M(0,1) IAR вообще виснет намертво. Максимум - 2 регистра позволяет впихнуть: u64 q; asm( "p01: LDR %L0, [%1, #8 * 1] \n" " LDR %H0, [%1, #8 * 2]! \n" " SUBS %3, %3, #2 \n" " STMIA %2!, %M0 \n" " BNE p01" : "=&Rp"(q) : "r"(p0), "r"(p1), "r"(i) : "cc", "memory"); q = q; но уже начинаются приколы..... Quote Share this post Link to post Share on other sites More sharing options...
Сергей Борщ 179 April 12, 2023 Posted April 12, 2023 · Report post 3 часа назад, jcxz сказал: Но как туда вставить более чем один регистр??? Вот и я на этом споткнулся. Ничего более продуктивного, чем ковырять исходники gcc или llvm в голову не пришло, а на это нет свободного времени. Так что "сама-сама-сама". Если вдруг победите - поделИтесь решением, может когда-нибудь кому-нибудь пригодится. Quote Share this post Link to post Share on other sites More sharing options...
adnega 15 April 12, 2023 Posted April 12, 2023 · Report post Нашел старенький, но ответ. Цитата > So how should I go about wrapping ldm / stm for usage in C land? There is in general no way to do that. Sorry. Quote Share this post Link to post Share on other sites More sharing options...
Сергей Борщ 179 April 12, 2023 Posted April 12, 2023 · Report post 58 минут назад, adnega сказал: старенький, но ответ "однако за время пути собака могла подрасти". Quote Share this post Link to post Share on other sites More sharing options...
dimka76 89 April 12, 2023 Posted April 12, 2023 · Report post On 4/12/2023 at 7:44 PM, Сергей Борщ said: может когда-нибудь кому-нибудь пригодится. Когда-нибудь это просто затеряется в мильене других сообщений форума и никто не найдет 😉 Quote Share this post Link to post Share on other sites More sharing options...
Сергей Борщ 179 April 12, 2023 Posted April 12, 2023 · Report post 53 минуты назад, dimka76 сказал: и никто не найдет 😉 Гугля уже находит эту ветку. Quote Share this post Link to post Share on other sites More sharing options...
jcxz 350 April 12, 2023 Posted April 12, 2023 · Report post 1 час назад, Сергей Борщ сказал: Гугля уже находит эту ветку. Мы меняем мир к лучшему! PS: Хех! - этот микроскопический кусочек на асм уменьшил общую загрузку CPU на ~0.5%! Что существенно, так как при выполнении некоторых операций загрузка CPU иногда превышает 80%. А работа - real-time, не терпит промедлений. Quote Share this post Link to post Share on other sites More sharing options...