Skip to content

Commit bfc5228

Browse files
committed
Update vdsp implementation for XP
1 parent f58bb4a commit bfc5228

1 file changed

Lines changed: 30 additions & 0 deletions

File tree

Sources/Matft/library/vDSP.swift

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2438,34 +2438,57 @@ internal func vDSP_vfixru32D(_ src: UnsafePointer<Double>, _ srcStride: Int, _ d
24382438

24392439
// MARK: - vDSP Wrapper Functions for WASI
24402440

2441+
@inline(__always)
2442+
fileprivate func _adjust_ptr<T>(_ ptr: UnsafePointer<T>, _ stride: Int, _ size: Int) -> UnsafePointer<T>{
2443+
guard stride < 0, size > 0 else { return ptr }
2444+
return ptr + (size - 1) * stride
2445+
}
2446+
2447+
@inline(__always)
2448+
fileprivate func _adjust_mptr<T>(_ ptr: UnsafeMutablePointer<T>, _ stride: Int, _ size: Int) -> UnsafeMutablePointer<T>{
2449+
guard stride < 0, size > 0 else { return ptr }
2450+
return ptr + (size - 1) * stride
2451+
}
2452+
24412453
@inline(__always)
24422454
internal func wrap_vDSP_convert<T, U>(_ size: Int, _ srcptr: UnsafePointer<T>, _ srcStride: Int, _ dstptr: UnsafeMutablePointer<U>, _ dstStride: Int, _ vDSP_func: (UnsafePointer<T>, Int, UnsafeMutablePointer<U>, Int, Int) -> Void){
2455+
let srcptr = _adjust_ptr(srcptr, srcStride, size)
2456+
let dstptr = _adjust_mptr(dstptr, dstStride, size)
24432457
vDSP_func(srcptr, srcStride, dstptr, dstStride, size)
24442458
}
24452459

24462460
@inline(__always)
24472461
internal func wrap_vDSP_biopvv<T>(_ size: Int, _ lsrcptr: UnsafePointer<T>, _ lsrcStride: Int, _ rsrcptr: UnsafePointer<T>, _ rsrcStride: Int, _ dstptr: UnsafeMutablePointer<T>, _ dstStride: Int, _ vDSP_func: vDSP_biopvv_func<T>){
2462+
let lsrcptr = _adjust_ptr(lsrcptr, lsrcStride, size)
2463+
let rsrcptr = _adjust_ptr(rsrcptr, rsrcStride, size)
2464+
let dstptr = _adjust_mptr(dstptr, dstStride, size)
24482465
vDSP_func(rsrcptr, rsrcStride, lsrcptr, lsrcStride, dstptr, dstStride, size)
24492466
}
24502467

24512468
@inline(__always)
24522469
internal func wrap_vDSP_biopvs<T>(_ size: Int, _ srcptr: UnsafePointer<T>, _ srcStride: Int, _ scalar: UnsafePointer<T>, _ dstptr: UnsafeMutablePointer<T>, _ dstStride: Int, _ vDSP_func: vDSP_biopvs_func<T>){
2470+
let srcptr = _adjust_ptr(srcptr, srcStride, size)
2471+
let dstptr = _adjust_mptr(dstptr, dstStride, size)
24532472
vDSP_func(srcptr, srcStride, scalar, dstptr, dstStride, size)
24542473
}
24552474

24562475
@inline(__always)
24572476
internal func wrap_vDSP_biopsv<T>(_ size: Int, _ scalar: UnsafePointer<T>, _ srcptr: UnsafePointer<T>, _ srcStride: Int, _ dstptr: UnsafeMutablePointer<T>, _ dstStride: Int, _ vDSP_func: vDSP_biopsv_func<T>){
2477+
let srcptr = _adjust_ptr(srcptr, srcStride, size)
2478+
let dstptr = _adjust_mptr(dstptr, dstStride, size)
24582479
vDSP_func(scalar, srcptr, srcStride, dstptr, dstStride, size)
24592480
}
24602481

24612482
@inline(__always)
24622483
internal func wrap_vDSP_stats<T>(_ size: Int, _ srcptr: UnsafePointer<T>, _ stride: Int, _ dstptr: UnsafeMutablePointer<T>, _ vDSP_func: vDSP_stats_func<T>){
2484+
let srcptr = _adjust_ptr(srcptr, stride, size)
24632485
vDSP_func(srcptr, stride, dstptr, size)
24642486
}
24652487

24662488
@inline(__always)
24672489
internal func wrap_vDSP_stats_index<T: MfStorable>(_ size: Int, _ srcptr: UnsafePointer<T>, _ stride: Int, _ dstptr: UnsafeMutablePointer<UInt>, _ vDSP_func: vDSP_stats_index_func<T>){
24682490
var tmp = Array(repeating: T.zero, count: size)
2491+
let srcptr = _adjust_ptr(srcptr, stride, size)
24692492
vDSP_func(srcptr, stride, &tmp, dstptr, size)
24702493
}
24712494

@@ -2489,16 +2512,23 @@ internal func wrap_vDSP_clip<T: MfStorable>(_ size: Int, _ srcptr: UnsafePointer
24892512

24902513
@inline(__always)
24912514
internal func wrap_vDSP_cmprs<T: MfStorable>(_ size: Int, _ srcptr: UnsafePointer<T>, _ srcStride: Int, _ indptr: UnsafePointer<T>, _ indStride: Int, _ dstptr: UnsafeMutablePointer<T>, _ dstStride: Int, _ vDSP_func: vDSP_vcmprs_func<T>){
2515+
let srcptr = _adjust_ptr(srcptr, srcStride, size)
2516+
let indptr = _adjust_ptr(indptr, indStride, size)
2517+
let dstptr = _adjust_mptr(dstptr, dstStride, size)
24922518
vDSP_func(srcptr, srcStride, indptr, indStride, dstptr, dstStride, size)
24932519
}
24942520

24952521
@inline(__always)
24962522
internal func wrap_vDSP_gathr<T: MfStorable>(_ size: Int, _ srcptr: UnsafePointer<T>, _ indptr: UnsafePointer<UInt>, _ indStride: Int, _ dstptr: UnsafeMutablePointer<T>, _ dstStride: Int, _ vDSP_func: vDSP_vgathr_func<T>){
2523+
let indptr = _adjust_ptr(indptr, indStride, size)
2524+
let dstptr = _adjust_mptr(dstptr, dstStride, size)
24972525
vDSP_func(srcptr, indptr, indStride, dstptr, dstStride, size)
24982526
}
24992527

25002528
@inline(__always)
25012529
internal func wrap_vDSP_dotpr<T>(_ size: Int, _ lsrcptr: UnsafePointer<T>, _ lsrcStride: Int, _ rsrcptr: UnsafePointer<T>, _ rsrcStride: Int, _ dstptr: UnsafeMutablePointer<T>, _ vDSP_func: vDSP_dotpr_func<T>){
2530+
let lsrcptr = _adjust_ptr(lsrcptr, lsrcStride, size)
2531+
let rsrcptr = _adjust_ptr(rsrcptr, rsrcStride, size)
25022532
vDSP_func(lsrcptr, lsrcStride, rsrcptr, rsrcStride, dstptr, size)
25032533
}
25042534

0 commit comments

Comments
 (0)