| ... | @@ -165,34 +165,6 @@ pub fn classifySystemV(ty: Type, target: Target, ctx: Context) [8]Class { | ... | @@ -165,34 +165,6 @@ pub fn classifySystemV(ty: Type, target: Target, ctx: Context) [8]Class { |
| 165 | }, | 165 | }, |
| 166 | .Vector => { | 166 | .Vector => { |
| 167 | const elem_ty = ty.childType(); | 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 | const bits = elem_ty.bitSize(target) * ty.arrayLen(); | 168 | const bits = elem_ty.bitSize(target) * ty.arrayLen(); |
| 197 | if (bits <= 64) return .{ | 169 | if (bits <= 64) return .{ |
| 198 | .sse, .none, .none, .none, | 170 | .sse, .none, .none, .none, |
| ... | @@ -202,6 +174,7 @@ pub fn classifySystemV(ty: Type, target: Target, ctx: Context) [8]Class { | ... | @@ -202,6 +174,7 @@ pub fn classifySystemV(ty: Type, target: Target, ctx: Context) [8]Class { |
| 202 | .sse, .sseup, .none, .none, | 174 | .sse, .sseup, .none, .none, |
| 203 | .none, .none, .none, .none, | 175 | .none, .none, .none, .none, |
| 204 | }; | 176 | }; |
| | 177 | if (ctx == .arg and !std.Target.x86.featureSetHas(target.cpu.features, .avx)) return memory_class; |
| 205 | if (bits <= 192) return .{ | 178 | if (bits <= 192) return .{ |
| 206 | .sse, .sseup, .sseup, .none, | 179 | .sse, .sseup, .sseup, .none, |
| 207 | .none, .none, .none, .none, | 180 | .none, .none, .none, .none, |
| ... | @@ -210,6 +183,7 @@ pub fn classifySystemV(ty: Type, target: Target, ctx: Context) [8]Class { | ... | @@ -210,6 +183,7 @@ pub fn classifySystemV(ty: Type, target: Target, ctx: Context) [8]Class { |
| 210 | .sse, .sseup, .sseup, .sseup, | 183 | .sse, .sseup, .sseup, .sseup, |
| 211 | .none, .none, .none, .none, | 184 | .none, .none, .none, .none, |
| 212 | }; | 185 | }; |
| | 186 | if (ctx == .arg and !std.Target.x86.featureSetHas(target.cpu.features, .avx512f)) return memory_class; |
| 213 | if (bits <= 320) return .{ | 187 | if (bits <= 320) return .{ |
| 214 | .sse, .sseup, .sseup, .sseup, | 188 | .sse, .sseup, .sseup, .sseup, |
| 215 | .sseup, .none, .none, .none, | 189 | .sseup, .none, .none, .none, |