RISCV的浮点计算单元FPU

news/2024/12/16 0:40:00/

1.机器特征寄存器CSR_MISA

        通过该寄存器可以查询当前处理器是否支持单精度浮点计算,是否支持双精度浮点计算,只要支持其中之一,就表示当前处理器支持浮点计算。

     csrr t0, CSR_MISAandi t0, t0, (COMPAT_HWCAP_ISA_F | COMPAT_HWCAP_ISA_D)beqz t0, out    //直接跳出表示机器硬件不支持浮点计算单元/*此处代码,表示机器硬件支持浮点计算单元*/    out:

2.机器状态寄存器CSR_STATUS

如果机器硬件上支持浮点计算单元,通过该寄存器可以启用或者关闭浮点计算功能。其中,设置相应位,就是启动浮点计算功能;清零相应位表示关闭浮点计算功能

/* 启用浮点计算功能 */li t0, SR_FScsrs CSR_STATUS, t0/* 关闭浮点计算功能 */li t0, SR_FScsrc CSR_STATUS, t0

3. 浮点计算单元

  1. 浮点控制状态寄存器fcsr
  2. 32个浮点寄存器f0/f1/.../f31

4.上下文保存

保存

ENTRY(__fstate_save)li  a2,  TASK_THREAD_F0add a0, a0, a2                      //此时, a0是线程信息结构首地址li t1, SR_FScsrs CSR_STATUS, t1                 //确保浮点计算单元启用frcsr t0                            //将浮点控制状态寄存器复制到通用寄存器t0中fsd f0,  TASK_THREAD_F0_F0(a0)      //先在线程信息结构体中保存32个浮点寄存器  fsd f1,  TASK_THREAD_F1_F0(a0)fsd f2,  TASK_THREAD_F2_F0(a0)fsd f3,  TASK_THREAD_F3_F0(a0)fsd f4,  TASK_THREAD_F4_F0(a0)fsd f5,  TASK_THREAD_F5_F0(a0)fsd f6,  TASK_THREAD_F6_F0(a0)fsd f7,  TASK_THREAD_F7_F0(a0)fsd f8,  TASK_THREAD_F8_F0(a0)fsd f9,  TASK_THREAD_F9_F0(a0)fsd f10, TASK_THREAD_F10_F0(a0)fsd f11, TASK_THREAD_F11_F0(a0)fsd f12, TASK_THREAD_F12_F0(a0)fsd f13, TASK_THREAD_F13_F0(a0)fsd f14, TASK_THREAD_F14_F0(a0)fsd f15, TASK_THREAD_F15_F0(a0)fsd f16, TASK_THREAD_F16_F0(a0)fsd f17, TASK_THREAD_F17_F0(a0)fsd f18, TASK_THREAD_F18_F0(a0)fsd f19, TASK_THREAD_F19_F0(a0)fsd f20, TASK_THREAD_F20_F0(a0)fsd f21, TASK_THREAD_F21_F0(a0)fsd f22, TASK_THREAD_F22_F0(a0)fsd f23, TASK_THREAD_F23_F0(a0)fsd f24, TASK_THREAD_F24_F0(a0)fsd f25, TASK_THREAD_F25_F0(a0)fsd f26, TASK_THREAD_F26_F0(a0)fsd f27, TASK_THREAD_F27_F0(a0)fsd f28, TASK_THREAD_F28_F0(a0)fsd f29, TASK_THREAD_F29_F0(a0)fsd f30, TASK_THREAD_F30_F0(a0)fsd f31, TASK_THREAD_F31_F0(a0)sw t0, TASK_THREAD_FCSR_F0(a0)            //在线程信息结构体中,保存浮点控制状态寄存器的值csrc CSR_STATUS, t1                        //关闭浮点计算单元ret
ENDPROC(__fstate_save)

 恢复

