题目仓库:https://github.com/cyyself/chacha20-xiangshan
-
通过内联汇编优化ROTATE ChaCha20的核心计算操作是
ROTATE
,即循环左移操作,该操作在RISC-V指令集上通常使用slli
,srli
,or
三条指令实现。查看src/chacha.s
也可以看到目前未优化的chacha算法也是由上述三条指令实现的,但在RISC-V的Zbb扩展中提供了rol指令开源直接实现循环左移操作,在Zvkb、Zvbb中提供了进一步的优化。 参考:https://github.com/openssl/openssl/commit/ca6286c382a7eb527fac9aba2a018354acb27b16 具体来说,在原本chacha20_c.c
的基础上通过内联汇编的方式,添加对于vrori等指令的支持,即Zvbb扩展。之后通过编译.c
文件生成新的汇编文件,效率有一定的提升。
核心代码在src/chacha20.s
,将其和Makefile
覆盖到题目仓库对应位置,即可按照题目说明运行。
待补充......