簡體   English   中英

RISC-V 中哪些寄存器被保存,哪些不被保存

[英]Which Registers are Saved and Not Saved in RISC-V

我正在上計算機體系結構課程,並且在課程中的一些主題上有點迷失。 在過程調用中保存和不保存哪些寄存器? 這是什么意思?

在寄存器列表上,我的書上說 x8-x9 和 x18-27 是保存的寄存器。 這是否意味着所有其他人都沒有得救? 我讀過一些關於被叫方和來電方的內容——這與這有什么關系嗎? 我通讀了這本書並嘗試谷歌搜索但找不到直接的答案,所以我來到這里。 我選擇這個 class 只是因為沒有提供其他選項並且沒有所有先決條件和背景研究。 結果我很難跟上,所以請簡單地解釋一下。

現在在 riscv-gcc 中實現了什么:
調用保存的 GPR:X8-X9 x18-x27
調用保存的 FPR(如果啟用浮點):F8-F9 F18-F27
所有其他寄存器都是固定的或 Call 被破壞。

#define REG_ALLOC_ORDER                         \
{ \
  /* Call-clobbered GPRs.  */                       \
  15, 14, 13, 12, 11, 10, 16, 17, 6, 28, 29, 30, 31, 5, 7, 1,       \
  /* Call-saved GPRs.  */                       \
  8, 9, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,                 \
  /* GPRs that can never be exposed to the register allocator.  */  \
  0, 2, 3, 4,                               \
  /* Call-clobbered FPRs.  */                       \
  47, 46, 45, 44, 43, 42, 32, 33, 34, 35, 36, 37, 38, 39, 48, 49,   \
  60, 61, 62, 63,                           \
  /* Call-saved FPRs.  */                       \
  40, 41, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,           \
  /* None of the remaining classes have defined call-saved      \
     registers.  */                         \
  64, 65                                \
}  

ra由調用者處理,如果需要,您可以查看 riscv.c,您將看到ra何時被riscv_save_reg_p保存。

對於 LLVM 移植:被調用者保存的 GPR 是:X1、X3-X4、X8-X9 和 X18-X27 被調用者保存的 FPR(如果啟用浮點):F8-F9 F18-F27

def CSR_ILP32_LP64
    : CalleeSavedRegs<(add X1, X3, X4, X8, X9, (sequence "X%u", 18, 27))>;

def CSR_ILP32F_LP64F
    : CalleeSavedRegs<(add CSR_ILP32_LP64,
                       F8_F, F9_F, (sequence "F%u_F", 18, 27))>;

def CSR_ILP32D_LP64D
    : CalleeSavedRegs<(add CSR_ILP32_LP64,
                       F8_D, F9_D, (sequence "F%u_D", 18, 27))>;

這與 gcc 所做的有點不同。 在 gcc 中,X3 和 X4 被認為是固定的。

對於 LLVM 中的 X2,它由 setStackPointerRegisterToSaveRestore 處理。

嘗試用通俗易懂的方式解釋。 如果 function 使用被調用者寄存器(例如 x8),它將保存並恢復它,這意味着之后我們將擁有相同的值。 如果它使用不屬於此列表的寄存器(例如 gcc 的 ra),它將不會執行此工作,並且由調用者 function 在使用它之前設法恢復值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM