/* This strrchr implementation supports m1-m8, can tune to hardware */
#define ELEM_LMUL_SETTING m1
#define vMask v0
#define vStr v8
#define vMaskEnd v16
#define vMaskCh v16
#define vMaskFirst v17
ENTRY(strrchr)
mv pStr, a0
li pRet, 0
vsetvli iVL, zero, e8, ELEM_LMUL_SETTING, ta, ma
L(load_vec):
vle8ff.v vStr, (pStr)
vmseq.vi vMaskEnd, vStr, 0
vfirst.m iEndOffset, vMaskEnd /* first occurrence of \0 */
vmsif.m vMask, vMaskEnd /* mask up to and including \0 */
vmseq.vx vMaskCh, vStr, iCh, vMask.t
L(find_last_ch): /* TODO: use Zvbb vbrev.v to handle pessimal case where pStr is all ch */
vfirst.m iChOffset, vMaskCh, vMask.t /* first occurrence of ch */
bltz iChOffset, L(next)
add pRet, pStr, iChOffset
vmsof.m vMaskFirst, vMaskCh /* clear the one we found */
vmandn.mm vMaskCh, vMaskCh, vMaskFirst
j L(find_last_ch)
L(next):
csrr iCurrentVL, vl
add pStr, pStr, iCurrentVL
bltz iEndOffset, L(load_vec) /* Didn't find \0? */
ret
END(strrchr)
Messung V0.5 in Prozent
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.9Bemerkung:
(vorverarbeitet am 2026-09-28)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.