以下ARM ASM:爲什麼VMOV.F64不允許我加載零?
/tmp/ccZD4Iex.s:121: Error: immediate out of range -- `vmov.f64 d16,#0'
使用臂-NONE-Linux的gnueabi-G ++編譯(的Sourcery Codebench完成精簡版2012.03-57)4.6.3
:vmov.f64 d16, #0
與以下錯誤失敗
如何清零d16寄存器 - 雙精度,這樣我可以將它用於雙精度VFP指令?
以下ARM ASM:爲什麼VMOV.F64不允許我加載零?
/tmp/ccZD4Iex.s:121: Error: immediate out of range -- `vmov.f64 d16,#0'
使用臂-NONE-Linux的gnueabi-G ++編譯(的Sourcery Codebench完成精簡版2012.03-57)4.6.3
:vmov.f64 d16, #0
與以下錯誤失敗
如何清零d16寄存器 - 雙精度,這樣我可以將它用於雙精度VFP指令?
VMOV可以將該值只接受浮點立即數的limited set,而且奇怪的是,0是不是其中之一:
Any number that can be expressed as +/-n * 2-r, where n and r are integers, 16 <= n <= 31, 0 <= r <= 7.
你可以做什麼BitBank建議,或使用intege r動作,這也會使寄存器零點。
vmov.i64 d16, #0
NEON指令不允許您將64位或128位立即值加載到寄存器中。浮點值0.0碰巧是0x0000000000000000也,所以另一種方式來完成它與整數操作:
veor.i64 d16,d16,d16
或可以加載從存儲器(慢得多)
double zero[] = {0.0};
vld1.64 d16,[zero]