rstsr_openblas/driver_impl/cblas/blas3/
trsm.rs

1use 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}