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

 
 
> Инкремент указателя и оптимизация
Rash
сообщение Oct 1 2015, 13:29
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 639
Регистрация: 5-09-05
Пользователь №: 8 231



День добрый.

Столкнулся с проблемой оптимизации, при инкременте указателя когда 2 строчки подряд. Оптимизация макс. по скорости. IAR ARM 7.40.3. Мк STMF4
Код
static void _setup_resp_ready(uint8_t** ppData_rx, bool allow_addr, uint8_t** ppData_tx)
{
  if(allow_addr != false)
    *(*(volatile uint_setup_addr_t**)&(*ppData_tx))++ = setup_addr;
  
  // !!! если NOP нет, то код будет оптимизирован
  __ASM("NOP");
    
   *((*ppData_tx)++) = *((*ppData_rx)++);
  
  return;
}

Прим. uint_setup_addr_t - задаётся тип, на данный момент uint16_t


скрины ассемблера
без оптимизации

макс. оптимизация по скорости

макс. оптимизация по скорости + NOP


Вопрос, возможно ли сделать запись чтобы не оптимизировался инкремент указателя? NOP конечно не критичен, но костыль. Отключить оптимизацию только для ф-ции не рассматриваю, т.к. подобные записи оформил виде макросов и могут быть в разных участках кода
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
zltigo
сообщение Oct 2 2015, 08:12
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (Rash @ Oct 1 2015, 16:29) *
*(*(volatile uint_setup_addr_t**)&(*ppData_tx))++ = setup_addr;

Эта строчка есть абсолютный говнокод. Рассуждать, как компилятор должен говнокод компилировать, можно бесконечно.
Но без потытки сбить оптимизацию квалификатором volatile, любые инкременты переменной по указателю должны безусловно выбрасываться, как бесполезные. Что и сделано.
С volatile оптимизация может быть порушена.
Напишите, что надо делать компилятору четко. Но начните с попытки объяснить СЕБЕ.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Rash   Инкремент указателя и оптимизация   Oct 1 2015, 13:29
- - scifi   Многабукаффниасилил. Я не пойму, жалоба на некорре...   Oct 1 2015, 13:43
- - Rash   да вроде не так много букв ). Проблема в том, что ...   Oct 1 2015, 16:50
|- - scifi   Цитата(Rash @ Oct 1 2015, 19:50) А вопрос...   Oct 1 2015, 16:53
- - Rash   1. Не нравятся костыли в любом виде, в данном случ...   Oct 1 2015, 17:08
|- - scifi   Вы не ответили на важный вопрос: "жалоба на н...   Oct 1 2015, 17:43
- - Rash   жалоба на то, что исчез инкремент, который не долж...   Oct 1 2015, 17:51
|- - scifi   Цитата(Rash @ Oct 1 2015, 20:51) жалоба н...   Oct 1 2015, 18:13
- - _Pasha   да там наверное нездоровый упор на CSE. просто сде...   Oct 1 2015, 18:31
|- - scifi   Цитата(_Pasha @ Oct 1 2015, 21:31) да там...   Oct 1 2015, 18:41
- - Rash   Цитата(scifi @ Oct 1 2015, 21:13) Жалоба ...   Oct 1 2015, 19:09
|- - scifi   Цитата(Rash @ Oct 1 2015, 22:09) Программ...   Oct 1 2015, 19:17
- - Rash   естественно, стоит при определении типа на указате...   Oct 1 2015, 19:23
|- - megajohn   Цитата(Rash @ Oct 1 2015, 23:23) естестве...   Oct 2 2015, 07:16
- - Valentine Loginov   Вам бы не полениться и сделать код читаемым, как н...   Oct 2 2015, 06:52
- - scifi   Кстати, безотносительно к тому, есть ли там volati...   Oct 2 2015, 07:27
- - Valentine Loginov   Цитата(megajohn @ Oct 2 2015, 10:16) я та...   Oct 2 2015, 10:27
- - Kabdim   *((*ppData_tx)++) = *((*ppData_rx)++); Вообще это ...   Oct 2 2015, 11:06
- - Rash   многопоточности нет (RTOS тоже), раньше код был с ...   Oct 2 2015, 11:07
|- - Kabdim   Цитата(Rash @ Oct 2 2015, 14:07) переменн...   Oct 2 2015, 11:12
|- - scifi   Цитата(Rash @ Oct 2 2015, 14:07) многопот...   Oct 2 2015, 11:43
- - Rash   компилятор я нигде не обвинял, а только спрашивал,...   Oct 2 2015, 11:56
|- - scifi   Цитата(Rash @ Oct 2 2015, 14:56) компилят...   Oct 2 2015, 14:20
- - _Pasha   я правильно перевел с птичьего языка на норм.? Код...   Oct 2 2015, 15:51
- - Rash   scifi, мне интересно, что вас задел этот volatile ...   Oct 2 2015, 20:09
- - _Pasha   Цитата(Rash @ Oct 2 2015, 23:09) По запис...   Oct 3 2015, 05:48


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

 


RSS Текстовая версия Сейчас: 31st July 2025 - 15:21
Рейтинг@Mail.ru


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