rstsr_openblas/driver_impl/cblas/blas3/
trsm.rs1use crate::lapack_ffi;
2use crate::DeviceBLAS;
3use duplicate::duplicate_item;
4use num::Complex;
5use rstsr_blas_traits::blas3::trsm::*;
6use rstsr_common::prelude::*;
7
8#[duplicate_item(
9 T cblas_func ;
10 [f32] [cblas_strsm];
11 [f64] [cblas_dtrsm];
12)]
13impl TRSMDriverAPI<T> for DeviceBLAS {
14 unsafe fn driver_trsm(
15 order: FlagOrder,
16 side: FlagSide,
17 uplo: FlagUpLo,
18 transa: FlagTrans,
19 diag: FlagDiag,
20 m: usize,
21 n: usize,
22 alpha: T,
23 a: *const T,
24 lda: usize,
25 b: *mut T,
26 ldb: usize,
27 ) {
28 lapack_ffi::cblas::cblas_func(
29 order.into(),
30 side.into(),
31 uplo.into(),
32 transa.into(),
33 diag.into(),
34 m as _,
35 n as _,
36 alpha,
37 a,
38 lda as _,
39 b,
40 ldb as _,
41 );
42 }
43}
44
45#[duplicate_item(
46 T cblas_func ;
47 [Complex<f32>] [cblas_ctrsm];
48 [Complex<f64>] [cblas_ztrsm];
49)]
50impl TRSMDriverAPI<T> for DeviceBLAS {
51 unsafe fn driver_trsm(
52 order: FlagOrder,
53 side: FlagSide,
54 uplo: FlagUpLo,
55 transa: FlagTrans,
56 diag: FlagDiag,
57 m: usize,
58 n: usize,
59 alpha: T,
60 a: *const T,
61 lda: usize,
62 b: *mut T,
63 ldb: usize,
64 ) {
65 lapack_ffi::cblas::cblas_func(
66 order.into(),
67 side.into(),
68 uplo.into(),
69 transa.into(),
70 diag.into(),
71 m as _,
72 n as _,
73 &alpha as *const _ as *const _,
74 a as *const _,
75 lda as _,
76 b as *mut _,
77 ldb as _,
78 );
79 }
80}