# Parameter file for test_more.
#
# "always" are adjoints that are updated/computed regardless of the value of sel
# "sel" are adjoints that are only updated/computed if so indicated by sel
# "update" are adjoints that are added to; other adjoints are assigned to
# "scalar" are scalar parameters
# "vector" are vector parameters
# "matrix" are matrix parameters
# "inc" are vectors for which increments are tested
#
# Note that some adjoints marked "always" are not updated (if the corresponding
# parameter is always left unchanged by the corresponging BLAS-call)
#
# See more comments in build-more-tests.awk and test-more-template.txt

sasum
always: xa ba
vector: x xa
scalar: ba
inc: x
callrmd: call sasum_rmd(n, x, incx, xa, ba)

sswap
always: xa ya
vector: xa ya
inc: x y
callrmd: call sswap_rmd(n, incx, incy, xa, ya)

sscal
always: xa alphaa
scalar: alpha alphaa
vector: xa x0
inc: x
callrmds: call sscal_rmds(n, x0, incx, alphaa, xa)
callrmd: call sscal_rmd(n, alpha, incx, xa)

scopy
always: xa ya
update: xa
vector: xa ya
inc: x y
callrmd: call scopy_rmd(n, incx, incy, xa, ya)

saxpy
always: xa ya alphaa
update: xa
scalar: alpha alphaa
vector: x xa ya
inc: x y
callrmds: call saxpy_rmds(n, x, incx, incy, alphaa, ya)
callrmd: call saxpy_rmd(n, alpha, incx, incy, xa, ya)

sdot
sel: xa ya
update: xa ya
scalar: dota
vector: x y xa ya
inc: x y
callrmd: call sdot_rmd(n, x, incx, y, incy, dota, xa, ya, sel)

snrm2
always: xa
update: xa
scalar: b ba
vector: x xa
inc: x
callrmd: call snrm2_rmd(n, x, incx, b, xa, ba)

sgemv
sel: Aa xa ya
sels: alphaa betaa
update: Aa xa
scalar: alpha alphaa beta betaa
vector: x xa y0 ya
matrix: A Aa
destroyed: y0
opt: trans
inc: x y
callrmds: call sgemv_rmds(trans, n, n, A, n, x, incx, y0, incy, alphaa, betaa, ya, sels)
callrmd: call sgemv_rmd(trans, n, n, alpha, A, n, x, incx, beta, incy, Aa, xa, ya, sel)

sgbmv
sel: Aa xa ya
sels: alphaa betaa
update: Aa xa
destroyed: y0
scalar: alpha alphaa beta betaa
vector: x xa y0 ya
matrix: A Aa
opt: trans
inc: x y
callrmds: call sgbmv_rmds(trans, n, n, 1, 2, A, n, x, incx, y0, incy, alphaa, betaa, ya, sels)
callrmd: call sgbmv_rmd(trans, n, n, 1, 2, alpha, A, n, x, incx, beta, incy, Aa, xa, ya, sel)

ssymv
sel: Aa xa ya
sels: alphaa betaa
update: Aa xa
scalar: alpha alphaa beta betaa
vector: x xa y0 ya
matrix: A Aa
destroyed: y0
opt: uplo
inc: x y
callrmds: call ssymv_rmds(uplo, n, A, n, x, incx, y0, incy, alphaa, betaa, ya, sels)
callrmd: call ssymv_rmd(uplo, n, alpha, A, n, x, incx, beta, incy, Aa, xa, ya, sel)

ssbmv
sel: Aa xa ya
sels: alphaa betaa
update: Aa xa
scalar: alpha alphaa beta betaa
vector: x xa y0 ya
matrix: A Aa
destroyed: y0
opt: uplo
inc: x y
callrmds: call ssbmv_rmds(uplo, n, 2, A, n, x, incx, y0, incy, alphaa, betaa, ya, sels)
callrmd: call ssbmv_rmd(uplo, n, 2, alpha, A, n, x, incx, beta, incy, Aa, xa, ya, sel)

sspmv
sel: APa xa ya
sels: alphaa betaa
update: APa xa
scalar: alpha alphaa beta betaa
vector: x xa y0 ya
packed: AP APa
destroyed: y0
opt: uplo
inc: x y
callrmds: call sspmv_rmds(uplo, n, AP, x, incx, y0, incy, alphaa, betaa, ya, sels)
callrmd: call sspmv_rmd(uplo, n, alpha, AP, x, incx, beta, incy, APa, xa, ya, sel)

strmv
sel: Aa xa
update: Aa
vector: x0 xa
matrix: A Aa
opt: uplo trans diag
inc: x
callrmd: call strmv_rmd(uplo, trans, diag, n, A, n, x0, incx, Aa, xa, sel)

stbmv
sel: Aa xa
update: Aa
vector: x0 xa
matrix: A Aa
opt: uplo trans diag
inc: x
callrmd: call stbmv_rmd(uplo, trans, diag, n, 2, A, n, x0, incx, Aa, xa, sel)

stpmv
sel: APa xa
update: APa
vector: x0 xa
packed: AP APa
opt: uplo trans diag
inc: x
callrmd: call stpmv_rmd(uplo, trans, diag, n, AP, x0, incx, APa, xa, sel)

strsv
sel: Aa xa
update: Aa
vector: x xa
matrix: A Aa
workspace: wrk
wrksel: 2
opt: uplo trans diag
inc: x
callrmd: call strsv_rmd(uplo, trans, diag, n, A, n, x, incx, Aa, xa, wrk, sel)

stbsv
sel: Aa xa
update: Aa
vector: x xa
matrix: A Aa
workspace: wrk
wrksel: 2
opt: uplo trans diag
inc: x
callrmd: call stbsv_rmd(uplo, trans, diag, n, 2, A, n, x, incx, Aa, xa, wrk, sel)

