RISC V 借助CSR實現不修改工具鏈擴充套件指令

2021-09-26 16:34:30 字數 923 閱讀 6163

通常來講,擴充套件指令集是要修改工具鏈的,至少也要修改彙編器和反彙編器。然而借助csr可以實現不修改工具鏈擴充套件指令集的目的。

zoomdyat163 dot com

csrrw ra, csr_jalmnxti, ra
翻閱 bumblebee核心指令架構手冊.pdf ,對這條指令是這麼解釋的:

bumblebee 核心定義了 jalmnxti 暫存器用於減少中斷延遲,加速中斷咬尾。

jalmnxti 除了包含 mnxti 的開啟中斷使能,處理下乙個中斷,返回下乙個中斷的入口位址等功能之外,還有跳轉至中斷 handler 的功能,因此可以縮短中斷處理的指令個數,達到減少中斷延遲,加速中斷咬尾的目的。

看起來是擴充套件了乙個csr暫存器,實際上是一條指令,而且這條指令的功能還挺複雜。

**裡寫的是csrrw ra, csr_jalmnxti, ra,實際上彙編器看到的是csrrw ra, 0x7ee, racsr_jalmnxti是個巨集,定義語句#define csr_pushmcause 0x7ee。反彙編生成的**也是csrrw ra,0x7ed,ra。這說明彙編器可以接受 csr 的位址,而不僅僅是 csr 的名稱,反彙編器對非標準的 csr 反彙編成位址而不是名稱。利用彙編器的這個特點,可以通過擴充套件csr來擴充套件指令集,不用修改彙編器就能使用擴充套件的功能。這是芯來的首創嗎?

還有乙個例子是 bumblebee 擴充套件的 wfe 指令,實際上也是通過 csr 擴充套件來實現。在 wfi 指令之前將 wfe csr 設定為1,就可以實現 wfe 指令的功能。雖然要多寫一條指令,但是卻是在沒有修改工具鏈的情況下擴充套件功能。工具鏈修改起來應該是個麻煩事,改完了還要驗證。

借助c 實現日期類

本篇部落格借用c 簡單實現乙個日期類 其中包括日期計算器,日期比較大小。接下來我將注釋寫到 中方便理解。date.h pragma once class date 拷貝建構函式 date const date d return this 析構函式 date 列印日期 void show 判斷是否為閏...

借助marquee實現彈幕效果

html標籤marquee實現滾動效果 基於此,實現簡易版 彈幕 p 竟然還有文字識別!p div br div class danmu p 這家 的書就是好 p div br div class danmu p 為啥都是計算機的書?p div br div class danmu p 還有手機版!...

Spring 借助Thymeleaf實現表單繫結

只要目標專一而不三心二意,持之以恆而不半途而廢,就一定能夠實現我們美好的理想。使用thymeleaf將乙個表單繫結到th object指定的物件上。html xmlns xmlns th head title register title head body form method post th ...