I can use 64-bit registers for example as in:
#include <assert.h>
#include <inttypes.h>
int main(void) {
uint64_t io = 1;
__asm__ (
"add %[io], %[io], 1;"
: [io] "+r" (io)
:
:
);
assert(io == 2);
}
which compiles and disassembles with:
aarch64-linux-gnu-gcc -ggdb3 -o main.out main.c
gdb-multiarch -batch -ex 'disassemble/rs main' main.out
to a 64-bit register as expected:
6 __asm__ (
0x0000000000000744 <+16>: a0 0f 40 f9 ldr x0, [x29, #24]
0x0000000000000748 <+20>: 00 04 00 91 add x0, x0, #0x1
0x000000000000074c <+24>: a0 0f 00 f9 str x0, [x29, #24]
How to use 32-bit registers such as w0 instead?
Tested on Ubuntu 18.04, GCC 7.4.0.