Я пытаюсь сохранить 64 бита в памяти из регистра V на адрес, содержащийся в регистре X, но я получаю сообщение об ошибке «неверный режим адресации в операнде 2 -` st1 {V1.D} [0], [x20,640] ".
Из обзора набора команд ARMv8 операция должна выглядеть следующим образом:
ST1 {Vt. <\ T> } [index], vaddr Сохранение одной одноэлементной структуры из одной дорожки (одного регистра)
Все инструкции структуры хранилища загрузки SIMD используют синтаксический термин vaddr в качестве сокращения для следующие режимы адресации: [базовый] Память адресуется базовым регистром Xn или SP. [base], Xm Память, адресуемая базовым регистром Xn или SP, с последующим увеличением на 64-битный индексный регистр Xm. [base], # immMemory с адресом Xn или SP, постинкрементным к непосредственному значению, которое должно равняться общему количеству байтов, переданных в / из памяти.
Ниже приведен конкретный код показывая, что я пытаюсь сделать sh. Мне кажется, все должно быть в порядке.
__asm__ volatile (
"MOV V0.D[0], %[A_MASK] \n\t"
"ST1 {V0.D}[0], %[D] \n\t"
:
: [D] "m" (<pointer>), [A_MASK] "r" (0xFF000000)
: "memory", "V0"
);