Использование регистра armv8 RRX

В одном из моих домашних упражнений меня попросили написать программу для armv8, которая подсчитывает количество единиц в регистре. Вот моя реализация:

    .arch armv8-a   // specifies the ARMv8 Architecture
    .text
    .align  2       // align to a multiple of 4 (1<<2)
    .global start   // arm64_emu.sh starts execution at start
    .type   start, %function
start:
    movz    x0,  #8    
    movz    x10, #0
    movz    x1,  #0
loop:
    rrx     x0,  x0 //rotate x0 and put the last bit into carry
    bcs     skip
    add     x10, x10, 1
skip:
    cmp     x1,  #3
    bne     loop           
    svc     0          // dump registers
    svc     999        // stop the emulation
    .size   start, .-start

Хорошая блок-схема с этого сайта дает хороший обзор моей программы: http://www.8085projects.info/Program21.html

Однако это дает мне эту ошибку:

zl5022@enterprise:~$ arm64_emu.sh c.s
c.s: Assembler messages:
c.s:11: Error: unknown mnemonic `rrx' -- `rrx x0,x0'

Согласно http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0204j/Cjacbgca.html, rrx принимает в качестве входных данных два регистра, так что мне здесь чего-то не хватает?


person Christian Temple    schedule 27.01.2018    source источник
comment
Эта инструкция, похоже, недоступна в 64-битной версии.   -  person Jester    schedule 27.01.2018
comment
@Jester Есть ли аналогичные в 64-битной версии, которые делают ту же работу?   -  person Christian Temple    schedule 27.01.2018
comment
@EOF Я только начал писать код на сборке 2 дня назад. Я забочусь об этом, # 1, потому что это моя домашняя работа, и # 2, я действительно заинтересован в ее решении   -  person Christian Temple    schedule 27.01.2018
comment
godbolt.org/g/3GnGfT   -  person EOF    schedule 27.01.2018
comment
Я собирался прокомментировать, что вам нужно просто посмотреть на вывод asm для return __builtin_popcountll(x);, но gcc не встраивает его.   -  person Peter Cordes    schedule 28.01.2018


Ответы (1)


Инструкция поворота ARMv8 - это ROR.

ROR Xd, Xm, #uimm
Rotate Right (immediate, 64-bit)
person Olsonist    schedule 11.11.2020