-
Notifications
You must be signed in to change notification settings - Fork 15
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
RV64G到RV32G的指令替换 #39
Comments
addw->add remw->rem |
在bishengJDK方面,marcoAssembler_riscv64.hpp中spill()和unspill()函数中,有ld->lw,ld->lwu,sd->sw,fsd->fsw,这种对应关系。这个对64位指令到32位指令的转换有参考意义。 |
load 和 store 从64位到32位转换的规则更新: LD->LW 其余的指令都是可以32位和64位通用的。LW,LH,LHU,LB,LBU,SW,SH,SB ,FLW,FSW,FLD,FSD。 |
addw->add |
srliw -> srli |
结合前面的工作,该系列进行整理后: sllw->sll 相关issue:#205 |
加减乘除部分更新和总结修改规则如下: addw->add mul,mulh,mulhsu是32/64通用指令,不用修改。 相关issue: #208 |
在调试过程中于l2f所对应的汇编码中发现了非法指令
对应rv64 only的
需要修改D/F相关的几个指令: fcvt.l.s 通常表示为 fcvt_l_s,需要更新为 fcvt.w.s(fcvt_w_s), 已提交 #212 ,对当前运行结果没有影响,请 @shining1984 @zhangxiang-plct review 补充: RV32F中: 20220112更新long与double/float转换的字节码中直接替换 因为java中Long类型数据(64bit)与Double/Float数据的转换逻辑,而rv32中原生的指令都是32bit的整型与浮点型的转换,在rv32中double为64位,long为32位,所以直接使用 所以 #326 采用了类似软浮点的操作,使用 |
RISC-V原子操作(A扩展)的指令有两类:存取系列指令和原子内存操作指令(AMO)。 其中,存取系列指令在前面介绍过,lr.d/lr.w, sc.d/sc.w.其中lr.d和sc.d是64位的。lr.w和sc.w是64/32都可以的。 AMO指令有: 原子指令的转换规则为将64位的“.d”结尾的指令替换为64位/32位皆可的".w"结尾的指令。 相关issue: #210 |
对关系比较指令进行梳理: 64/32通用指令: beq beqz bge begu begz bgt bgtu bgtz ble bleu blez blt bltz bltu bne bnez seqz sgtz slt slti sltiu sltu sltz snez 没有发现需要进行转换的指令,目前该部分指令都是64位和32位通用的。 相关issue: #222 |
目前已经改了一部分RV64G的指令,对应到RV32G的指令。本issue会将已经使用的转换列出来,为后续调试做参考。
The text was updated successfully, but these errors were encountered: