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

 
 
> EWARM 4.41A, EWAVR 4.30A: баг оптимизатора, теперь и в 5.11! :)
vet
сообщение Mar 13 2008, 08:25
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32



При включении высокого (9) уровня оптимизации следующий код транслируется с ошибкой:
Код
#define  LIST_CAPACITY 4

typedef struct tag_List
{
  int      Addr;
  struct tag_List *Next;
} List;

List list[LIST_CAPACITY];

void ListInit(void)
{
  List  *pList;
  int i;

  for (i = 0; i < LIST_CAPACITY-1; i++)
  {
    pList = &list[i];
    pList->Addr = i;
    pList->Next = &list[i + 1];   //строка не транслируется
  }
  pList->Next = NULL;
}


На строку, помеченную комментарием, не создается никакого кода.
Проявляется при оптимизации и по скорости, и по размеру. На других уровнях оптимизации - порядок.
Кто работает с 5-й версией, проверьте - не исправлен этот баг?


--------------------
Главная линия этого опуса ясна мне насквозь!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
KRS
сообщение Mar 13 2008, 09:00
Сообщение #2


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

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



Но при смене оптимизации на balanced или size код все равно не правильный
balanced
Код
     47          void ListInit(void)
     48          {
     49            List  *pList;
     50            int i;
     51          
     52            for (i = 0; i < LIST_CAPACITY-1; i++)
   \                     ListInit:
   \   00000000   054A               LDR.N    R2,??ListInit_0 ;; list
   \   00000002   0020               MOVS     R0,#+0
   \   00000004   0021               MOVS     R1,#+0
     53            {
     54              pList = &list[i];
   \                     ??ListInit_1:
   \   00000006   1300               MOVS     R3,R2
     55              pList->Addr = i;
   \   00000008   1960               STR      R1,[R3, #+0]
     56              pList->Next = &list[i + 1];   //ñòðîêà íå òðàíñëèðóåòñÿ
     57            }
   \   0000000A   491C               ADDS     R1,R1,#+1
   \   0000000C   0832               ADDS     R2,R2,#+8
   \   0000000E   0F29               CMP      R1,#+15
   \   00000010   F9DB               BLT.N    ??ListInit_1
     58            pList->Next = 0;
   \   00000012   5860               STR      R0,[R3, #+4]
     59          }
   \   00000014   7047               BX       LR              ;; return
   \   00000016   00BF               Nop      
   \                     ??ListInit_0:
   \   00000018   ........           DC32     list

size
Код
   \                                 In section .text, align 4, keep-with-next
     47          void ListInit(void)
     48          {
     49            List  *pList;
     50            int i;
     51          
     52            for (i = 0; i < LIST_CAPACITY-1; i++)
   \                     ListInit:
   \   00000000   054A               LDR.N    R2,??ListInit_0 ;; list
   \   00000002   0020               MOVS     R0,#+0
   \   00000004   0021               MOVS     R1,#+0
     53            {
     54              pList = &list[i];
   \                     ??ListInit_1:
   \   00000006   12EBC103           ADDS     R3,R2,R1, LSL #+3
     55              pList->Addr = i;
   \   0000000A   1960               STR      R1,[R3, #+0]
     56              pList->Next = &list[i + 1];   //ñòðîêà íå òðàíñëèðóåòñÿ
     57            }
   \   0000000C   491C               ADDS     R1,R1,#+1
   \   0000000E   0F29               CMP      R1,#+15
   \   00000010   F9DB               BLT.N    ??ListInit_1
     58            pList->Next = 0;
   \   00000012   5860               STR      R0,[R3, #+4]
     59          }
   \   00000014   7047               BX       LR              ;; return
   \   00000016   00BF               Nop      
   \                     ??ListInit_0:
   \   00000018   ........           DC32     list




Цитата(vet @ Mar 13 2008, 11:55) *
KRS, тоже проявляется. Обратите внимание на адреса 0000001A-0000001C.

А точно каждая 3я итерация неверная
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 20th August 2025 - 07:51
Рейтинг@Mail.ru


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