Ошибка: операнд вне допустимого диапазона при использовании ассемблера PPC

У меня есть перекрестный компилятор/ассемблер/компоновщик bulit gcc с 'powerpc-eabi' в качестве TARGET в Windows с использованием cygwin. При сборке получаю следующую ошибку....

code/sfiles/init_evh.s: Assembler messages:
code/sfiles/init_evh.s:381: Error: operand out of range (0x0000fffd is not between 0xffff8000 and 0x00007fff)

Но в этом номере строки есть следующая инструкция:

addi  r2,0,0xFFFD

Я использую следующую команду для сборки:

c:/cygwin/home/cdot/powerpc/bin/powerpc-eabi-as -mbig-endian -m603 -mregnames --
defsym _NDI_=1 --defsym _DBGR_ON_=1 --defsym DEBUG=1 --defsym _PARAM_DEBUG_=1 --
defsym _NIU_=1 -gdwarf-2 -I code/hfiles -o build/niu_ndi_dbgr_init_evh.o code/sf
iles/init_evh.s 2>build/niu_ndi_dbgr_init_evh.err

Я хотел бы знать, почему появляется вышеуказанная ошибка.

Пожалуйста, помогите в этом направлении.


person thulasi    schedule 27.06.2011    source источник
comment
Вы написали инструкцию или она была сгенерирована компилятором? Потому что, если вы написали это, вы должны просто изменить его (догадываясь из сообщения об ошибке, я полагаю, что он примет 0xffffffffd и в любом случае возьмет младшие два байта), в то время как если бы это было сгенерировано компилятором, это было бы ошибкой, и вы должны сообщить об этом для отслеживания ошибок gcc.   -  person Jan Hudec    schedule 27.06.2011


Ответы (1)


Компилятор/ассемблер правильно выдает здесь сообщение об ошибке. Использование константы 0xfffd невозможно с инструкциями немедленного типа в ассемблере PPC.

Непосредственные инструкции PowerPC (например, addi, которую вы пытаетесь выполнить) имеют общий формат инструкций 6/5/6/16 бит для кода операции/источника/назначения/константы; 16-битная константа со знаком, следовательно, диапазон равен -32768 ... 32767; это знак расширен до 32 бит, что означает, что вы получите диапазон 0xffff8000 ... 0x7fff. Смотрите также:

Введение в сборку IBM Developerworks PPC, особенно "листинг 3".

Это то, что сообщение об ошибке пытается сказать вам.

person FrankH.    schedule 27.06.2011