ENTRY(__fstate_restore)li  a2,  TASK_THREAD_F0add a0, a0, a2li t1, SR_FSlw t0, TASK_THREAD_FCSR_F0(a0)csrs CSR_STATUS, t1                    //启用浮点计算单元fld f0,  TASK_THREAD_F0_F0(a0)        //恢复32个浮点寄存器fld f1,  TASK_THREAD_F1_F0(a0)fld f2,  TASK_THREAD_F2_F0(a0)fld f3,  TASK_THREAD_F3_F0(a0)fld f4,  TASK_THREAD_F4_F0(a0)fld f5,  TASK_THREAD_F5_F0(a0)fld f6,  TASK_THREAD_F6_F0(a0)fld f7,  TASK_THREAD_F7_F0(a0)fld f8,  TASK_THREAD_F8_F0(a0)fld f9,  TASK_THREAD_F9_F0(a0)fld f10, TASK_THREAD_F10_F0(a0)fld f11, TASK_THREAD_F11_F0(a0)fld f12, TASK_THREAD_F12_F0(a0)fld f13, TASK_THREAD_F13_F0(a0)fld f14, TASK_THREAD_F14_F0(a0)fld f15, TASK_THREAD_F15_F0(a0)fld f16, TASK_THREAD_F16_F0(a0)fld f17, TASK_THREAD_F17_F0(a0)fld f18, TASK_THREAD_F18_F0(a0)fld f19, TASK_THREAD_F19_F0(a0)fld f20, TASK_THREAD_F20_F0(a0)fld f21, TASK_THREAD_F21_F0(a0)fld f22, TASK_THREAD_F22_F0(a0)fld f23, TASK_THREAD_F23_F0(a0)fld f24, TASK_THREAD_F24_F0(a0)fld f25, TASK_THREAD_F25_F0(a0)fld f26, TASK_THREAD_F26_F0(a0)fld f27, TASK_THREAD_F27_F0(a0)fld f28, TASK_THREAD_F28_F0(a0)fld f29, TASK_THREAD_F29_F0(a0)fld f30, TASK_THREAD_F30_F0(a0)fld f31, TASK_THREAD_F31_F0(a0)fscsr t0                                    //恢复浮点控制状态寄存器csrc CSR_STATUS, t1                         //关闭浮点计算功能ret
ENDPROC(__fstate_restore)              


http://www.ppmy.cn/news/191786.html

相关文章

CF713div3 F

Problem - F - Codeforces 题意: 小明想买一个价值为c的东西,他开始打工,他一开始在第i个职务,每天可以挣a[i],他也可以用一天的时间并且花费b[i]升到i1职务,第i1职务每天可以挣a[i1] 一共有n个职务&#x…

BAM注意力机制——pytorch实现

论文传送门:BAM: Bottleneck Attention Module BAM的目的: 为网络添加注意力机制。 BAM的结构: ①通道注意力机制(Channel attention branch):与SEblock相似; ②空间注意力机制(Spatial attention branch)&#xf…

主板EC程序烧写异常致无法点亮修复经验

主板型号:Gigabyte AB350M-Gaming3 官网上明确写着支持R5 5500,但按照如下步骤实践下来实际是不支持的 升级biosF31到F40版本的注意事项: 步骤: 1 使用Q-Flash先将bios升级到f31版本;2 然后下载提示中的ECFW Update To…

基于多向梯度局部对比度的红外弱小目标检测算法(MDWCM)解析及代码(2021年IEEE GRSL 论文)

该论文是< IEEE GEOSCIENCE AND REMOTE SENSING LETTERS >期刊2020年录取的一篇较新的一篇论文《Robust Infrared Small Target Detection via Multidirectional Derivative-Based Weighted Contrast Measure》&#xff0c;目前网上下载地址为&#xff1a;https://www.re…

分享个SM2259XT Intel N18混贴3CH开卡经验

收了条Intel的512G不认盘的ssd&#xff0c;拆出来两颗29F02T2AMCQH1&#xff0c;这个应该是正品&#xff0c;ID也没问题。然后&#xff0c;还有个山寨的256G SATA&#xff0c;主控2259XT&#xff0c;两个颗粒丝印29F1TB2ALCTH2&#xff0c;但是&#xff0c;ID与CQH1一样&#x…

数据可视化 | Python绘制多维柱状图:一图展示西部各省人口变迁【附本文数据和代码】

查看原文&#xff1a;【数据seminar】https://mp.weixin.qq.com/s/pvx2ZzLbrBL-6cyOwVATOA Part1前言 柱状图是利用柱子的高度来反映数据差异的统计图&#xff0c;与一维的柱状图相比&#xff0c;二维柱状图可以展示y轴上的变量含有两个指标的情况&#xff0c;如下图&#xff0…

Arduino ESP8266 浮点数精度问题:保留指定位数、精度丢失

最近币市熊的一塌糊涂&#xff0c;闲来无事&#xff0c;正好在玩Arduino ESP8266相关硬件&#xff0c;成功晋身“电子垃圾佬”。那么就想用 ESP8266一个LCD屏幕 自己做一个能够显示币行情的小玩意儿&#xff0c;解解闷。结果发现一个尴尬的问题&#xff0c;SHIB&#xff08;屎币…

F2是什么?

互联网平台的机会有很多!之前出现的各种商业的模式让大家觉得琳琅满目,不知道该如何选择!因为之前很多的项目都是类似化的,没有做出真正有特点、真正有潜力的平台,所以大众都是处于观望的状态!但F2Trading一出来,马上引起了互联网的轰动,大众都趋之如骛去参与!到底F2Trading有着…