| ... | ... | @@ -165,34 +165,6 @@ pub fn classifySystemV(ty: Type, target: Target, ctx: Context) [8]Class { |
| 165 | 165 | }, |
| 166 | 166 | .Vector => { |
| 167 | 167 | const elem_ty = ty.childType(); |
| 168 | | if (ctx == .arg) { |
| 169 | | const bit_size = ty.bitSize(target); |
| 170 | | if (bit_size > 128) { |
| 171 | | const has_avx512 = target.cpu.features.isEnabled(@enumToInt(std.Target.x86.Feature.avx512f)); |
| 172 | | if (has_avx512 and bit_size <= 512) return .{ |
| 173 | | .integer, .integer, .integer, .integer, |
| 174 | | .integer, .integer, .integer, .integer, |
| 175 | | }; |
| 176 | | const has_avx = target.cpu.features.isEnabled(@enumToInt(std.Target.x86.Feature.avx)); |
| 177 | | if (has_avx and bit_size <= 256) return .{ |
| 178 | | .integer, .integer, .integer, .integer, |
| 179 | | .none, .none, .none, .none, |
| 180 | | }; |
| 181 | | return memory_class; |
| 182 | | } |
| 183 | | if (bit_size > 80) return .{ |
| 184 | | .integer, .integer, .none, .none, |
| 185 | | .none, .none, .none, .none, |
| 186 | | }; |
| 187 | | if (bit_size > 64) return .{ |
| 188 | | .x87, .none, .none, .none, |
| 189 | | .none, .none, .none, .none, |
| 190 | | }; |
| 191 | | return .{ |
| 192 | | .integer, .none, .none, .none, |
| 193 | | .none, .none, .none, .none, |
| 194 | | }; |
| 195 | | } |
| 196 | 168 | const bits = elem_ty.bitSize(target) * ty.arrayLen(); |
| 197 | 169 | if (bits <= 64) return .{ |
| 198 | 170 | .sse, .none, .none, .none, |
| ... | ... | @@ -202,6 +174,7 @@ pub fn classifySystemV(ty: Type, target: Target, ctx: Context) [8]Class { |
| 202 | 174 | .sse, .sseup, .none, .none, |
| 203 | 175 | .none, .none, .none, .none, |
| 204 | 176 | }; |
| 177 | if (ctx == .arg and !std.Target.x86.featureSetHas(target.cpu.features, .avx)) return memory_class; |
| 205 | 178 | if (bits <= 192) return .{ |
| 206 | 179 | .sse, .sseup, .sseup, .none, |
| 207 | 180 | .none, .none, .none, .none, |
| ... | ... | @@ -210,6 +183,7 @@ pub fn classifySystemV(ty: Type, target: Target, ctx: Context) [8]Class { |
| 210 | 183 | .sse, .sseup, .sseup, .sseup, |
| 211 | 184 | .none, .none, .none, .none, |
| 212 | 185 | }; |
| 186 | if (ctx == .arg and !std.Target.x86.featureSetHas(target.cpu.features, .avx512f)) return memory_class; |
| 213 | 187 | if (bits <= 320) return .{ |
| 214 | 188 | .sse, .sseup, .sseup, .sseup, |
| 215 | 189 | .sseup, .none, .none, .none, |