gp ,g lobal pointer,全局指針寄存器,RISC-V 32個(gè)寄存器之一,為了優(yōu)化±2KB內(nèi)全局變量的訪問(wèn)。
gp寄存器在啟動(dòng)代碼中加載為__global_pointer$
的地址,并且之后不能被改變。
linker時(shí)使用 __global_pointer$ 來(lái)比較全局變量的地址,如果在范圍內(nèi),就替換掉lui或puipc指令的 absolute/pc-relative尋址, 變?yōu)間p-relative尋址,使得代碼效率更高。 該過(guò)程被稱(chēng)為 linker relaxation (鏈接器松弛),也可以使用-Wl,--no-relax
來(lái)關(guān)閉此功能。
如:需要讀取全局變量 tao_global的值,地址位 0x20000100 ,gp指針地址為 0x20000800 ;
- 普通調(diào)用方式為:
lui a5,0x20000 /* 將0x20000100高20位0x20000 左移12位賦給a5寄存器 */ lw a5,256(a5) /* 加載a5+256(0x100,0x20000100低12位)的值至a5寄存器 */
- gp指針優(yōu)化調(diào)用方式:
lw a5,-1792(gp) /* 加載gp-1792地址處的值至a5,即0x20000100處的值*/
通過(guò)gp指針,訪問(wèn)其值±2KB,即4KB范圍內(nèi)的全局變量,可以節(jié)約一條指令。
4KB區(qū)域可以位于尋址內(nèi)存中任意位置,但是為了使優(yōu)化更有效率,最好覆蓋最頻繁使用的RAM區(qū)域。 對(duì)于標(biāo)準(zhǔn)的newlib應(yīng)用程序,這是分配.sdata部分的區(qū)域,因?yàn)樗酥T如_impure_ptr、malloc_sbrk_base等變量。 因此,定義應(yīng)該被放在.sdata部分之前。 以RISC-V MCU CH32V103 ld文件為例:
.data :
{
*(.gnu.linkonce.r.*)
*(.data .data.*)
*(.gnu.linkonce.d.*)
. = ALIGN(8);
PROVIDE( __global_pointer$ = . + 0x800 ); /* __global_pointer地址*/
*(.sdata .sdata.*)
*(.sdata2.*)
*(.gnu.linkonce.s.*)
. = ALIGN(8);
*(.srodata.cst16)
*(.srodata.cst8)
*(.srodata.cst4)
*(.srodata.cst2)
*(.srodata .srodata.*)
. = ALIGN(4);
PROVIDE( _edata = .);
} >RAM AT>FLASH
gp指針優(yōu)化代碼空間---
通常情況下,gp指針定義在data區(qū),有時(shí)候?yàn)榱藘?yōu)化代碼密度,可以根據(jù)實(shí)際情況修改gp指針的位置,如工程中定義了大量的初始化為0或未初始化的全局?jǐn)?shù)組作為緩沖區(qū),可以將gp指針的位置定義到bss段。
-
mcu
+關(guān)注
關(guān)注
146文章
17718瀏覽量
358200 -
寄存器
+關(guān)注
關(guān)注
31文章
5401瀏覽量
122781 -
指針
+關(guān)注
關(guān)注
1文章
484瀏覽量
70905 -
變量
+關(guān)注
關(guān)注
0文章
614瀏覽量
28751 -
RISC-V
+關(guān)注
關(guān)注
46文章
2461瀏覽量
48006
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
擁抱RISC-V的開(kāi)發(fā)世界 兆易創(chuàng)新推GD32VF103系列RISC-V MCU
國(guó)產(chǎn)RISC-V MCU推薦
RISC-V的MCU與ARM對(duì)比
RISC-V的MCU關(guān)于USB高速通信設(shè)計(jì)的難點(diǎn)
risc-v的mcu對(duì)RTOS兼容性如何
RISC-V MCU技術(shù)
RISC-V MCU開(kāi)發(fā) (一):集成開(kāi)發(fā)環(huán)境
RISC-V MCU開(kāi)發(fā)相關(guān)資料分享
RISC-V MCU開(kāi)發(fā)相關(guān)資料分享
RISC-V的相關(guān)資料分享
RISC-V MCU開(kāi)發(fā)的相關(guān)資料分享
RISC-V gp全局指針寄存器說(shuō)明
RISC-V MCU開(kāi)發(fā)(一):集成開(kāi)發(fā)環(huán)境

評(píng)論