HostBlas
The host OpenBLAS as the JVM's Blas half, bound with java.lang.foreign.
Only the level-3 routines are native. gemv and symv delegate to the portable kernels, which are Vector API SIMD on this platform and beat a foreign call outright: measured, cblas_dgemv lost to them by 3x to 15x, because O(n^2) work over O(n^2) data has nothing to amortize a call against. The triangular routines keep their portable defaults for the same reason — cblas_dtrsv at n=256 took 65-136us against 25us portable.
Functions
ger
Portable below the level-2 gate, cblas_dger above it.
symm
In-place symmetric matrix-matrix accumulate C = alpha · A · B + beta · C, or C = alpha · B · A + beta · C when right (BLAS dsymm). As with symv, only the triangle of the symmetric a selected by lower is read. Shapes: b and c agree, and a is square with dimension B.rows (left) or B.cols (right). Per BLAS convention, beta == 0.0 overwrites c without reading it, and alpha == 0.0 reduces to the beta scale.
symv
Portable below DispatchThresholds.level2, native above it; see gemv.
syrk
In-place symmetric rank-k accumulate C = alpha · A·Aᵀ + beta · C, or alpha · Aᵀ·A + beta · C when transpose (BLAS dsyrk). With the default Uplo.FULL the full symmetric result is produced (the alpha term is applied to both triangles, and beta scales all of c); with Uplo.LOWER / Uplo.UPPER the standard dsyrk semantics apply — only the selected triangle is written and beta-scaled, the opposite strict triangle untouched. c must be square with dimension op(A).rows. Per BLAS convention, beta == 0.0 overwrites without reading (within the written region), and alpha == 0.0 reduces to the beta scale.
trmm
Portable below the level-3 gate, cblas_dtrmm above it.
trmv
Portable below the level-2 gate, cblas_dtrmv above it.
trsm
Portable below the level-3 gate, cblas_dtrsm above it.
trsv
Portable below the level-2 gate, cblas_dtrsv above it.
Matrix-matrix product A · B into a fresh matrix (restricted gemm with alpha = 1, beta = 0); A.cols must equal B.rows.
In-place matrix-matrix accumulate C = alpha · op(A) · op(B) + beta · C (full BLAS dgemm), where op transposes its operand when transposeA / transposeB is set. Shapes must satisfy op(A): m×k, op(B): k×n, C: m×n. Per BLAS convention, beta == 0.0 overwrites c without reading it, and alpha == 0.0 reduces to the beta scale.
Matrix-vector product A · x, or Aᵀ · x when transpose, into a fresh result (restricted gemv with alpha = 1, beta = 0).
Portable below DispatchThresholds.level2, native above it.
Symmetric rank-1 update A += alpha · x · xᵀ (BLAS dsyr), writing the triangle(s) uplo selects.
Symmetric rank-2 update A += alpha · (x · yᵀ + y · xᵀ) (BLAS dsyr2), writing the triangle(s) uplo selects.
Symmetric rank-2k update C = alpha · (op(A) · op(B)ᵀ + op(B) · op(A)ᵀ) + beta · C (BLAS dsyr2k), where op transposes when transpose.
gemm
In-place matrix-matrix accumulate C = alpha · op(A) · op(B) + beta · C (full BLAS dgemm), where op transposes its operand when transposeA / transposeB is set. Shapes must satisfy op(A): m×k, op(B): k×n, C: m×n. Per BLAS convention, beta == 0.0 overwrites c without reading it, and alpha == 0.0 reduces to the beta scale.
gemv
Portable below DispatchThresholds.level2, native above it.
The default threshold makes that "always portable" on this platform, and the numbers behind it are on the constant: the point of routing through the gate rather than hardcoding the delegation is that the decision is one measured value, visible and overridable, instead of a choice buried in a method.