2010-10-14 2 views
2

в x86 инлайн сборки я могу написать что-то вроде этого:ARM встроенный ассемблер - указать индивидуальный регистр в качестве ограничения

asm ("cpuid" 
      : "=a" (_eax), 
       "=b" (_ebx), 
       "=c" (_ecx), 
       "=d" (_edx) 
      : "a" (op)); 

так в ограничениях Матчин вместо того, чтобы просто писать «= г» и пусть компилятор выбрал регистр , Я могу сказать, какой конкретный регистр я хочу использовать (= например, для использования% eax)

как я могу это сделать для сборки ARM? руку НКУ сборки поваренной книги http://www.ethernut.de/en/documents/arm-inline-asm.html гласит, что я может, например, использовать ограничения «г» для одного из регистров общего назначения R0-R15 «ж» для одного из плавающей точки VFP регистры S0-S31

, но как я могу ограничить операнд, например, точно до s1? или к определенному регистру общего назначения?

спасибо!

+0

Какую проблему будет решать это на ARM, чтобы точно знать, в каком регистре конкретный операнд помещается в? Какие инструкции по ARM _implicitly_ изменяют регистры (кроме операций загрузки/хранения с добавлением/уменьшением до/после увеличения, для которых существуют конкретные ограничения)? В этом аспекте ARM и x86 совершенно разные ... то, что необходимо на x86, не на ARM. –

+0

@FrankH. Системные вызовы? На самом деле я нашел этот вопрос. – Duc

ответ

2

Я не думаю, что gcc для ARM позволяет вам использовать constraints, чтобы указать, какой именно регистр использовать. Тем не менее, вы можете использовать explicit register variables указать регистр для хранения переменной в:

register int my_variable asm("r0"); 
Смежные вопросы