Подробнее о новых инструкциях AVR LAC, LAS, LAT и XCH

Глядя на набор инструкций AVR, в 2010 году добавлено четыре команды.

LAC load and clear
LAS load and set
LAT load and toggle
XCH load and exchange
  • Кто-нибудь знает, какие чипы имеют эти инструкции

  • Какие инструменты поддерживают эти инструкции.

  • Дополнительная информация о том, что они делают

    (Z) < - Rd v (Z), Rd < - (Z)

означает, что Rd и (Z) получают одно и то же значение или Rd получает предварительно модифицированное значение того, на что указывает Z?

Ответ 1

Вероятно, они не существуют в текущем (по первому вопросу) чипе, но у всех есть общая тема - операции с атомной памятью. Их назначение обычно заключается в синхронизации потоков, и их включение на уровне набора команд, вероятно, указывает на то, что Atmel планирует запустить многоядерный чип AVR. Поскольку они указаны, теперь поставщики инструментов могут добавлять их к ассемблерам уже, но они не будут делать этого, пока у чипов не будет инструкций. (Изменить: как оказалось, другое ядро ​​- это периферийное устройство USB, а не процессор. Благодаря avakar для этой информации.)

Поведение, когда я прочитал его из 8-разрядное руководство по настройке Atmel AVR:

LAC - Загрузить и очистить, загружает содержимое памяти * Z в регистр Rd, одновременно очищая бит в * Z, которые были установлены в Rd.

LAS - Load And Set одновременно устанавливает биты в ячейке памяти, которые были установлены в регистре, и загружает регистр с предварительным содержимым ячейки памяти. Очень полезно для однобитовых мьютексов, например.

LAT - Load And Toggle; как LAS, но вместо поразрядного или, он использует побитовое xor, таким образом, переключая биты.

XCH - Exchange; просто обменивает память и регистрирует содержимое.

Все из них - инструкции по доступу к ОЗУ (07/2014), которые выполняют два цикла), которые объединяют операции, чтобы они могли также сделать код, который нуждается в ОЗУ быстрее, чем в настоящее время.

Ответ 2

Небольшая, но важная деталь, чтобы подчеркнуть: инструкции LAS, LAC и LAT работают, когда Z указывает только на "реальную" SRAM. Это не регистры (сопоставленные с памятью) и т.д. Таким образом, они полезны либо для ваших собственных (OS) данных, либо для XMega USB-модуля, ни для других периферийных устройств и модулей.

Жаль (как это было бы очень удобно для манипулирования флагами PMIC.CTRL, например), но это действительно не работает. Проверено. Похоже, что LAS, LAC и LAT имеют тот же эффект, что и XCH (обмен между Rd и (Z), но без бита) при применении к зарегистрированным в памяти регистрам.