Skip to content

Commit d51987d

Browse files
authored
Implement MSVC complex types (Reference-LAPACK PR 1164)
1 parent 9f2cec7 commit d51987d

2 files changed

Lines changed: 20 additions & 30 deletions

File tree

‎lapack-netlib/LAPACKE/include/lapack.h‎

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,15 +49,19 @@
4949
#else
5050
#include <complex>
5151
#endif
52+
#if _MSC_VER
53+
#define lapack_complex_float _Fcomplex
54+
#else
5255
#define lapack_complex_float float _Complex
5356
#endif
57+
#endif
5458

5559
#ifndef lapack_complex_float_real
56-
#define lapack_complex_float_real(z) (creal(z))
60+
#define lapack_complex_float_real(z) (crealf(z))
5761
#endif
5862

5963
#ifndef lapack_complex_float_imag
60-
#define lapack_complex_float_imag(z) (cimag(z))
64+
#define lapack_complex_float_imag(z) (cimagf(z))
6165
#endif
6266

6367
/* Complex type (double precision) */
@@ -67,8 +71,12 @@
6771
#else
6872
#include <complex>
6973
#endif
74+
#if _MSC_VER
75+
#define lapack_complex_double _Dcomplex
76+
#else
7077
#define lapack_complex_double double _Complex
7178
#endif
79+
#endif
7280

7381
#ifndef lapack_complex_double_real
7482
#define lapack_complex_double_real(z) (creal(z))

‎lapack-netlib/LAPACKE/include/lapacke_config.h‎

Lines changed: 10 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -67,34 +67,7 @@ extern "C" {
6767
#define lapack_logical lapack_int
6868
#endif
6969

70-
#if defined(_MSC_VER) && defined(__INTEL_CLANG_COMPILER)
71-
#define LAPACK_COMPLEX_STRUCTURE
72-
#define LAPACK_GLOBAL(lcname,UCNAME) lcname
73-
#define NOCHANGE
74-
#endif
75-
7670
#ifndef LAPACK_COMPLEX_CUSTOM
77-
#if defined(_MSC_VER) && !defined(__INTEL_CLANG_COMPILER)
78-
#if defined(LAPACK_COMPLEX_CPP)
79-
#include <complex>
80-
#define lapack_complex_float std::complex<float>
81-
#define lapack_complex_double std::complex<double>
82-
#define lapack_complex_float_real(z) ((z).real())
83-
#define lapack_complex_float_imag(z) ((z).imag())
84-
#define lapack_complex_double_real(z) ((z).real())
85-
#define lapack_complex_double_imag(z) ((z).imag())
86-
#define _CRT_USE_C_COMPLEX_H
87-
#else
88-
#include <complex.h>
89-
#define LAPACK_COMPLEX_CUSTOM
90-
#define lapack_complex_float _Fcomplex
91-
#define lapack_complex_double _Dcomplex
92-
#define lapack_complex_float_real(z) (crealf(z))
93-
#define lapack_complex_float_imag(z) (cimagf(z))
94-
#define lapack_complex_double_real(z) (creal(z))
95-
#define lapack_complex_double_imag(z) (cimag(z))
96-
#endif
97-
#else
9871

9972
#if defined(LAPACK_COMPLEX_STRUCTURE)
10073

@@ -126,6 +99,16 @@ typedef struct { double real, imag; } _lapack_complex_double;
12699
#define lapack_complex_double_real(z) ((z).real())
127100
#define lapack_complex_double_imag(z) ((z).imag())
128101

102+
#elif defined(_MSC_VER) && !defined(__INTEL_COMPILER) && !defined(__INTEL_LLVM_COMPILER)
103+
104+
#include <complex.h>
105+
#define lapack_complex_float _Fcomplex
106+
#define lapack_complex_double _Dcomplex
107+
#define lapack_complex_float_real(z) (crealf(z))
108+
#define lapack_complex_float_imag(z) (cimagf(z))
109+
#define lapack_complex_double_real(z) (creal(z))
110+
#define lapack_complex_double_imag(z) (cimag(z))
111+
129112
#else
130113

131114
#include <complex.h>
@@ -136,7 +119,6 @@ typedef struct { double real, imag; } _lapack_complex_double;
136119
#define lapack_complex_double_real(z) (creal(z))
137120
#define lapack_complex_double_imag(z) (cimag(z))
138121

139-
#endif
140122
#endif
141123

142124
lapack_complex_float lapack_make_complex_float( float re, float im );

0 commit comments

Comments
 (0)