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

 
 
> Как запретить кейлу оптимизировать ассемблерные вставки
sergvks
сообщение Aug 13 2008, 09:47
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 251
Регистрация: 26-07-05
Пользователь №: 7 117



Суть проблемы: например, в функции нахождения минимального модуля:
MOVS term,a
RSBMI term,term,#0
MOVS result,b
RSBMI result,result,#0
CMP result,term
MOVPL result,term
кейл оптимизирует:
MOVS term,a
MOVS result,b
RSBMI term,term,#0
RSBMI result,result,#0
т.е. получается лажа, поэтому вопрос заключается в том, как обойти эту проблему ?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 4)
aaarrr
сообщение Aug 13 2008, 09:54
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Хм. А в RVCT все нормально получается. Попробуйте разбить на несколько вставок, а лучше сделайте честную процедуру на asm'е.
Go to the top of the page
 
+Quote Post
sergvks
сообщение Aug 13 2008, 14:14
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 251
Регистрация: 26-07-05
Пользователь №: 7 117



Цитата(aaarrr @ Aug 13 2008, 13:54) *
Хм. А в RVCT все нормально получается. Попробуйте разбить на несколько вставок, а лучше сделайте честную процедуру на asm'е.

Дело в том, что это лишь кусочек большой функции. Не подскажете, а где можно посмотреть пример как оформить честную процедуру на asm'е в отдельном файле, а в examples к сожалению пример только online ассемблера.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Aug 13 2008, 20:21
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(sergvks @ Aug 13 2008, 18:14) *
Не подскажете, а где можно посмотреть пример как оформить честную процедуру на asm'е в отдельном файле, а в examples к сожалению пример только online ассемблера.


Вот честная процедура из примеров RVDS:

Код
        AREA    SCopy, CODE, READONLY

        EXPORT strcopy
strcopy                
       ; r0 points to destination string
       ; r1 points to source string
        LDRB    r2, [r1],#1    ; load byte and update address
        STRB    r2, [r0],#1    ; store byte and update address;
        CMP     r2, #0         ; check for zero terminator
        BNE     strcopy        ; keep going if not
        MOV     pc,lr          ; Return

        END


Это минимум того, что должно быть в .s файле. Описание директив ассемблера есть в разделе "RealView Assembler User's Guide" Keil'овского мануала.

Для корректной передачи и возвращения параметров еще потребуется изучить Procedure Call Standard for the ARM Architecture.
Go to the top of the page
 
+Quote Post
sergvks
сообщение Aug 14 2008, 07:29
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 251
Регистрация: 26-07-05
Пользователь №: 7 117



Спасибо. Теперь всё понятно и всё работает.
Go to the top of the page
 
+Quote Post

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

 


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


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