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

 
 
> IAR C & ASM, Scratch registers
MALLOY2
сообщение Mar 4 2009, 15:14
Сообщение #1


Знающий
****

Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317



В проекте (EWARM 5.20) не хватает немного скорости решил переписать на асм функцию подсчета CRC32
открыл листинг этой функции и возникло несколько вопросов



Код
\                                 In section .text, align 4, keep-with-next
     26          u32_t crc32_update(void *data, u32_t crc, u32_t len)
     27          {
   \                     crc32_update:
   \   00000000   00502DE9           PUSH     {R12,LR}
     28            u32_t i,z;
     29            u8_t  *buf = data;
     30            for (i = 0; i < len; i++)
   \   00000004   000052E3           CMP      R2,#+0
   \   00000008   0C00000A           BEQ      ??crc32_update_0
   \   0000000C   34309FE5           LDR      R3,??crc32_update_1 ;; 0xedb88320
     31              {
     32                crc ^= buf[i];
   \                     ??crc32_update_2:
   \   00000010   00C0D0E5           LDRB     R12,[R0, #+0]
   \   00000014   01102CE0           EOR      R1,R12,R1
     33                for (z = 0; z < 8; z++ )
   \   00000018   08C0A0E3           MOV      R12,#+8
     34                crc = crc & 0x01 ? (crc >> 1) ^ poly32 : crc >> 1;
   \                     ??crc32_update_3:
   \   0000001C   A1E0A0E1           LSR      LR,R1,#+1
   \   00000020   010011E3           TST      R1,#0x1
   \   00000024   0E102310           EORNE    R1,R3,LR
   \   00000028   0E10A001           MOVEQ    R1,LR
   \   0000002C   01C05CE2           SUBS     R12,R12,#+1
   \   00000030   F9FFFF1A           BNE      ??crc32_update_3
     35              }
   \   00000034   010080E2           ADD      R0,R0,#+1
   \   00000038   012052E2           SUBS     R2,R2,#+1
   \   0000003C   F3FFFF1A           BNE      ??crc32_update_2
     36            return (crc);
   \                     ??crc32_update_0:
   \   00000040   0100A0E1           MOV      R0,R1
   \   00000044   0280BDE8           POP      {R1,PC}         ;; return
   \                     ??crc32_update_1:
   \   00000048   2083B8ED           DC32     0xedb88320
     37          }


В мануале на IAR написано
Цитата
Any of the registers R0 to R3, and R12, can be used as a scratch register by the function.


Далее я не понял о чем речь
Цитата
Note that R12 is a scratch register also when calling between assembler functions only
because of automatically inserted instructions for veneers.


Собственно вопрос за чем компилятор при входе в функцию загоняет R12 в стек, а потом его восстанавливает в R1 ?

Если я использую в своей функции R12 его надо сохранять ?

Еще вопрос по строке
Цитата
SECTION .text:CODE(2)
, все понятно кроме 2 в скобках, в мануале не нашел, логика подсказывает что это алигмент, так или не так ?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
MALLOY2
сообщение Mar 4 2009, 19:24
Сообщение #2


Знающий
****

Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317



Пока ехал домой вспомнил что читал в мануале на Cortex про бит в регистре ядра, если его у становить то ядро при автоматическом сохранении контекста выравнивает стек на 8 ( или что то в этом духе уже точно не помню), комментировали они это тем что некоторые компиляторы требуют выравнивания стека на 8. просмотрев остальные функции действительно стек везде выровнен на 8.
Интересно для чего это сделано ?
У меня 2 версии ответа

1) для 64 битных переменных, почему бы тогда в настройках не сделать такую галочку которая разруливала эту ситуацию.
2) оптимизация по IAR RTOS чтобы контекстом быстрее клацала
Go to the top of the page
 
+Quote Post
KRS
сообщение Mar 4 2009, 19:43
Сообщение #3


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(MALLOY2 @ Mar 4 2009, 22:24) *
Пока ехал домой вспомнил что читал в мануале на Cortex про бит в регистре ядра, если его у становить то ядро при автоматическом сохранении контекста выравнивает стек на 8 ( или что то в этом духе уже точно не помню), комментировали они это тем что некоторые компиляторы требуют выравнивания стека на 8.

Точно!!! И в новом стандарте ARM это обязательно! A 5.xx IAR же как раз в основном и отличался от 4.xx что поддердивал ARM ABI. ( они даже кортекс туда позже добавили так торопились!)

Зачем такое выравнивание для 32 разрядного процессора не понятно! В ARM7 и Cortex-M3 точно смылса не имеет там же нет ни кешей ни .... Но вроде при работе с float сопроцессором может пригодится!
Вообще в ссылке (выше) ARM Procedure Call Standart все требования описаны.

Надо поискать может у IAR и можно отключить выравнивание стека.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- MALLOY2   IAR C & ASM   Mar 4 2009, 15:14
- - KRS   Цитата(MALLOY2 @ Mar 4 2009, 18:14) Собст...   Mar 4 2009, 15:51
- - MALLOY2   Значит так режим ARM, интерверкинг выключен. При...   Mar 4 2009, 16:00
- - KRS   очень похоже на глюк оптимизатора. от переменной в...   Mar 4 2009, 16:30
- - KRS   Не нашел у IAR отключения этой фичи Причем в стан...   Mar 5 2009, 11:30
- - MALLOY2   Но ее может прерывание прервать , в друг я там пер...   Mar 5 2009, 12:43
|- - KRS   Цитата(MALLOY2 @ Mar 5 2009, 15:43) Но ее...   Mar 5 2009, 12:54
- - MALLOY2   Походу еще несколько вопросов Написал функцию, оф...   Mar 5 2009, 13:50
|- - Сергей Борщ   Цитата(MALLOY2 @ Mar 5 2009, 15:50) Тепер...   Mar 5 2009, 14:15
- - MALLOY2   Всем спасибо за помощь. Функцию переписал. Резуль...   Mar 5 2009, 16:38
- - GetSmart   Советую избавиться от этого изврата КодREPTI 1,1,1...   Mar 5 2009, 17:20
- - MALLOY2   из мауала на IAR ЦитатаAny of the registers R0 to ...   Mar 5 2009, 17:25
- - GetSmart   Читал. Даже название прочитал. Но опять же получае...   Mar 5 2009, 17:40
- - MALLOY2   ЦитатаНо опять же получается функция привязана к к...   Mar 5 2009, 19:27
- - sergeeff   Вы же собираетесь что-то на ассемблере использоват...   Mar 5 2009, 21:01
- - MALLOY2   А я о чем ? 1) код на 100% соответствует мануалу...   Mar 5 2009, 21:26


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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 20:46
Рейтинг@Mail.ru


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