@@ -758,8 +758,26 @@ private func clapack_dgetri_(
758758 _ info: UnsafeMutablePointer < CLong >
759759) -> Void
760760
761+ @_silgen_name ( " dgeev_ " )
762+ private func clapack_dgeev_(
763+ _ jobvl: UnsafeMutablePointer < CChar > ,
764+ _ jobvr: UnsafeMutablePointer < CChar > ,
765+ _ n: UnsafeMutablePointer < CLong > ,
766+ _ a: UnsafeMutablePointer < Double > ,
767+ _ lda: UnsafeMutablePointer < CLong > ,
768+ _ wr: UnsafeMutablePointer < Double > ,
769+ _ wi: UnsafeMutablePointer < Double > ,
770+ _ vl: UnsafeMutablePointer < Double > ,
771+ _ ldvl: UnsafeMutablePointer < CLong > ,
772+ _ vr: UnsafeMutablePointer < Double > ,
773+ _ ldvr: UnsafeMutablePointer < CLong > ,
774+ _ work: UnsafeMutablePointer < Double > ,
775+ _ lwork: UnsafeMutablePointer < CLong > ,
776+ _ info: UnsafeMutablePointer < CLong >
777+ ) -> Void
778+
761779// MARK: - CLAPACK Wrapper Functions for WASI
762- // Only dgetrf_ and dgetri_ are available in the CLAPACK eigen-support branch
780+ // dgetrf_, dgetri_, and dgeev_ are available in the CLAPACK eigen-support branch
763781
764782@inline ( __always)
765783internal func sgesv_( _ n: UnsafeMutablePointer < __CLPK_integer > , _ nrhs: UnsafeMutablePointer < __CLPK_integer > , _ a: UnsafeMutablePointer < Float > , _ lda: UnsafeMutablePointer < __CLPK_integer > , _ ipiv: UnsafeMutablePointer < __CLPK_integer > , _ b: UnsafeMutablePointer < Float > , _ ldb: UnsafeMutablePointer < __CLPK_integer > , _ info: UnsafeMutablePointer < __CLPK_integer > ) -> Int32 {
@@ -825,7 +843,19 @@ internal func sgeev_(_ jobvl: UnsafeMutablePointer<Int8>, _ jobvr: UnsafeMutable
825843
826844@inline ( __always)
827845internal func dgeev_( _ jobvl: UnsafeMutablePointer < Int8 > , _ jobvr: UnsafeMutablePointer < Int8 > , _ n: UnsafeMutablePointer < __CLPK_integer > , _ a: UnsafeMutablePointer < Double > , _ lda: UnsafeMutablePointer < __CLPK_integer > , _ wr: UnsafeMutablePointer < Double > , _ wi: UnsafeMutablePointer < Double > , _ vl: UnsafeMutablePointer < Double > , _ ldvl: UnsafeMutablePointer < __CLPK_integer > , _ vr: UnsafeMutablePointer < Double > , _ ldvr: UnsafeMutablePointer < __CLPK_integer > , _ work: UnsafeMutablePointer < Double > , _ lwork: UnsafeMutablePointer < __CLPK_integer > , _ info: UnsafeMutablePointer < __CLPK_integer > ) -> Int32 {
828- fatalError ( " LAPACK dgeev_ is not available on WASI (double-precision eigenvalue decomposition not supported) " )
846+ // Convert Int32 parameters to CLong for CLAPACK
847+ var nLong = CLong ( n. pointee)
848+ var ldaLong = CLong ( lda. pointee)
849+ var ldvlLong = CLong ( ldvl. pointee)
850+ var ldvrLong = CLong ( ldvr. pointee)
851+ var lworkLong = CLong ( lwork. pointee)
852+ var infoLong : CLong = 0
853+
854+ // Use correctly-typed function to avoid ABI mismatch (CLAPACK returns void, not int)
855+ clapack_dgeev_ ( jobvl, jobvr, & nLong, a, & ldaLong, wr, wi, vl, & ldvlLong, vr, & ldvrLong, work, & lworkLong, & infoLong)
856+
857+ info. pointee = __CLPK_integer ( infoLong)
858+ return Int32 ( infoLong)
829859}
830860
831861@inline ( __always)
0 commit comments