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

 
 
 
Reply to this topicStart new topic
> Минимизация логических операций
toweroff
сообщение Jul 9 2013, 21:57
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



То ли поздно уже... никак не соображу. А, может, вообще компилятору отдать, но sm.gif

uint32_t a;

a = (a & 0x0FFFFFFF) | 0x80000000;

кроче говоря - буквально - одно действие возможно?







Go to the top of the page
 
+Quote Post
firew0rker
сообщение Jul 10 2013, 01:57
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 206
Регистрация: 11-07-12
Из: Новосибирск
Пользователь №: 72 716



Невозможно, если только у процессора нет инструкции, записывающей константу в старший полубайт старшего байта. Я таких процессоров не знаю.
Go to the top of the page
 
+Quote Post
adnega
сообщение Jul 10 2013, 05:47
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(firew0rker @ Jul 10 2013, 05:57) *
Невозможно, если только у процессора нет инструкции, записывающей константу в старший полубайт старшего байта. Я таких процессоров не знаю.

У Cortex-M3 есть инструкция
Цитата
BFI.W Rd, Rn, #<lsb>, #<width> Insert bit field to a register

Правда, в Rn должен быть подготовлен шаблон.
Цитата
Bit Field Insert (BFI) copies 1–31 bits (#width) from one register to any location (#lsb) in another
register. The syntax is as follows:
BFI.W <Rd>, <Rn>, <#lsb>, <#width>
For example,
LDR R0,=0x12345678
LDR R1,=0x3355AACC
BFI.W R1, R0, #8, #16 ; Insert R0[15:0] to R1[23:8]
This will give R1 = 0x335678CC.
Go to the top of the page
 
+Quote Post
toweroff
сообщение Jul 10 2013, 08:46
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(adnega @ Jul 10 2013, 09:47) *
У Cortex-M3 есть инструкция

нет, это, к сожалению, ARM7

Цитата(adnega @ Jul 10 2013, 09:47) *
Правда, в Rn должен быть подготовлен шаблон.

спасибо, буду знать
правда, не очень-то мне это помогло бы. Мне нужно заменить не байт, а старшую тетраду старшего байта
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 10 2013, 08:52
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (toweroff @ Jul 10 2013, 10:46) *
Мне нужно заменить не байт, а старшую тетраду старшего байта
Так в описании к инструкции же сказано - "битовое поле от 1 до 31 бита длиной".


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
toweroff
сообщение Jul 10 2013, 08:56
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(Сергей Борщ @ Jul 10 2013, 12:52) *
Так в описании к инструкции же сказано - "битовое поле от 1 до 31 бита длиной".

точно.. невнимателен rolleyes.gif
Go to the top of the page
 
+Quote Post

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

 


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


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