|
16 | 16 |
|
17 | 17 | import Swift
|
18 | 18 |
|
19 |
| -%for bits in [16,32,64]: |
20 |
| -% scalar = {16:'Float16',32:'Float',64:'Double'}[bits] |
| 19 | +%for bits in [32,64]: |
| 20 | +% scalar = {32:'Float',64:'Double'}[bits] |
21 | 21 | % for totalBits in [64,128]:
|
22 | 22 | % n = totalBits // bits
|
23 | 23 | % if n != 1:
|
24 | 24 | % neonSuffix = str(n) + {8:'b',16:'h',32:'s',64:'d'}[bits]
|
25 |
| -% if bits == 16: |
26 |
| -#if arch(arm64) |
27 |
| -@available(macOS 11.0, iOS 14.0, tvOS 14.0, watchOS 7.0, *) |
28 |
| -% end |
29 | 25 | func compare_eq${n}x${bits}(
|
30 | 26 | _ a: SIMD${n}<${scalar}>, _ b: SIMD${n}<${scalar}>
|
31 | 27 | ) -> SIMDMask<SIMD${n}<Int${bits}>> {
|
32 | 28 | a .== b
|
33 | 29 | }
|
34 |
| -% if bits == 16: |
35 |
| -#endif |
36 |
| -// CHECK-arm64: compare_eq${n}x${bits}{{[[:alnum:]_]+}}: |
37 |
| -% else: |
38 | 30 | // CHECK: compare_eq${n}x${bits}{{[[:alnum:]_]+}}:
|
39 | 31 | // CHECK-x86_64: cmpeqp${'s' if bits == 32 else 'd'}
|
40 | 32 | // CHECK-x86_64: ret
|
41 |
| -% end |
42 | 33 | // CHECKO-arm64-NEXT: fcmeq.${neonSuffix} v0, v0, v1
|
43 | 34 | // CHECKO-arm64-NEXT: ret
|
44 | 35 | // CHECKOnone-arm64: fcmeq.${neonSuffix}
|
45 | 36 | // CHECKOnone-arm64: ret
|
46 | 37 |
|
47 |
| -% if bits == 16: |
48 |
| -#if arch(arm64) |
49 |
| -@available(macOS 11.0, iOS 14.0, tvOS 14.0, watchOS 7.0, *) |
50 |
| -% end |
51 | 38 | func compare_ne${n}x${bits}(
|
52 | 39 | _ a: SIMD${n}<${scalar}>, _ b: SIMD${n}<${scalar}>
|
53 | 40 | ) -> SIMDMask<SIMD${n}<Int${bits}>> {
|
54 | 41 | a .!= b
|
55 | 42 | }
|
56 |
| -% if bits == 16: |
57 |
| -#endif |
58 |
| -// CHECK-arm64: compare_ne${n}x${bits}{{[[:alnum:]_]+}}: |
59 |
| -% else: |
60 | 43 | // CHECK: compare_ne${n}x${bits}{{[[:alnum:]_]+}}:
|
61 | 44 | // CHECK-x86_64: cmpneqp${'s' if bits == 32 else 'd'}
|
62 | 45 | // CHECK-x86_64: ret
|
63 |
| -% end |
64 | 46 | // CHECKO-arm64-NEXT: fcmeq.${neonSuffix} [[TMP:v[0-9]+]], v0, v1
|
65 | 47 | // CHECKO-arm64-NEXT: mvn.${totalBits//8}b v0, [[TMP]]
|
66 | 48 | // CHECKO-arm64-NEXT: ret
|
67 | 49 | // CHECKOnone-arm64: fcmeq.${neonSuffix}
|
68 | 50 | // CHECKOnone-arm64: mvn.${totalBits//8}b
|
69 | 51 | // CHECKOnone-arm64: ret
|
70 | 52 |
|
71 |
| -% if bits == 16: |
72 |
| -#if arch(arm64) |
73 |
| -@available(macOS 11.0, iOS 14.0, tvOS 14.0, watchOS 7.0, *) |
74 |
| -% end |
75 | 53 | func compare_lt${n}x${bits}(
|
76 | 54 | _ a: SIMD${n}<${scalar}>, _ b: SIMD${n}<${scalar}>
|
77 | 55 | ) -> SIMDMask<SIMD${n}<Int${bits}>> {
|
78 | 56 | a .< b
|
79 | 57 | }
|
80 |
| -% if bits == 16: |
81 |
| -#endif |
82 |
| -// CHECK-arm64: compare_lt${n}x${bits}{{[[:alnum:]_]+}}: |
83 |
| -% else: |
84 | 58 | // CHECK: compare_lt${n}x${bits}{{[[:alnum:]_]+}}:
|
85 | 59 | // CHECK-x86_64: cmpltp${'s' if bits == 32 else 'd'}
|
86 | 60 | // CHECK-x86_64: ret
|
87 |
| -% end |
88 | 61 | // CHECKO-arm64-NEXT: fcmgt.${neonSuffix} v0, v1, v0
|
89 | 62 | // CHECKO-arm64-NEXT: ret
|
90 | 63 | // CHECKOnone-arm64: fcmgt.${neonSuffix}
|
91 | 64 | // CHECKOnone-arm64: ret
|
92 | 65 |
|
93 |
| -% if bits == 16: |
94 |
| -#if arch(arm64) |
95 |
| -@available(macOS 11.0, iOS 14.0, tvOS 14.0, watchOS 7.0, *) |
96 |
| -% end |
97 | 66 | func compare_le${n}x${bits}(
|
98 | 67 | _ a: SIMD${n}<${scalar}>, _ b: SIMD${n}<${scalar}>
|
99 | 68 | ) -> SIMDMask<SIMD${n}<Int${bits}>> {
|
100 | 69 | a .<= b
|
101 | 70 | }
|
102 |
| -% if bits == 16: |
103 |
| -#endif |
104 |
| -// CHECK-arm64: compare_le${n}x${bits}{{[[:alnum:]_]+}}: |
105 |
| -% else: |
106 | 71 | // CHECK: compare_le${n}x${bits}{{[[:alnum:]_]+}}:
|
107 | 72 | // CHECK-x86_64: cmplep${'s' if bits == 32 else 'd'}
|
108 | 73 | // CHECK-x86_64: ret
|
109 |
| -% end |
110 | 74 | // CHECKO-arm64-NEXT: fcmge.${neonSuffix} v0, v1, v0
|
111 | 75 | // CHECKO-arm64-NEXT: ret
|
112 | 76 | // CHECKOnone-arm64: fcmge.${neonSuffix}
|
113 | 77 | // CHECKOnone-arm64: ret
|
114 | 78 |
|
115 |
| -% if bits == 16: |
116 |
| -#if arch(arm64) |
117 |
| -@available(macOS 11.0, iOS 14.0, tvOS 14.0, watchOS 7.0, *) |
118 |
| -% end |
119 | 79 | func compare_ge${n}x${bits}(
|
120 | 80 | _ a: SIMD${n}<${scalar}>, _ b: SIMD${n}<${scalar}>
|
121 | 81 | ) -> SIMDMask<SIMD${n}<Int${bits}>> {
|
122 | 82 | a .>= b
|
123 | 83 | }
|
124 |
| -% if bits == 16: |
125 |
| -#endif |
126 |
| -// CHECK-arm64: compare_ge${n}x${bits}{{[[:alnum:]_]+}}: |
127 |
| -% else: |
128 | 84 | // CHECK: compare_ge${n}x${bits}{{[[:alnum:]_]+}}:
|
129 | 85 | // CHECK-x86_64: cmplep${'s' if bits == 32 else 'd'}
|
130 | 86 | // CHECK-x86_64: ret
|
131 |
| -% end |
132 | 87 | // CHECKO-arm64-NEXT: fcmge.${neonSuffix} v0, v0, v1
|
133 | 88 | // CHECKO-arm64-NEXT: ret
|
134 | 89 | // CHECKOnone-arm64: fcmge.${neonSuffix}
|
135 | 90 | // CHECKOnone-arm64: ret
|
136 | 91 |
|
137 |
| -% if bits == 16: |
138 |
| -#if arch(arm64) |
139 |
| -@available(macOS 11.0, iOS 14.0, tvOS 14.0, watchOS 7.0, *) |
140 |
| -% end |
141 | 92 | func compare_gt${n}x${bits}(
|
142 | 93 | _ a: SIMD${n}<${scalar}>, _ b: SIMD${n}<${scalar}>
|
143 | 94 | ) -> SIMDMask<SIMD${n}<Int${bits}>> {
|
144 | 95 | a .> b
|
145 | 96 | }
|
146 |
| -% if bits == 16: |
147 |
| -#endif |
148 |
| -// CHECK-arm64: compare_gt${n}x${bits}{{[[:alnum:]_]+}}: |
149 |
| -% else: |
150 | 97 | // CHECK: compare_gt${n}x${bits}{{[[:alnum:]_]+}}:
|
151 | 98 | // CHECK-x86_64: cmpltp${'s' if bits == 32 else 'd'}
|
152 | 99 | // CHECK-x86_64: ret
|
153 |
| -% end |
154 | 100 | // CHECKO-arm64-NEXT: fcmgt.${neonSuffix} v0, v0, v1
|
155 | 101 | // CHECKO-arm64-NEXT: ret
|
156 | 102 | // CHECKOnone-arm64: fcmgt.${neonSuffix}
|
|
0 commit comments