|
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