riscv向量文档中给出了strlen的实现,
大概是这么一个思路,
- 加载向量: 使用向量加载指令(如
vload
)从内存中加载一个向量长度的字符。 - 比较向量与零: 使用向量比较指令(如
vmask
或vcmpeq
)来检查向量中的每个字符是否为零。 - 查找零元素: 使用向量查找指令(如
vfirst
)来找到向量中第一个零元素的位置。 - 处理结果: 如果在向量中找到了零元素,则更新
strlen
的值,并可能调整指针以继续搜索剩余的字符串。 - 处理剩余字符: 如果向量中没有零元素,则继续处理剩余的字符,直到找到空字符为止。
vle8ff 避免出现crash
最后几行的逻辑如下
len = x - a0
x = a3 - (a1 - a2)
所以
len = a3 + a2 - (a0 + a1)