Разные производители ARM предоставляют разные наборы инструкций? - PullRequest
8 голосов
/ 12 января 2012

Я впервые столкнулся с набором команд ARM в 80-х годах и с тех пор не использовал его. Из любопытства я смотрел на планшеты и другие устройства ARM и отмечал, что процессоры производятся разными производителями.

Я сделал быстрый поиск, но не смог найти однозначного утверждения о том, что разные чипы ARM имеют разные наборы команд.

Я бы предположил, что в основном они одинаковы.

Ответы [ 3 ]

6 голосов
/ 12 января 2012

goto http://infocenter.arm.com в левой части под содержимым ищите архитектуру ARM.И под этим справочным руководством.Раньше был один ARM ARM (Справочное руководство по архитектуре ARM), но семья выросла до такой степени, что им пришлось разбить ее на, ну, в общем, на семьи.

ARM ARM собираются показать вам инструкциюнаборы.То, что я думаю, они называют руководством ARMv5, является старым ARM ARM.Вы найдете инструкции ARM (32 бита) и инструкции большого пальца (16 бит).Для каждой инструкции они перечисляют, какая архитектура ее поддерживает, поэтому вы можете увидеть инструкцию ARMv5, которая не поддерживается ARMv4 (ARMv4 или ARM7, как и популярное ядро ​​ARM7TDMI).Инструкции для большого пальца поддерживаются ARMv4T и новее и т. Д.

Таким образом, существует базовый набор 32-битных инструкций, к которым вы, возможно, привыкли, время от времени добавляются новые инструкции и исправляются ошибки / ограничения (ldr r0, [r0], например) и т. д.

Блок с плавающей запятой имел один или два капитальных ремонта, большинство ядер не имеют fpu, а те, которые имеют fpu, не означают, что производитель чипов включил его вчип.fpa - старше, vfp - новее, а теперь неон.Если вы обратите внимание, все они попадают в категорию общих инструкций сопроцессора.Но вам не нужно знать / использовать версию сопроцессора, у которой есть псевдонимы для всего.

Есть / была эта вещь java / jazelle, та же история, что некоторые ядра могут иметь ее в качестве опции, не означает, что поставщик включил ее.

Как минимум два набора расширений thumb2 для набора инструкций thumb.До расширений thumb2 все команды thumb были 16-битными и имели однозначное соответствие с инструкцией ARM, имеет смысл, что вам нужно только ядро ​​ARM, декодер переводит из более маленькой инструкции в инструкцию ARM и передает ее в ядро.Все инструкции являются 16-битными, кроме ветвления, и если вы посмотрите на этот шаблон, вы можете довольно легко декодировать его как две отдельные 16-битные инструкции.И тогда они решили сделать свой микроконтроллер меньшего размера, вместо того, чтобы все использовали ARM7TDMI и потребляли чип и размер, а процессоры с поддержкой thumb2 - только большой палец, они не поддерживают 32-битные инструкции ARM, нет ядра ARM, которое выполняло бы инструкции большого пальцапереведены и т. д. новое ядро.ARMv6-M, также известные как Cortex-m0 и Cortex-m1, берут набор команд большого пальца и добавляют несколько 32-битных инструкций, чтобы сократить разрыв в производительности для ARM (большой палец был да, но немного медленнее, чем ARM, если вы скомпилировали тот же код ви то, и другое потребовало на 10-20% больше инструкций из моих экспериментов, чтобы использовать большой палец).В теории thumb-2 (ARMv7-M) превосходит ARM, когда и где вы можете их сравнить.По какой-то причине первым вышел Cortex-m3, который представляет собой ARMv7-M и в набор команд для большого пальца добавлен набор 32-битных инструкций thumb2.Я недавно сосчитал, и ARMv6-M добавил как 20, ARMv7-M добавил 140-150 команд, добавленных к основному набору команд большого пальца.thumb2 - это в основном переменная длина слова.И опять работает только на серии cortex-m.Глядя на это, почти как будто они заново собрали набор инструкций ARM под большим пальцем.не полностью, но вы получаете много инструкций, подобных трем, три регистра вместо двух, возможность достигать более высоких регистров и использовать немедленные и т. д. Это вызвано желанием написать asm, который скомпилирован для ARM и thumb / thumb2.Поэтому они придумали единый синтаксис.Вы можете написать инструкцию, например

add r0,r1

Если сборка для большого пальца, то это инструкция, если сборка для руки они преобразуют в

add r0,r0,r1

вместо вас, вместо любого синтаксисаошибки.Вы должны указать, что вы используете унифицированный синтаксис, по крайней мере, с ассемблером gnu binutils (gas).

Не менее важным пакетом документов являются технические справочные руководства, также на infocenter.arm.com. Каждое ядро ​​имеет trm, фактически каждый оборот каждого ядра имеет TRM. Кроме того, дополнительные элементы, такие как кэши L2, имеют свой собственный TRM для каждой версии. важно выяснить ядро, которое купил / использовал производитель микросхемы, и, если возможно, ревизию (rev 2.0 r2p0, rev 1.0 r1p0 и т. д.), поскольку между ними существуют различия в программировании, а также в ошибках (не доверяйте Linux в качестве справки! Это огромный беспорядок, каждый раз, когда я смотрю, еще одна компания совершенно неправильно понимает и неправильно использует различия между ядром и ошибками, на данный момент это просто катастрофа). Иногда TRM включает информацию об инструкциях или рисует более четкую картину того, что поддерживает и не поддерживает это ядро. ARM ARM являются общими, они охватывают всю семью или несколько семейств ядер, где TRM очень специфичен для одного ядра. Примером путаницы между ARM ARM и TRM является то, что при взгляде на ARM ARM у вас может сложиться впечатление, что вы можете использовать режимы с прямым порядком байтов BE-32 или BE-8, реальность такова, что у вас есть либо тот, либо другой ARMv6 и новее BE-8, и привыкни. ARMv5 и ARMv4 - это BE-32 или до того, как ARMv6 только что назвал big endian. Я настоятельно рекомендую НЕ использовать big endian на руке, несмотря на то, что, по вашему мнению, вы можете извлечь из этого. переходите в родной режим, и вы сэкономите массу работы и неудачи. Я упоминаю это из личного опыта, пытаясь выяснить, почему биты, описанные в ARM ARM, просто не работали в ядре, которое я использовал.

64-битное ядро ​​находится где-то на стадии разработки, я не удивлюсь, если это будет сделано, и просто ищу кого-нибудь, чтобы нажать на триггер и использовать его. На самом деле документ ARMv8 уже доступен для скачивания.

Краткий ответ infocenter.arm.com в разделе ARM Architecture вы найдете все документы, описывающие различные наборы команд, а также улучшения / дополнения с течением времени для этих наборов инструкций.

2 голосов
/ 12 января 2012

Nop.нет никакой разницы (относительно набора инструкций) между производителем.Все они уважают спецификацию ARM.

Некоторые расширения являются необязательными.Это случай NEON.

Но, насколько я знаю, только Tegra 2 не включает это расширение.Вот почему Tegra 2 - очень плохой процессор для декодирования видео (например).

2 голосов
/ 12 января 2012

Существует несколько распространенных вариантов наборов инструкций, наиболее распространенными являются UAL, Thumb и Thumb2.Некоторые ядра ARM, содержащие специализированное оборудование (например, DSP), также расширяют язык.

...