[英]Push and pop a full 128-bit NEON register to/from the stack in AArch64
我在AArch64中找到了如何使用STP
/ LDP
推入/彈出一對64位寄存器的文檔。 我知道他們可以將128位NEON浮點寄存器的低64位作為參數,例如:
@ Push D0, D1
STP D0, D1, [SP, #-16]!
@ Pop D0, D1
LDP D0, D1, [SP], #16
但是,如何在AArch64中壓入/彈出NEON浮點寄存器的完整128位? 請問以下工作? (我的疑問是它不會減少/增加SP
寄存器)
STR Q0, [SP, #-16]!
LDR Q0, [SP], #16
內存訪問的簡要說明在此處( 浮點和NEON標量加載和存儲 )
STR Q0, [sp, #-16]! // Save 128b (16B)
STP Q0, Q1, [sp, #-32]! // Save 2x128b (2 x 16B = 32B)
Qx
寄存器也可以作為NEON / FTP Vx
寄存器訪問。
( NEON和浮點架構 )
( 向量寄存器大小 )
st1 {v0.2d}, [sp] // Save Q0 (V0 is 'vector' alias)
更實際的用法是保留所有“被調用方保存的寄存器”(v8-v15)
sub sp, sp, #func_stack_size
st1 { v8.2d, v9.2d, v10.2d, v11.2d}, [sp], #64
st1 {v12.2d, v13.2d, v14.2d, v15.2d}, [sp], #64
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.