rstsr_openblas/driver_impl/cblas/blas3/
syhemm.rs1use 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}