реклама на сайте
подробности

 
 
> Инструкция SUBS для armv6-m, применительно к arm-none-eabi-gcc
demiurg_spb
сообщение Jan 26 2016, 14:56
Сообщение #1


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Делаю асмовую вставку с инструкцией SUBS.
Для CM3 работало отлично.
Портирую софт под СМ1...
Код
        uint32_t cy;
        ...
        __asm__ __volatile__
        (
            "loop%=:"                 "\n\t"
            "    subs %[cnt],#1"  "\n\t"
            "    bne  loop%="     "\n\t"
            : [cnt]"+r"(cy)        // output:  +r means input+output
            :                           // input:
            : "cc"                     // clobbers:
        );

Получаю маты на этапе линковки (c LTO).
Код
... instruction not supported in Thumb16 mode -- 'subs r3,#1'

Меняю subs на sub - всё собирается молча, хотя и есть вопросы
Код
80034ba:    2304          movs    r3, #4
80034bc:    3b01          subs    r3, #1  - почему в листинге я вижу subs, хотя в asm вставке я написал sub?
80034be:    d1fd          bne.n    80034bc

Будет ли работать это - не факт, т.к. если написать этот цикл на чистом Си, компилятор под CM1 генерит следующее:
Код
8003522:    2304          movs    r3, #4
8003524:    3b01          subs    r3, #1
8003526:    2b00          cmp    r3, #0              - это вроде как излишне или нет???
8003528:    d1fc          bne.n    8003524

Прочитал ARMv6-M architecture reference manual, но так и не понял:

1) для armv6-m есть инструкция subs или только sub?
2) sub/subs для armv6-m изменяет состояние флагов в регистре статуса или нет?


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 3rd August 2025 - 17:19
Рейтинг@Mail.ru


Страница сгенерированна за 0.01332 секунд с 7
ELECTRONIX ©2004-2016