rstsr_openblas/driver_impl/cblas/blas3/
syhemm.rs

1use crate::lapack_ffi;
2use crate::DeviceBLAS;
3use duplicate::duplicate_item;
4use num::Complex;
5use rstsr_blas_traits::blas3::syhemm::*;
6use rstsr_common::prelude::*;
7
8#[duplicate_item(
9    T     cblas_func  ;
10   [f32] [cblas_ssymm];
11   [f64] [cblas_dsymm];
12)]
13impl<const HERMI: bool> SYHEMMDriverAPI<T, HERMI> for DeviceBLAS {
14    unsafe fn driver_syhemm(
15        order: FlagOrder,
16        side: FlagSide,
17        uplo: FlagUpLo,
18        m: usize,
19        n: usize,
20        alpha: T,
21        a: *const T,
22        lda: usize,
23        b: *const T,
24        ldb: usize,
25        beta: T,
26        c: *mut T,
27        ldc: usize,
28    ) {
29        lapack_ffi::cblas::cblas_func(
30            order.into(),
31            side.into(),
32            uplo.into(),
33            m as _,
34            n as _,
35            alpha,
36            a,
37            lda as _,
38            b,
39            ldb as _,
40            beta,
41            c,
42            ldc as _,
43        );
44    }
45}
46
47#[duplicate_item(
48    T              cblas_func    HERMI ;
49   [Complex<f32>] [cblas_csymm] [false];
50   [Complex<f32>] [cblas_chemm] [true ];
51   [Complex<f64>] [cblas_zsymm] [false];
52   [Complex<f64>] [cblas_zhemm] [true ];
53)]
54impl SYHEMMDriverAPI<T, HERMI> for DeviceBLAS {
55    unsafe fn driver_syhemm(
56        order: FlagOrder,
57        side: FlagSide,
58        uplo: FlagUpLo,
59        m: usize,
60        n: usize,
61        alpha: T,
62        a: *const T,
63        lda: usize,
64        b: *const T,
65        ldb: usize,
66        beta: T,
67        c: *mut T,
68        ldc: usize,
69    ) {
70        lapack_ffi::cblas::cblas_func(
71            order.into(),
72            side.into(),
73            uplo.into(),
74            m as _,
75            n as _,
76            &alpha as *const _ as *const _,
77            a as *const _ as *const _,
78            lda as _,
79            b as *const _ as *const _,
80            ldb as _,
81            &beta as *const _ as *const _,
82            c as *mut _ as *mut _,
83            ldc as _,
84        );
85    }
86}