Hi:
I am Kito from the RISC-V psABI group, we've defined a basic vector
ABI, which allows function use vector registers within function, that
could be used for optimize several libraries like libc, e.g. we can
use vector instruction to accelerate several memory and string
manipulation functions like strcmp or memcpy.
However we still missing a complete vector ABI which includes a vector
calling convention and vector libraries interface for RISC-V vector
extensions, that's high priority job for psABI group this year, one of
major goal of this mail is seeking potential benchmark for evaluating
the design of vector ABI and make sure no missing item in the plan, so
any feedbacks are appreciated!
# Vector Calling Convention (Highest priority)
Vector calling convention will include following items:
- Define a vector calling convention variant to allow program pass
value with scalable vector type (e.g. vint32m1_t) within vector
registers.
- Define a vector calling convention variant to allow program pass
value with fixed-vector type (e.g. int32x4_t) within vector registers.
- Vector function signature/mangling
# Vector Libraries Interface
- Interface for math function, e.g. vector version of sin function,
define the function name, function signature and the behavior for tail
and masked-off elements.
# Benchmarks:
We would like to collect any benchmarks which contain function calls
inside kernel function, since we need to evaluate the design of
calling conversion like how many registers used to pass parameters and
return value, and the allocation of callee-save and caller-save
registers.
Currently we are consider using follow benchmarks to evaluate the
design of calling convention:
- TSVC
- PolyBenchC
NOTE: We don't have a complete compiler auto vectorizer
implementation, especially the ability for those math functions, so
we'll rewrite the vectorized version by hand for evaluation.
Thanks!