stpsv
sel: APa xa
update: APa
vector: x xa
packed: AP APa
workspace: wrk
wrksel: 2
opt: uplo trans diag
inc: x
callrmd: call stpsv_rmd(uplo, trans, diag, n, AP, x, incx, APa, xa, wrk, sel)

sger
sel: xa ya Aa
always: alphaa
update: xa ya
scalar: alpha alphaa
vector: x y xa ya
matrix: Aa
inc: x y
callrmds: call sger_rmds(n, n, x, incx, y, incy, n, alphaa, Aa)
callrmd: call sger_rmd(n, n, alpha, x, incx, y, incy, n, xa, ya, Aa, sel)

ssyr
always: xa Aa alphaa
update: xa
scalar: alpha alphaa
vector: x xa
matrix: Aa
opt: uplo
inc: x
callrmds: call ssyr_rmds(uplo, n, x, incx, n, alphaa, Aa)
callrmd: call ssyr_rmd(uplo, n, alpha, x, incx, n, xa, Aa)

sspr
always: xa APa alphaa
update: xa
scalar: alpha alphaa
vector: x xa
packed: APa
opt: uplo
inc: x
callrmds: call sspr_rmds(uplo, n, x, incx, alphaa, APa)
callrmd: call sspr_rmd(uplo, n, alpha, x, incx, xa, APa)

ssyr2
sel: xa ya Aa
always: alphaa
update: xa ya
scalar: alpha alphaa
vector: x y xa ya
matrix: Aa
opt: uplo
inc: x y
callrmds: call ssyr2_rmds(uplo, n, x, incx, y, incy, n, alphaa, Aa)
callrmd: call ssyr2_rmd(uplo, n, alpha, x, incx, y, incy, n, xa, ya, Aa, sel) 

sspr2
sel: xa ya APa
always: alphaa
update: xa ya
scalar: alpha alphaa
vector: x y xa ya
packed: APa
opt: uplo
inc: x y
callrmds: call sspr2_rmds(uplo, n, x, incx, y, incy, alphaa, APa)
callrmd: call sspr2_rmd(uplo, n, alpha, x, incx, y, incy, xa, ya, APa, sel)

sgemm
sel: Aa Ba Ca
sels: alphaa betaa
update: Aa Ba
scalar: alpha alphaa beta betaa
matrix: A B C0 Aa Ba Ca
destroyed: C0
opt: transa transb
callrmds: call sgemm_rmds(transa, transb, n, n, n, A, n, B, n, C0, n, alphaa, betaa, Ca, sels)
callrmd: call sgemm_rmd(transa, transb, n, n, n, alpha, A, n, B, n, beta, n, Aa, Ba, Ca, sel)

ssymm
sel: Aa Ba Ca
sels: alphaa betaa
update: Aa Ba
scalar: alpha alphaa beta betaa
matrix: A B C0 Aa Ba Ca
destroyed: C0
opt: side uplo
callrmds: call ssymm_rmds(side, uplo, n, n, A, n, B, n, C0, n, alphaa, betaa, Ca, sels)
callrmd: call ssymm_rmd(side, uplo, n, n, alpha, A, n, B, n, beta, n, Aa, Ba, Ca, sel)

ssyrk
sel: Aa Ca
sels: alphaa betaa
update: Aa
scalar: alpha alphaa beta betaa
matrix: A Aa C0 Ca
destroyed: C0
opt: uplo trans
callrmds: call ssyrk_rmds(uplo, trans, n, n, A, n, C0, n, alphaa, betaa, Ca, sels)
callrmd: call ssyrk_rmd(uplo, trans, n, n, alpha, A, n, beta, n, Aa, Ca, sel)

ssyr2k
sel: Aa Ba Ca
sels: alphaa betaa
update: Aa Ba
scalar: alpha alphaa beta betaa
matrix: A B Aa Ba Ca C0
destroyed: C0
opt: uplo trans
callrmds: call ssyr2k_rmds(uplo, trans, n, n, A, n, B, n, C0, n, alphaa, betaa, Ca, sels)
callrmd: call ssyr2k_rmd(uplo, trans, n, n, alpha, A, n, B, n, beta, n, Aa, Ba, Ca, sel)

strmm
sel: Aa Ba
always: alphaa
update: Aa alphaa
scalar: alpha alphaa
matrix: A Aa B0 Ba
destroyed: B0
opt: side uplo transa diag
workspace: wrk
callrmds: call strmm_rmds(side, uplo, transa, diag, n, n, A, n, B0, n, alphaa, Ba, wrk)
callrmd: call strmm_rmd(side, uplo, transa, diag, n, n, alpha, A, n, B0, n, Aa, Ba, sel)

strsm
sel: Aa Ba
always: alphaa
update: Aa
scalar: alpha alphaa
matrix: A Aa B B0 Ba
destroyed: B0
workspace: wrk
wrksel: 2
opt: side uplo transa diag
callrmds: call strsm_rmds(side, uplo, transa, diag, n, n, A, n, B0, n, alphaa, Ba)
callrmd: call strsm_rmd(side, uplo, transa, diag, n, n, alpha, A, n, B, n, Aa, Ba, wrk, sel)

spotrf
always: Aa
matrix: A Aa
opt: uplo
callrmd: call spotrf_rmd(uplo, n, A, n, Aa)


L1_BLAS     := swap scal copy axpy dot nrm2
L2_BLAS     := gemv gbmv symv sbmv spmv trmv tbmv tpmv trsv
               tbsv tpsv ger syr spr syr2 spr2
L3_BLAS     := gemm symm syrk syr2k trmm trsm

