Skip to content

Commit 8bb22f8

Browse files
committed
[test] unaligned loads of large, generic SIMD types
1 parent 4f87f0c commit 8bb22f8

File tree

1 file changed

+29
-0
lines changed

1 file changed

+29
-0
lines changed

test/stdlib/UnsafeRawPointer.swift

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,35 @@ UnsafeMutableRawPointerExtraTestSuite.test("load.unaligned")
114114
expectEqual(result, 0xffff_0000)
115115
}
116116

117+
UnsafeMutableRawPointerExtraTestSuite.test("load.unaligned.SIMD")
118+
.skip(.custom({
119+
if #available(SwiftStdlib 5.7, *) { return false }
120+
return true
121+
}, reason: "Requires Swift 5.7's stdlib"))
122+
.code {
123+
guard #available(SwiftStdlib 5.7, *) else { return }
124+
var bytes: [UInt8] = Array(0..<64)
125+
var offset = 3
126+
let vector16 = bytes.withUnsafeBytes { buffer -> SIMD16<UInt8> in
127+
let aligned = buffer.baseAddress!.alignedUp(for: SIMD16<UInt8>.self)
128+
offset += buffer.baseAddress!.distance(to: aligned)
129+
return buffer.loadUnaligned(fromByteOffset: offset, as: SIMD16<UInt8>.self)
130+
}
131+
expectEqual(Int(vector16[0]), offset)
132+
var lastIndex = vector16.indices.last!
133+
expectEqual(Int(vector16[lastIndex]), offset+lastIndex)
134+
135+
offset = 11
136+
let vector32 = bytes.withUnsafeMutableBytes { buffer -> SIMD32<UInt8> in
137+
let aligned = buffer.baseAddress!.alignedUp(for: SIMD16<UInt8>.self)
138+
offset += buffer.baseAddress!.distance(to: aligned)
139+
return buffer.loadUnaligned(fromByteOffset: offset, as: SIMD32<UInt8>.self)
140+
}
141+
expectEqual(Int(vector32[0]), offset)
142+
lastIndex = vector32.indices.last!
143+
expectEqual(Int(vector32[lastIndex]), offset+lastIndex)
144+
}
145+
117146
UnsafeMutableRawPointerExtraTestSuite.test("load.invalid")
118147
.skip(.custom({ !_isDebugAssertConfiguration() },
119148
reason: "This tests a debug precondition.."))

0 commit comments

Comments
 (0)