[英]Moving a 32 bit constant in ARM Arch64 register
我正在寻找一种方法来移动arch64寄存器X1中任何32位常数。
有没有办法执行相同的操作
MOV X1,#imm32
imm32可以是任何随机32位值,如0xaf41d32c
我知道如何使用MOVW和MOVT在A32中完成。 我不想使用LDR X1,= 0xaf41d32c,因为我不直接编写汇编代码,而是通过在内存中写入32位ARM编码来将指令存储在缓存中。 所以我基本上不能形成LDR X1的编码,= 0xaf41d32c。
例如=>根据ARMv7 ref手动编码指令ADD R1,R1,#1是0xe2811001。 所以我将它存储在I Cache中的某个位置,然后从该位置开始执行。
是否存在A64等效的MOVW和MOVT? 你能建议一个解决方案吗?
见movk 。
$ echo "long foo() {return 0xaf41d32c;}" | aarch64-linux-android-gcc -O2 -S -o- -xc -
.cpu generic+fp+simd
.file ""
.text
.align 2
.global foo
.type foo, %function
foo:
mov x0, 54060
movk x0, 0xaf41, lsl 16
ret
.size foo, .-foo
.ident "GCC: (GNU) 4.9 20140827 (prerelease)"
.section .note.GNU-stack,"",%progbits
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.