| ... | ... | @@ -2292,7 +2292,7 @@ fn genBodyBlock(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 2292 | 2292 | } |
| 2293 | 2293 | |
| 2294 | 2294 | fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 2295 | | @setEvalBranchQuota(29_500); |
| 2295 | @setEvalBranchQuota(29_600); |
| 2296 | 2296 | const pt = cg.pt; |
| 2297 | 2297 | const zcu = pt.zcu; |
| 2298 | 2298 | const ip = &zcu.intern_pool; |
| ... | ... | @@ -59433,9 +59433,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 59433 | 59433 | .required_features = .{ .mmx, null, null, null }, |
| 59434 | 59434 | .src_constraints = .{ .{ .size = .qword }, .{ .size = .qword }, .any }, |
| 59435 | 59435 | .patterns = &.{ |
| 59436 | | .{ .src = .{ .to_mut_mm, .mem, .none } }, |
| 59437 | | .{ .src = .{ .mem, .to_mut_mm, .none }, .commute = .{ 0, 1 } }, |
| 59438 | | .{ .src = .{ .to_mut_mm, .to_mm, .none } }, |
| 59436 | .{ .src = .{ .to_mut_mmx, .mem, .none } }, |
| 59437 | .{ .src = .{ .mem, .to_mut_mmx, .none }, .commute = .{ 0, 1 } }, |
| 59438 | .{ .src = .{ .to_mut_mmx, .to_mmx, .none } }, |
| 59439 | 59439 | }, |
| 59440 | 59440 | .dst_temps = .{ .{ .ref = .src0 }, .unused }, |
| 59441 | 59441 | .each = .{ .once = &.{ |
| ... | ... | @@ -59445,9 +59445,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 59445 | 59445 | .required_features = .{ .avx, null, null, null }, |
| 59446 | 59446 | .src_constraints = .{ .{ .size = .xword }, .{ .size = .xword }, .any }, |
| 59447 | 59447 | .patterns = &.{ |
| 59448 | | .{ .src = .{ .to_xmm, .mem, .none } }, |
| 59449 | | .{ .src = .{ .mem, .to_xmm, .none }, .commute = .{ 0, 1 } }, |
| 59450 | | .{ .src = .{ .to_xmm, .to_xmm, .none } }, |
| 59448 | .{ .src = .{ .to_sse, .mem, .none } }, |
| 59449 | .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } }, |
| 59450 | .{ .src = .{ .to_sse, .to_sse, .none } }, |
| 59451 | 59451 | }, |
| 59452 | 59452 | .dst_temps = .{ .{ .rc = .sse }, .unused }, |
| 59453 | 59453 | .each = .{ .once = &.{ |
| ... | ... | @@ -59457,9 +59457,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 59457 | 59457 | .required_features = .{ .sse2, null, null, null }, |
| 59458 | 59458 | .src_constraints = .{ .{ .size = .xword }, .{ .size = .xword }, .any }, |
| 59459 | 59459 | .patterns = &.{ |
| 59460 | | .{ .src = .{ .to_mut_xmm, .mem, .none } }, |
| 59461 | | .{ .src = .{ .mem, .to_mut_xmm, .none }, .commute = .{ 0, 1 } }, |
| 59462 | | .{ .src = .{ .to_mut_xmm, .to_xmm, .none } }, |
| 59460 | .{ .src = .{ .to_mut_sse, .mem, .none } }, |
| 59461 | .{ .src = .{ .mem, .to_mut_sse, .none }, .commute = .{ 0, 1 } }, |
| 59462 | .{ .src = .{ .to_mut_sse, .to_sse, .none } }, |
| 59463 | 59463 | }, |
| 59464 | 59464 | .dst_temps = .{ .{ .ref = .src0 }, .unused }, |
| 59465 | 59465 | .each = .{ .once = &.{ |
| ... | ... | @@ -59469,9 +59469,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 59469 | 59469 | .required_features = .{ .sse, null, null, null }, |
| 59470 | 59470 | .src_constraints = .{ .{ .size = .xword }, .{ .size = .xword }, .any }, |
| 59471 | 59471 | .patterns = &.{ |
| 59472 | | .{ .src = .{ .to_mut_xmm, .mem, .none } }, |
| 59473 | | .{ .src = .{ .mem, .to_mut_xmm, .none }, .commute = .{ 0, 1 } }, |
| 59474 | | .{ .src = .{ .to_mut_xmm, .to_xmm, .none } }, |
| 59472 | .{ .src = .{ .to_mut_sse, .mem, .none } }, |
| 59473 | .{ .src = .{ .mem, .to_mut_sse, .none }, .commute = .{ 0, 1 } }, |
| 59474 | .{ .src = .{ .to_mut_sse, .to_sse, .none } }, |
| 59475 | 59475 | }, |
| 59476 | 59476 | .dst_temps = .{ .{ .ref = .src0 }, .unused }, |
| 59477 | 59477 | .each = .{ .once = &.{ |
| ... | ... | @@ -59481,9 +59481,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 59481 | 59481 | .required_features = .{ .avx2, null, null, null }, |
| 59482 | 59482 | .src_constraints = .{ .{ .size = .yword }, .{ .size = .yword }, .any }, |
| 59483 | 59483 | .patterns = &.{ |
| 59484 | | .{ .src = .{ .to_ymm, .mem, .none } }, |
| 59485 | | .{ .src = .{ .mem, .to_ymm, .none }, .commute = .{ 0, 1 } }, |
| 59486 | | .{ .src = .{ .to_ymm, .to_ymm, .none } }, |
| 59484 | .{ .src = .{ .to_sse, .mem, .none } }, |
| 59485 | .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } }, |
| 59486 | .{ .src = .{ .to_sse, .to_sse, .none } }, |
| 59487 | 59487 | }, |
| 59488 | 59488 | .dst_temps = .{ .{ .rc = .sse }, .unused }, |
| 59489 | 59489 | .each = .{ .once = &.{ |
| ... | ... | @@ -59493,9 +59493,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 59493 | 59493 | .required_features = .{ .avx, null, null, null }, |
| 59494 | 59494 | .src_constraints = .{ .{ .size = .yword }, .{ .size = .yword }, .any }, |
| 59495 | 59495 | .patterns = &.{ |
| 59496 | | .{ .src = .{ .to_ymm, .mem, .none } }, |
| 59497 | | .{ .src = .{ .mem, .to_ymm, .none }, .commute = .{ 0, 1 } }, |
| 59498 | | .{ .src = .{ .to_ymm, .to_ymm, .none } }, |
| 59496 | .{ .src = .{ .to_sse, .mem, .none } }, |
| 59497 | .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } }, |
| 59498 | .{ .src = .{ .to_sse, .to_sse, .none } }, |
| 59499 | 59499 | }, |
| 59500 | 59500 | .dst_temps = .{ .{ .rc = .sse }, .unused }, |
| 59501 | 59501 | .each = .{ .once = &.{ |
| ... | ... | @@ -64081,6 +64081,16 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 64081 | 64081 | var ops = try cg.tempsFromOperands(inst, .{ty_op.operand}); |
| 64082 | 64082 | var res: [1]Temp = undefined; |
| 64083 | 64083 | cg.select(&res, &.{ty_op.ty.toType()}, &ops, comptime &.{ .{ |
| 64084 | .src_constraints = .{ .{ .bool_vec = .byte }, .any, .any }, |
| 64085 | .patterns = &.{ |
| 64086 | .{ .src = .{ .mut_mem, .none, .none } }, |
| 64087 | .{ .src = .{ .to_mut_gpr, .none, .none } }, |
| 64088 | }, |
| 64089 | .dst_temps = .{ .{ .ref = .src0 }, .unused }, |
| 64090 | .each = .{ .once = &.{ |
| 64091 | .{ ._, ._, .not, .dst0b, ._, ._, ._ }, |
| 64092 | } }, |
| 64093 | }, .{ |
| 64084 | 64094 | .src_constraints = .{ .{ .signed_or_exact_int = .byte }, .any, .any }, |
| 64085 | 64095 | .patterns = &.{ |
| 64086 | 64096 | .{ .src = .{ .mut_mem, .none, .none } }, |
| ... | ... | @@ -64101,6 +64111,16 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 64101 | 64111 | .each = .{ .once = &.{ |
| 64102 | 64112 | .{ ._, ._, .xor, .dst0b, .sa(.src0, .add_umax), ._, ._ }, |
| 64103 | 64113 | } }, |
| 64114 | }, .{ |
| 64115 | .src_constraints = .{ .{ .bool_vec = .word }, .any, .any }, |
| 64116 | .patterns = &.{ |
| 64117 | .{ .src = .{ .mut_mem, .none, .none } }, |
| 64118 | .{ .src = .{ .to_mut_gpr, .none, .none } }, |
| 64119 | }, |
| 64120 | .dst_temps = .{ .{ .ref = .src0 }, .unused }, |
| 64121 | .each = .{ .once = &.{ |
| 64122 | .{ ._, ._, .not, .dst0w, ._, ._, ._ }, |
| 64123 | } }, |
| 64104 | 64124 | }, .{ |
| 64105 | 64125 | .src_constraints = .{ .{ .signed_or_exact_int = .word }, .any, .any }, |
| 64106 | 64126 | .patterns = &.{ |
| ... | ... | @@ -64122,6 +64142,16 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 64122 | 64142 | .each = .{ .once = &.{ |
| 64123 | 64143 | .{ ._, ._, .xor, .dst0w, .sa(.src0, .add_umax), ._, ._ }, |
| 64124 | 64144 | } }, |
| 64145 | }, .{ |
| 64146 | .src_constraints = .{ .{ .bool_vec = .dword }, .any, .any }, |
| 64147 | .patterns = &.{ |
| 64148 | .{ .src = .{ .mut_mem, .none, .none } }, |
| 64149 | .{ .src = .{ .to_mut_gpr, .none, .none } }, |
| 64150 | }, |
| 64151 | .dst_temps = .{ .{ .ref = .src0 }, .unused }, |
| 64152 | .each = .{ .once = &.{ |
| 64153 | .{ ._, ._, .not, .dst0d, ._, ._, ._ }, |
| 64154 | } }, |
| 64125 | 64155 | }, .{ |
| 64126 | 64156 | .src_constraints = .{ .{ .signed_or_exact_int = .dword }, .any, .any }, |
| 64127 | 64157 | .patterns = &.{ |
| ... | ... | @@ -64143,6 +64173,17 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 64143 | 64173 | .each = .{ .once = &.{ |
| 64144 | 64174 | .{ ._, ._, .xor, .dst0d, .sa(.src0, .add_umax), ._, ._ }, |
| 64145 | 64175 | } }, |
| 64176 | }, .{ |
| 64177 | .required_features = .{ .@"64bit", null, null, null }, |
| 64178 | .src_constraints = .{ .{ .bool_vec = .qword }, .any, .any }, |
| 64179 | .patterns = &.{ |
| 64180 | .{ .src = .{ .mut_mem, .none, .none } }, |
| 64181 | .{ .src = .{ .to_mut_gpr, .none, .none } }, |
| 64182 | }, |
| 64183 | .dst_temps = .{ .{ .ref = .src0 }, .unused }, |
| 64184 | .each = .{ .once = &.{ |
| 64185 | .{ ._, ._, .not, .dst0q, ._, ._, ._ }, |
| 64186 | } }, |
| 64146 | 64187 | }, .{ |
| 64147 | 64188 | .required_features = .{ .@"64bit", null, null, null }, |
| 64148 | 64189 | .src_constraints = .{ .{ .signed_or_exact_int = .qword }, .any, .any }, |
| ... | ... | @@ -64166,12 +64207,24 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 64166 | 64207 | .{ ._, ._, .mov, .dst0q, .ua(.src0, .add_umax), ._, ._ }, |
| 64167 | 64208 | .{ ._, ._, .xor, .dst0q, .src0q, ._, ._ }, |
| 64168 | 64209 | } }, |
| 64210 | }, .{ |
| 64211 | .required_features = .{ .mmx, null, null, null }, |
| 64212 | .src_constraints = .{ .{ .bool_vec = .qword }, .any, .any }, |
| 64213 | .patterns = &.{ |
| 64214 | .{ .src = .{ .mem, .none, .none } }, |
| 64215 | .{ .src = .{ .to_mmx, .none, .none } }, |
| 64216 | }, |
| 64217 | .dst_temps = .{ .{ .rc = .mmx }, .unused }, |
| 64218 | .each = .{ .once = &.{ |
| 64219 | .{ ._, .p_d, .cmpeq, .dst0q, .dst0q, ._, ._ }, |
| 64220 | .{ ._, .p_, .xor, .dst0q, .src0q, ._, ._ }, |
| 64221 | } }, |
| 64169 | 64222 | }, .{ |
| 64170 | 64223 | .required_features = .{ .mmx, null, null, null }, |
| 64171 | 64224 | .src_constraints = .{ .{ .signed_or_exact_int = .qword }, .any, .any }, |
| 64172 | 64225 | .patterns = &.{ |
| 64173 | 64226 | .{ .src = .{ .mem, .none, .none } }, |
| 64174 | | .{ .src = .{ .to_mm, .none, .none } }, |
| 64227 | .{ .src = .{ .to_mmx, .none, .none } }, |
| 64175 | 64228 | }, |
| 64176 | 64229 | .dst_temps = .{ .{ .rc = .mmx }, .unused }, |
| 64177 | 64230 | .each = .{ .once = &.{ |
| ... | ... | @@ -64182,7 +64235,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 64182 | 64235 | .required_features = .{ .mmx, null, null, null }, |
| 64183 | 64236 | .src_constraints = .{ .{ .unsigned_int = .qword }, .any, .any }, |
| 64184 | 64237 | .patterns = &.{ |
| 64185 | | .{ .src = .{ .to_mut_mm, .none, .none } }, |
| 64238 | .{ .src = .{ .to_mut_mmx, .none, .none } }, |
| 64186 | 64239 | }, |
| 64187 | 64240 | .extra_temps = .{ |
| 64188 | 64241 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| ... | ... | @@ -64202,12 +64255,24 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 64202 | 64255 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 64203 | 64256 | .{ ._, .p_, .xor, .dst0q, .lea(.tmp0q), ._, ._ }, |
| 64204 | 64257 | } }, |
| 64258 | }, .{ |
| 64259 | .required_features = .{ .avx, null, null, null }, |
| 64260 | .src_constraints = .{ .{ .bool_vec = .xword }, .any, .any }, |
| 64261 | .patterns = &.{ |
| 64262 | .{ .src = .{ .mem, .none, .none } }, |
| 64263 | .{ .src = .{ .to_sse, .none, .none } }, |
| 64264 | }, |
| 64265 | .dst_temps = .{ .{ .rc = .sse }, .unused }, |
| 64266 | .each = .{ .once = &.{ |
| 64267 | .{ ._, .vp_q, .cmpeq, .dst0x, .dst0x, .dst0x, ._ }, |
| 64268 | .{ ._, .vp_, .xor, .dst0x, .dst0x, .src0x, ._ }, |
| 64269 | } }, |
| 64205 | 64270 | }, .{ |
| 64206 | 64271 | .required_features = .{ .avx, null, null, null }, |
| 64207 | 64272 | .src_constraints = .{ .{ .signed_or_exact_int = .xword }, .any, .any }, |
| 64208 | 64273 | .patterns = &.{ |
| 64209 | 64274 | .{ .src = .{ .mem, .none, .none } }, |
| 64210 | | .{ .src = .{ .to_xmm, .none, .none } }, |
| 64275 | .{ .src = .{ .to_sse, .none, .none } }, |
| 64211 | 64276 | }, |
| 64212 | 64277 | .dst_temps = .{ .{ .rc = .sse }, .unused }, |
| 64213 | 64278 | .each = .{ .once = &.{ |
| ... | ... | @@ -64218,7 +64283,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 64218 | 64283 | .required_features = .{ .avx, null, null, null }, |
| 64219 | 64284 | .src_constraints = .{ .{ .unsigned_int = .xword }, .any, .any }, |
| 64220 | 64285 | .patterns = &.{ |
| 64221 | | .{ .src = .{ .to_xmm, .none, .none } }, |
| 64286 | .{ .src = .{ .to_sse, .none, .none } }, |
| 64222 | 64287 | }, |
| 64223 | 64288 | .extra_temps = .{ |
| 64224 | 64289 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| ... | ... | @@ -64238,12 +64303,24 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 64238 | 64303 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 64239 | 64304 | .{ ._, .vp_, .xor, .dst0x, .src0x, .lea(.tmp0x), ._ }, |
| 64240 | 64305 | } }, |
| 64306 | }, .{ |
| 64307 | .required_features = .{ .sse2, null, null, null }, |
| 64308 | .src_constraints = .{ .{ .bool_vec = .xword }, .any, .any }, |
| 64309 | .patterns = &.{ |
| 64310 | .{ .src = .{ .mem, .none, .none } }, |
| 64311 | .{ .src = .{ .to_sse, .none, .none } }, |
| 64312 | }, |
| 64313 | .dst_temps = .{ .{ .rc = .sse }, .unused }, |
| 64314 | .each = .{ .once = &.{ |
| 64315 | .{ ._, .p_d, .cmpeq, .dst0x, .dst0x, ._, ._ }, |
| 64316 | .{ ._, .p_, .xor, .dst0x, .src0x, ._, ._ }, |
| 64317 | } }, |
| 64241 | 64318 | }, .{ |
| 64242 | 64319 | .required_features = .{ .sse2, null, null, null }, |
| 64243 | 64320 | .src_constraints = .{ .{ .signed_or_exact_int = .xword }, .any, .any }, |
| 64244 | 64321 | .patterns = &.{ |
| 64245 | 64322 | .{ .src = .{ .mem, .none, .none } }, |
| 64246 | | .{ .src = .{ .to_xmm, .none, .none } }, |
| 64323 | .{ .src = .{ .to_sse, .none, .none } }, |
| 64247 | 64324 | }, |
| 64248 | 64325 | .dst_temps = .{ .{ .rc = .sse }, .unused }, |
| 64249 | 64326 | .each = .{ .once = &.{ |
| ... | ... | @@ -64254,7 +64331,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 64254 | 64331 | .required_features = .{ .sse2, null, null, null }, |
| 64255 | 64332 | .src_constraints = .{ .{ .unsigned_int = .xword }, .any, .any }, |
| 64256 | 64333 | .patterns = &.{ |
| 64257 | | .{ .src = .{ .to_mut_xmm, .none, .none } }, |
| 64334 | .{ .src = .{ .to_mut_sse, .none, .none } }, |
| 64258 | 64335 | }, |
| 64259 | 64336 | .extra_temps = .{ |
| 64260 | 64337 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| ... | ... | @@ -64274,11 +64351,35 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 64274 | 64351 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 64275 | 64352 | .{ ._, .p_, .xor, .dst0x, .lea(.tmp0x), ._, ._ }, |
| 64276 | 64353 | } }, |
| 64354 | }, .{ |
| 64355 | .required_features = .{ .sse, null, null, null }, |
| 64356 | .src_constraints = .{ .{ .bool_vec = .xword }, .any, .any }, |
| 64357 | .patterns = &.{ |
| 64358 | .{ .src = .{ .to_mut_sse, .none, .none } }, |
| 64359 | }, |
| 64360 | .extra_temps = .{ |
| 64361 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| 64362 | .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } }, |
| 64363 | .unused, |
| 64364 | .unused, |
| 64365 | .unused, |
| 64366 | .unused, |
| 64367 | .unused, |
| 64368 | .unused, |
| 64369 | .unused, |
| 64370 | .unused, |
| 64371 | .unused, |
| 64372 | }, |
| 64373 | .dst_temps = .{ .{ .ref = .src0 }, .unused }, |
| 64374 | .each = .{ .once = &.{ |
| 64375 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 64376 | .{ ._, ._ps, .xor, .dst0x, .lea(.tmp0x), ._, ._ }, |
| 64377 | } }, |
| 64277 | 64378 | }, .{ |
| 64278 | 64379 | .required_features = .{ .sse, null, null, null }, |
| 64279 | 64380 | .src_constraints = .{ .{ .int = .xword }, .any, .any }, |
| 64280 | 64381 | .patterns = &.{ |
| 64281 | | .{ .src = .{ .to_mut_xmm, .none, .none } }, |
| 64382 | .{ .src = .{ .to_mut_sse, .none, .none } }, |
| 64282 | 64383 | }, |
| 64283 | 64384 | .extra_temps = .{ |
| 64284 | 64385 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| ... | ... | @@ -64298,12 +64399,24 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 64298 | 64399 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 64299 | 64400 | .{ ._, ._ps, .xor, .dst0x, .lea(.tmp0x), ._, ._ }, |
| 64300 | 64401 | } }, |
| 64402 | }, .{ |
| 64403 | .required_features = .{ .avx2, null, null, null }, |
| 64404 | .src_constraints = .{ .{ .bool_vec = .yword }, .any, .any }, |
| 64405 | .patterns = &.{ |
| 64406 | .{ .src = .{ .mem, .none, .none } }, |
| 64407 | .{ .src = .{ .to_sse, .none, .none } }, |
| 64408 | }, |
| 64409 | .dst_temps = .{ .{ .rc = .sse }, .unused }, |
| 64410 | .each = .{ .once = &.{ |
| 64411 | .{ ._, .vp_q, .cmpeq, .dst0y, .dst0y, .dst0y, ._ }, |
| 64412 | .{ ._, .vp_, .xor, .dst0y, .dst0y, .src0y, ._ }, |
| 64413 | } }, |
| 64301 | 64414 | }, .{ |
| 64302 | 64415 | .required_features = .{ .avx2, null, null, null }, |
| 64303 | 64416 | .src_constraints = .{ .{ .signed_or_exact_int = .yword }, .any, .any }, |
| 64304 | 64417 | .patterns = &.{ |
| 64305 | 64418 | .{ .src = .{ .mem, .none, .none } }, |
| 64306 | | .{ .src = .{ .to_ymm, .none, .none } }, |
| 64419 | .{ .src = .{ .to_sse, .none, .none } }, |
| 64307 | 64420 | }, |
| 64308 | 64421 | .dst_temps = .{ .{ .rc = .sse }, .unused }, |
| 64309 | 64422 | .each = .{ .once = &.{ |
| ... | ... | @@ -64314,7 +64427,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 64314 | 64427 | .required_features = .{ .avx2, null, null, null }, |
| 64315 | 64428 | .src_constraints = .{ .{ .unsigned_int = .yword }, .any, .any }, |
| 64316 | 64429 | .patterns = &.{ |
| 64317 | | .{ .src = .{ .to_ymm, .none, .none } }, |
| 64430 | .{ .src = .{ .to_sse, .none, .none } }, |
| 64318 | 64431 | }, |
| 64319 | 64432 | .extra_temps = .{ |
| 64320 | 64433 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| ... | ... | @@ -64334,12 +64447,24 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 64334 | 64447 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 64335 | 64448 | .{ ._, .vp_, .xor, .dst0y, .src0y, .lea(.tmp0y), ._ }, |
| 64336 | 64449 | } }, |
| 64450 | }, .{ |
| 64451 | .required_features = .{ .avx, null, null, null }, |
| 64452 | .src_constraints = .{ .{ .bool_vec = .yword }, .any, .any }, |
| 64453 | .patterns = &.{ |
| 64454 | .{ .src = .{ .mem, .none, .none } }, |
| 64455 | .{ .src = .{ .to_sse, .none, .none } }, |
| 64456 | }, |
| 64457 | .dst_temps = .{ .{ .rc = .sse }, .unused }, |
| 64458 | .each = .{ .once = &.{ |
| 64459 | .{ ._, .v_pd, .cmp, .dst0y, .dst0y, .dst0y, .vp(.true) }, |
| 64460 | .{ ._, .v_pd, .xor, .dst0y, .dst0y, .src0y, ._ }, |
| 64461 | } }, |
| 64337 | 64462 | }, .{ |
| 64338 | 64463 | .required_features = .{ .avx, null, null, null }, |
| 64339 | 64464 | .src_constraints = .{ .{ .signed_or_exact_int = .yword }, .any, .any }, |
| 64340 | 64465 | .patterns = &.{ |
| 64341 | 64466 | .{ .src = .{ .mem, .none, .none } }, |
| 64342 | | .{ .src = .{ .to_ymm, .none, .none } }, |
| 64467 | .{ .src = .{ .to_sse, .none, .none } }, |
| 64343 | 64468 | }, |
| 64344 | 64469 | .dst_temps = .{ .{ .rc = .sse }, .unused }, |
| 64345 | 64470 | .each = .{ .once = &.{ |
| ... | ... | @@ -64350,7 +64475,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 64350 | 64475 | .required_features = .{ .avx, null, null, null }, |
| 64351 | 64476 | .src_constraints = .{ .{ .unsigned_int = .yword }, .any, .any }, |
| 64352 | 64477 | .patterns = &.{ |
| 64353 | | .{ .src = .{ .to_ymm, .none, .none } }, |
| 64478 | .{ .src = .{ .to_sse, .none, .none } }, |
| 64354 | 64479 | }, |
| 64355 | 64480 | .extra_temps = .{ |
| 64356 | 64481 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| ... | ... | @@ -64370,6 +64495,37 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 64370 | 64495 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 64371 | 64496 | .{ ._, .v_pd, .xor, .dst0y, .src0y, .lea(.tmp0y), ._ }, |
| 64372 | 64497 | } }, |
| 64498 | }, .{ |
| 64499 | .required_features = .{ .avx2, null, null, null }, |
| 64500 | .src_constraints = .{ .{ .remainder_bool_vec = .{ .of = .yword, .is = .xword } }, .any, .any }, |
| 64501 | .patterns = &.{ |
| 64502 | .{ .src = .{ .to_mem, .none, .none } }, |
| 64503 | }, |
| 64504 | .extra_temps = .{ |
| 64505 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 64506 | .{ .kind = .{ .rc = .sse } }, |
| 64507 | .{ .kind = .{ .rc = .sse } }, |
| 64508 | .unused, |
| 64509 | .unused, |
| 64510 | .unused, |
| 64511 | .unused, |
| 64512 | .unused, |
| 64513 | .unused, |
| 64514 | .unused, |
| 64515 | .unused, |
| 64516 | }, |
| 64517 | .dst_temps = .{ .mem, .unused }, |
| 64518 | .clobbers = .{ .eflags = true }, |
| 64519 | .each = .{ .once = &.{ |
| 64520 | .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ }, |
| 64521 | .{ ._, .vp_q, .cmpeq, .tmp1y, .tmp1y, .tmp1y, ._ }, |
| 64522 | .{ .@"0:", .vp_, .xor, .tmp2y, .tmp1y, .memiad(.src0y, .tmp0, .add_size, -16), ._ }, |
| 64523 | .{ ._, .v_dqu, .mov, .memiad(.dst0y, .tmp0, .add_size, -16), .tmp2y, ._, ._ }, |
| 64524 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 64525 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 64526 | .{ .@"0:", .vp_, .xor, .tmp2x, .tmp1x, .memad(.src0x, .add_size, -16), ._ }, |
| 64527 | .{ ._, .v_dqa, .mov, .memad(.dst0x, .add_size, -16), .tmp2x, ._, ._ }, |
| 64528 | } }, |
| 64373 | 64529 | }, .{ |
| 64374 | 64530 | .required_features = .{ .avx2, null, null, null }, |
| 64375 | 64531 | .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .yword, .is = .xword } }, .any, .any }, |
| ... | ... | @@ -64401,6 +64557,35 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 64401 | 64557 | .{ .@"0:", .vp_, .xor, .tmp2x, .tmp1x, .memad(.src0x, .add_size, -16), ._ }, |
| 64402 | 64558 | .{ ._, .v_dqa, .mov, .memad(.dst0x, .add_size, -16), .tmp2x, ._, ._ }, |
| 64403 | 64559 | } }, |
| 64560 | }, .{ |
| 64561 | .required_features = .{ .avx2, null, null, null }, |
| 64562 | .src_constraints = .{ .{ .remainder_bool_vec = .{ .of = .yword, .is = .yword } }, .any, .any }, |
| 64563 | .patterns = &.{ |
| 64564 | .{ .src = .{ .to_mem, .none, .none } }, |
| 64565 | }, |
| 64566 | .extra_temps = .{ |
| 64567 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 64568 | .{ .kind = .{ .rc = .sse } }, |
| 64569 | .{ .kind = .{ .rc = .sse } }, |
| 64570 | .unused, |
| 64571 | .unused, |
| 64572 | .unused, |
| 64573 | .unused, |
| 64574 | .unused, |
| 64575 | .unused, |
| 64576 | .unused, |
| 64577 | .unused, |
| 64578 | }, |
| 64579 | .dst_temps = .{ .mem, .unused }, |
| 64580 | .clobbers = .{ .eflags = true }, |
| 64581 | .each = .{ .once = &.{ |
| 64582 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 64583 | .{ ._, .vp_q, .cmpeq, .tmp1y, .tmp1y, .tmp1y, ._ }, |
| 64584 | .{ .@"0:", .vp_, .xor, .tmp2y, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._ }, |
| 64585 | .{ ._, .v_dqu, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp2y, ._, ._ }, |
| 64586 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 64587 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 64588 | } }, |
| 64404 | 64589 | }, .{ |
| 64405 | 64590 | .required_features = .{ .avx2, null, null, null }, |
| 64406 | 64591 | .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .yword, .is = .yword } }, .any, .any }, |
| ... | ... | @@ -64430,6 +64615,37 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 64430 | 64615 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 64431 | 64616 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 64432 | 64617 | } }, |
| 64618 | }, .{ |
| 64619 | .required_features = .{ .avx, null, null, null }, |
| 64620 | .src_constraints = .{ .{ .remainder_bool_vec = .{ .of = .yword, .is = .xword } }, .any, .any }, |
| 64621 | .patterns = &.{ |
| 64622 | .{ .src = .{ .to_mem, .none, .none } }, |
| 64623 | }, |
| 64624 | .extra_temps = .{ |
| 64625 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 64626 | .{ .kind = .{ .rc = .sse } }, |
| 64627 | .{ .kind = .{ .rc = .sse } }, |
| 64628 | .unused, |
| 64629 | .unused, |
| 64630 | .unused, |
| 64631 | .unused, |
| 64632 | .unused, |
| 64633 | .unused, |
| 64634 | .unused, |
| 64635 | .unused, |
| 64636 | }, |
| 64637 | .dst_temps = .{ .mem, .unused }, |
| 64638 | .clobbers = .{ .eflags = true }, |
| 64639 | .each = .{ .once = &.{ |
| 64640 | .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ }, |
| 64641 | .{ ._, .v_pd, .cmp, .tmp1y, .tmp1y, .tmp1y, .vp(.true) }, |
| 64642 | .{ .@"0:", .v_pd, .xor, .tmp2y, .tmp1y, .memiad(.src0y, .tmp0, .add_size, -16), ._ }, |
| 64643 | .{ ._, .v_pd, .movu, .memiad(.dst0y, .tmp0, .add_size, -16), .tmp2y, ._, ._ }, |
| 64644 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 64645 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 64646 | .{ .@"0:", .v_pd, .xor, .tmp2x, .tmp1x, .memad(.src0x, .add_size, -16), ._ }, |
| 64647 | .{ ._, .v_pd, .mova, .memad(.dst0x, .add_size, -16), .tmp2x, ._, ._ }, |
| 64648 | } }, |
| 64433 | 64649 | }, .{ |
| 64434 | 64650 | .required_features = .{ .avx, null, null, null }, |
| 64435 | 64651 | .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .yword, .is = .xword } }, .any, .any }, |
| ... | ... | @@ -64461,6 +64677,35 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 64461 | 64677 | .{ .@"0:", .v_pd, .xor, .tmp2x, .tmp1x, .memad(.src0x, .add_size, -16), ._ }, |
| 64462 | 64678 | .{ ._, .v_pd, .mova, .memad(.dst0x, .add_size, -16), .tmp2x, ._, ._ }, |
| 64463 | 64679 | } }, |
| 64680 | }, .{ |
| 64681 | .required_features = .{ .avx, null, null, null }, |
| 64682 | .src_constraints = .{ .{ .remainder_bool_vec = .{ .of = .yword, .is = .yword } }, .any, .any }, |
| 64683 | .patterns = &.{ |
| 64684 | .{ .src = .{ .to_mem, .none, .none } }, |
| 64685 | }, |
| 64686 | .extra_temps = .{ |
| 64687 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 64688 | .{ .kind = .{ .rc = .sse } }, |
| 64689 | .{ .kind = .{ .rc = .sse } }, |
| 64690 | .unused, |
| 64691 | .unused, |
| 64692 | .unused, |
| 64693 | .unused, |
| 64694 | .unused, |
| 64695 | .unused, |
| 64696 | .unused, |
| 64697 | .unused, |
| 64698 | }, |
| 64699 | .dst_temps = .{ .mem, .unused }, |
| 64700 | .clobbers = .{ .eflags = true }, |
| 64701 | .each = .{ .once = &.{ |
| 64702 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 64703 | .{ ._, .v_pd, .cmp, .tmp1y, .tmp1y, .tmp1y, .vp(.true) }, |
| 64704 | .{ .@"0:", .v_pd, .xor, .tmp2y, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._ }, |
| 64705 | .{ ._, .v_pd, .movu, .memia(.dst0y, .tmp0, .add_size), .tmp2y, ._, ._ }, |
| 64706 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 64707 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 64708 | } }, |
| 64464 | 64709 | }, .{ |
| 64465 | 64710 | .required_features = .{ .avx, null, null, null }, |
| 64466 | 64711 | .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .yword, .is = .yword } }, .any, .any }, |
| ... | ... | @@ -64490,6 +64735,35 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 64490 | 64735 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 64491 | 64736 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 64492 | 64737 | } }, |
| 64738 | }, .{ |
| 64739 | .required_features = .{ .avx, null, null, null }, |
| 64740 | .src_constraints = .{ .{ .remainder_bool_vec = .{ .of = .xword, .is = .xword } }, .any, .any }, |
| 64741 | .patterns = &.{ |
| 64742 | .{ .src = .{ .to_mem, .none, .none } }, |
| 64743 | }, |
| 64744 | .extra_temps = .{ |
| 64745 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 64746 | .{ .kind = .{ .rc = .sse } }, |
| 64747 | .{ .kind = .{ .rc = .sse } }, |
| 64748 | .unused, |
| 64749 | .unused, |
| 64750 | .unused, |
| 64751 | .unused, |
| 64752 | .unused, |
| 64753 | .unused, |
| 64754 | .unused, |
| 64755 | .unused, |
| 64756 | }, |
| 64757 | .dst_temps = .{ .mem, .unused }, |
| 64758 | .clobbers = .{ .eflags = true }, |
| 64759 | .each = .{ .once = &.{ |
| 64760 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 64761 | .{ ._, .vp_q, .cmpeq, .tmp1x, .tmp1x, .tmp1x, ._ }, |
| 64762 | .{ .@"0:", .v_, .xor, .tmp2x, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._ }, |
| 64763 | .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp2x, ._, ._ }, |
| 64764 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 64765 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 64766 | } }, |
| 64493 | 64767 | }, .{ |
| 64494 | 64768 | .required_features = .{ .avx, null, null, null }, |
| 64495 | 64769 | .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .xword, .is = .xword } }, .any, .any }, |
| ... | ... | @@ -64519,6 +64793,36 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 64519 | 64793 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 64520 | 64794 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 64521 | 64795 | } }, |
| 64796 | }, .{ |
| 64797 | .required_features = .{ .sse2, null, null, null }, |
| 64798 | .src_constraints = .{ .{ .remainder_bool_vec = .{ .of = .xword, .is = .xword } }, .any, .any }, |
| 64799 | .patterns = &.{ |
| 64800 | .{ .src = .{ .to_mem, .none, .none } }, |
| 64801 | }, |
| 64802 | .extra_temps = .{ |
| 64803 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 64804 | .{ .kind = .{ .rc = .sse } }, |
| 64805 | .{ .kind = .{ .rc = .sse } }, |
| 64806 | .unused, |
| 64807 | .unused, |
| 64808 | .unused, |
| 64809 | .unused, |
| 64810 | .unused, |
| 64811 | .unused, |
| 64812 | .unused, |
| 64813 | .unused, |
| 64814 | }, |
| 64815 | .dst_temps = .{ .mem, .unused }, |
| 64816 | .clobbers = .{ .eflags = true }, |
| 64817 | .each = .{ .once = &.{ |
| 64818 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 64819 | .{ ._, .p_d, .cmpeq, .tmp1x, .tmp1x, ._, ._ }, |
| 64820 | .{ .@"0:", ._dqa, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, |
| 64821 | .{ ._, .p_, .xor, .tmp2x, .tmp1x, ._, ._ }, |
| 64822 | .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp2x, ._, ._ }, |
| 64823 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 64824 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 64825 | } }, |
| 64522 | 64826 | }, .{ |
| 64523 | 64827 | .required_features = .{ .sse2, null, null, null }, |
| 64524 | 64828 | .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .xword, .is = .xword } }, .any, .any }, |
| ... | ... | @@ -64549,6 +64853,34 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 64549 | 64853 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 64550 | 64854 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 64551 | 64855 | } }, |
| 64856 | }, .{ |
| 64857 | .required_features = .{ .@"64bit", null, null, null }, |
| 64858 | .src_constraints = .{ .{ .remainder_bool_vec = .{ .of = .xword, .is = .xword } }, .any, .any }, |
| 64859 | .patterns = &.{ |
| 64860 | .{ .src = .{ .mut_mem, .none, .none } }, |
| 64861 | }, |
| 64862 | .extra_temps = .{ |
| 64863 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 64864 | .unused, |
| 64865 | .unused, |
| 64866 | .unused, |
| 64867 | .unused, |
| 64868 | .unused, |
| 64869 | .unused, |
| 64870 | .unused, |
| 64871 | .unused, |
| 64872 | .unused, |
| 64873 | .unused, |
| 64874 | }, |
| 64875 | .dst_temps = .{ .{ .ref = .src0 }, .unused }, |
| 64876 | .clobbers = .{ .eflags = true }, |
| 64877 | .each = .{ .once = &.{ |
| 64878 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 64879 | .{ .@"0:", ._, .not, .memia(.dst0q, .tmp0, .add_size), ._, ._, ._ }, |
| 64880 | .{ ._, ._, .not, .memiad(.dst0q, .tmp0, .add_size, 8), ._, ._, ._ }, |
| 64881 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 64882 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 64883 | } }, |
| 64552 | 64884 | }, .{ |
| 64553 | 64885 | .required_features = .{ .@"64bit", null, null, null }, |
| 64554 | 64886 | .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .xword, .is = .xword } }, .any, .any }, |
| ... | ... | @@ -64577,6 +64909,35 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 64577 | 64909 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 64578 | 64910 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 64579 | 64911 | } }, |
| 64912 | }, .{ |
| 64913 | .required_features = .{ .@"64bit", null, null, null }, |
| 64914 | .src_constraints = .{ .{ .remainder_bool_vec = .{ .of = .xword, .is = .xword } }, .any, .any }, |
| 64915 | .patterns = &.{ |
| 64916 | .{ .src = .{ .to_mem, .none, .none } }, |
| 64917 | }, |
| 64918 | .extra_temps = .{ |
| 64919 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 64920 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 64921 | .unused, |
| 64922 | .unused, |
| 64923 | .unused, |
| 64924 | .unused, |
| 64925 | .unused, |
| 64926 | .unused, |
| 64927 | .unused, |
| 64928 | .unused, |
| 64929 | .unused, |
| 64930 | }, |
| 64931 | .dst_temps = .{ .mem, .unused }, |
| 64932 | .clobbers = .{ .eflags = true }, |
| 64933 | .each = .{ .once = &.{ |
| 64934 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 64935 | .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 64936 | .{ ._, ._, .not, .tmp1q, ._, ._, ._ }, |
| 64937 | .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ }, |
| 64938 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| 64939 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 64940 | } }, |
| 64580 | 64941 | }, .{ |
| 64581 | 64942 | .required_features = .{ .@"64bit", null, null, null }, |
| 64582 | 64943 | .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .xword, .is = .xword } }, .any, .any }, |
| ... | ... | @@ -65042,7 +65403,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 65042 | 65403 | .src_constraints = .{ .{ .signed_int_or_full_vec = .qword }, .any, .any }, |
| 65043 | 65404 | .patterns = &.{ |
| 65044 | 65405 | .{ .src = .{ .mem, .none, .none } }, |
| 65045 | | .{ .src = .{ .to_mm, .none, .none } }, |
| 65406 | .{ .src = .{ .to_mmx, .none, .none } }, |
| 65046 | 65407 | }, |
| 65047 | 65408 | .dst_temps = .{ .{ .rc = .mmx }, .unused }, |
| 65048 | 65409 | .each = .{ .once = &.{ |
| ... | ... | @@ -65053,7 +65414,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 65053 | 65414 | .required_features = .{ .mmx, null, null, null }, |
| 65054 | 65415 | .src_constraints = .{ .{ .unsigned_int_vec = .qword }, .any, .any }, |
| 65055 | 65416 | .patterns = &.{ |
| 65056 | | .{ .src = .{ .to_mut_mm, .none, .none } }, |
| 65417 | .{ .src = .{ .to_mut_mmx, .none, .none } }, |
| 65057 | 65418 | }, |
| 65058 | 65419 | .extra_temps = .{ |
| 65059 | 65420 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| ... | ... | @@ -65078,7 +65439,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 65078 | 65439 | .src_constraints = .{ .{ .signed_int_or_full_vec = .xword }, .any, .any }, |
| 65079 | 65440 | .patterns = &.{ |
| 65080 | 65441 | .{ .src = .{ .mem, .none, .none } }, |
| 65081 | | .{ .src = .{ .to_xmm, .none, .none } }, |
| 65442 | .{ .src = .{ .to_sse, .none, .none } }, |
| 65082 | 65443 | }, |
| 65083 | 65444 | .dst_temps = .{ .{ .rc = .sse }, .unused }, |
| 65084 | 65445 | .each = .{ .once = &.{ |
| ... | ... | @@ -65089,7 +65450,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 65089 | 65450 | .required_features = .{ .avx, null, null, null }, |
| 65090 | 65451 | .src_constraints = .{ .{ .unsigned_int_vec = .xword }, .any, .any }, |
| 65091 | 65452 | .patterns = &.{ |
| 65092 | | .{ .src = .{ .to_xmm, .none, .none } }, |
| 65453 | .{ .src = .{ .to_sse, .none, .none } }, |
| 65093 | 65454 | }, |
| 65094 | 65455 | .extra_temps = .{ |
| 65095 | 65456 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| ... | ... | @@ -65114,7 +65475,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 65114 | 65475 | .src_constraints = .{ .{ .signed_int_or_full_vec = .xword }, .any, .any }, |
| 65115 | 65476 | .patterns = &.{ |
| 65116 | 65477 | .{ .src = .{ .mem, .none, .none } }, |
| 65117 | | .{ .src = .{ .to_xmm, .none, .none } }, |
| 65478 | .{ .src = .{ .to_sse, .none, .none } }, |
| 65118 | 65479 | }, |
| 65119 | 65480 | .dst_temps = .{ .{ .rc = .sse }, .unused }, |
| 65120 | 65481 | .each = .{ .once = &.{ |
| ... | ... | @@ -65125,7 +65486,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 65125 | 65486 | .required_features = .{ .sse2, null, null, null }, |
| 65126 | 65487 | .src_constraints = .{ .{ .unsigned_int_vec = .xword }, .any, .any }, |
| 65127 | 65488 | .patterns = &.{ |
| 65128 | | .{ .src = .{ .to_mut_xmm, .none, .none } }, |
| 65489 | .{ .src = .{ .to_mut_sse, .none, .none } }, |
| 65129 | 65490 | }, |
| 65130 | 65491 | .extra_temps = .{ |
| 65131 | 65492 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| ... | ... | @@ -65149,7 +65510,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 65149 | 65510 | .required_features = .{ .sse, null, null, null }, |
| 65150 | 65511 | .src_constraints = .{ .{ .unsigned_int_vec = .xword }, .any, .any }, |
| 65151 | 65512 | .patterns = &.{ |
| 65152 | | .{ .src = .{ .to_mut_xmm, .none, .none } }, |
| 65513 | .{ .src = .{ .to_mut_sse, .none, .none } }, |
| 65153 | 65514 | }, |
| 65154 | 65515 | .extra_temps = .{ |
| 65155 | 65516 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| ... | ... | @@ -65174,7 +65535,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 65174 | 65535 | .src_constraints = .{ .{ .signed_int_or_full_vec = .yword }, .any, .any }, |
| 65175 | 65536 | .patterns = &.{ |
| 65176 | 65537 | .{ .src = .{ .mem, .none, .none } }, |
| 65177 | | .{ .src = .{ .to_ymm, .none, .none } }, |
| 65538 | .{ .src = .{ .to_sse, .none, .none } }, |
| 65178 | 65539 | }, |
| 65179 | 65540 | .dst_temps = .{ .{ .rc = .sse }, .unused }, |
| 65180 | 65541 | .each = .{ .once = &.{ |
| ... | ... | @@ -65185,7 +65546,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 65185 | 65546 | .required_features = .{ .avx2, null, null, null }, |
| 65186 | 65547 | .src_constraints = .{ .{ .unsigned_int_vec = .yword }, .any, .any }, |
| 65187 | 65548 | .patterns = &.{ |
| 65188 | | .{ .src = .{ .to_ymm, .none, .none } }, |
| 65549 | .{ .src = .{ .to_sse, .none, .none } }, |
| 65189 | 65550 | }, |
| 65190 | 65551 | .extra_temps = .{ |
| 65191 | 65552 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| ... | ... | @@ -65210,7 +65571,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 65210 | 65571 | .src_constraints = .{ .{ .signed_int_or_full_vec = .yword }, .any, .any }, |
| 65211 | 65572 | .patterns = &.{ |
| 65212 | 65573 | .{ .src = .{ .mem, .none, .none } }, |
| 65213 | | .{ .src = .{ .to_ymm, .none, .none } }, |
| 65574 | .{ .src = .{ .to_sse, .none, .none } }, |
| 65214 | 65575 | }, |
| 65215 | 65576 | .dst_temps = .{ .{ .rc = .sse }, .unused }, |
| 65216 | 65577 | .each = .{ .once = &.{ |
| ... | ... | @@ -65221,7 +65582,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 65221 | 65582 | .required_features = .{ .avx, null, null, null }, |
| 65222 | 65583 | .src_constraints = .{ .{ .unsigned_int_vec = .yword }, .any, .any }, |
| 65223 | 65584 | .patterns = &.{ |
| 65224 | | .{ .src = .{ .to_ymm, .none, .none } }, |
| 65585 | .{ .src = .{ .to_sse, .none, .none } }, |
| 65225 | 65586 | }, |
| 65226 | 65587 | .extra_temps = .{ |
| 65227 | 65588 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| ... | ... | @@ -65241,6 +65602,118 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 65241 | 65602 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 65242 | 65603 | .{ ._, .v_pd, .xor, .dst0y, .src0y, .lea(.tmp0y), ._ }, |
| 65243 | 65604 | } }, |
| 65605 | }, .{ |
| 65606 | .required_features = .{ .@"64bit", null, null, null }, |
| 65607 | .src_constraints = .{ .{ .remainder_bool_vec = .{ .of = .xword, .is = .qword } }, .any, .any }, |
| 65608 | .patterns = &.{ |
| 65609 | .{ .src = .{ .to_mem, .none, .none } }, |
| 65610 | }, |
| 65611 | .extra_temps = .{ |
| 65612 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 65613 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 65614 | .unused, |
| 65615 | .unused, |
| 65616 | .unused, |
| 65617 | .unused, |
| 65618 | .unused, |
| 65619 | .unused, |
| 65620 | .unused, |
| 65621 | .unused, |
| 65622 | .unused, |
| 65623 | }, |
| 65624 | .dst_temps = .{ .mem, .unused }, |
| 65625 | .each = .{ .once = &.{ |
| 65626 | .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ }, |
| 65627 | .{ .@"0:", ._, .mov, .tmp1q, .memi(.src0q, .tmp0), ._, ._ }, |
| 65628 | .{ ._, ._, .not, .tmp1q, ._, ._, ._ }, |
| 65629 | .{ ._, ._, .mov, .memi(.dst0q, .tmp0), .tmp1q, ._, ._ }, |
| 65630 | .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ }, |
| 65631 | .{ ._, ._ae, .j, .@"0b", ._, ._, ._ }, |
| 65632 | } }, |
| 65633 | }, .{ |
| 65634 | .required_features = .{ .@"64bit", null, null, null }, |
| 65635 | .src_constraints = .{ .{ .remainder_bool_vec = .{ .of = .xword, .is = .xword } }, .any, .any }, |
| 65636 | .patterns = &.{ |
| 65637 | .{ .src = .{ .to_mem, .none, .none } }, |
| 65638 | }, |
| 65639 | .extra_temps = .{ |
| 65640 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 65641 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 65642 | .unused, |
| 65643 | .unused, |
| 65644 | .unused, |
| 65645 | .unused, |
| 65646 | .unused, |
| 65647 | .unused, |
| 65648 | .unused, |
| 65649 | .unused, |
| 65650 | .unused, |
| 65651 | }, |
| 65652 | .dst_temps = .{ .mem, .unused }, |
| 65653 | .each = .{ .once = &.{ |
| 65654 | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ }, |
| 65655 | .{ .@"0:", ._, .mov, .tmp1q, .memi(.src0q, .tmp0), ._, ._ }, |
| 65656 | .{ ._, ._, .not, .tmp1q, ._, ._, ._ }, |
| 65657 | .{ ._, ._, .mov, .memi(.dst0q, .tmp0), .tmp1q, ._, ._ }, |
| 65658 | .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ }, |
| 65659 | .{ ._, ._ae, .j, .@"0b", ._, ._, ._ }, |
| 65660 | } }, |
| 65661 | }, .{ |
| 65662 | .required_features = .{ .@"64bit", null, null, null }, |
| 65663 | .src_constraints = .{ .any_signed_int_or_full_vec, .any, .any }, |
| 65664 | .patterns = &.{ |
| 65665 | .{ .src = .{ .to_mem, .none, .none } }, |
| 65666 | }, |
| 65667 | .extra_temps = .{ |
| 65668 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 65669 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 65670 | .unused, |
| 65671 | .unused, |
| 65672 | .unused, |
| 65673 | .unused, |
| 65674 | .unused, |
| 65675 | .unused, |
| 65676 | .unused, |
| 65677 | .unused, |
| 65678 | .unused, |
| 65679 | }, |
| 65680 | .dst_temps = .{ .mem, .unused }, |
| 65681 | .each = .{ .once = &.{ |
| 65682 | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_unaligned_size_up_8), ._, ._ }, |
| 65683 | .{ .@"0:", ._, .mov, .tmp1q, .memi(.src0q, .tmp0), ._, ._ }, |
| 65684 | .{ ._, ._, .not, .tmp1q, ._, ._, ._ }, |
| 65685 | .{ ._, ._, .mov, .memi(.dst0q, .tmp0), .tmp1q, ._, ._ }, |
| 65686 | .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ }, |
| 65687 | .{ ._, ._ae, .j, .@"0b", ._, ._, ._ }, |
| 65688 | } }, |
| 65689 | }, .{ |
| 65690 | .required_features = .{ .@"64bit", null, null, null }, |
| 65691 | .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .qword, .is = .qword } }, .any, .any }, |
| 65692 | .patterns = &.{ |
| 65693 | .{ .src = .{ .to_mem, .none, .none } }, |
| 65694 | }, |
| 65695 | .extra_temps = .{ |
| 65696 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 65697 | .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, |
| 65698 | .unused, |
| 65699 | .unused, |
| 65700 | .unused, |
| 65701 | .unused, |
| 65702 | .unused, |
| 65703 | .unused, |
| 65704 | .unused, |
| 65705 | .unused, |
| 65706 | .unused, |
| 65707 | }, |
| 65708 | .dst_temps = .{ .mem, .unused }, |
| 65709 | .each = .{ .once = &.{ |
| 65710 | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ }, |
| 65711 | .{ .@"0:", ._, .mov, .tmp1q, .memi(.src0q, .tmp0), ._, ._ }, |
| 65712 | .{ ._, ._, .not, .tmp1q, ._, ._, ._ }, |
| 65713 | .{ ._, ._, .mov, .memi(.dst0q, .tmp0), .tmp1q, ._, ._ }, |
| 65714 | .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ }, |
| 65715 | .{ ._, ._ae, .j, .@"0b", ._, ._, ._ }, |
| 65716 | } }, |
| 65244 | 65717 | }, .{ |
| 65245 | 65718 | .required_features = .{ .@"64bit", null, null, null }, |
| 65246 | 65719 | .patterns = &.{ |
| ... | ... | @@ -65261,14 +65734,94 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 65261 | 65734 | }, |
| 65262 | 65735 | .dst_temps = .{ .mem, .unused }, |
| 65263 | 65736 | .each = .{ .once = &.{ |
| 65264 | | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, |
| 65737 | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_unaligned_size_up_8), ._, ._ }, |
| 65265 | 65738 | .{ ._, ._, .lea, .tmp1p, .mem(.tmp3), ._, ._ }, |
| 65266 | 65739 | .{ .@"0:", ._, .mov, .tmp2q, .memi(.src0q, .tmp0), ._, ._ }, |
| 65267 | 65740 | .{ ._, ._, .xor, .tmp2q, .leai(.tmp1q, .tmp0), ._, ._ }, |
| 65268 | 65741 | .{ ._, ._, .mov, .memi(.dst0q, .tmp0), .tmp2q, ._, ._ }, |
| 65269 | | .{ ._, ._, .lea, .tmp0d, .lead(.tmp0, 8), ._, ._ }, |
| 65270 | | .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_unaligned_size), ._, ._ }, |
| 65271 | | .{ ._, ._b, .j, .@"0b", ._, ._, ._ }, |
| 65742 | .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ }, |
| 65743 | .{ ._, ._ae, .j, .@"0b", ._, ._, ._ }, |
| 65744 | } }, |
| 65745 | }, .{ |
| 65746 | .src_constraints = .{ .{ .remainder_bool_vec = .{ .of = .dword, .is = .dword } }, .any, .any }, |
| 65747 | .patterns = &.{ |
| 65748 | .{ .src = .{ .to_mem, .none, .none } }, |
| 65749 | }, |
| 65750 | .extra_temps = .{ |
| 65751 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 65752 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 65753 | .unused, |
| 65754 | .unused, |
| 65755 | .unused, |
| 65756 | .unused, |
| 65757 | .unused, |
| 65758 | .unused, |
| 65759 | .unused, |
| 65760 | .unused, |
| 65761 | .unused, |
| 65762 | }, |
| 65763 | .dst_temps = .{ .mem, .unused }, |
| 65764 | .each = .{ .once = &.{ |
| 65765 | .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_size), ._, ._ }, |
| 65766 | .{ .@"0:", ._, .mov, .tmp1d, .memi(.src0d, .tmp0), ._, ._ }, |
| 65767 | .{ ._, ._, .not, .tmp1d, ._, ._, ._ }, |
| 65768 | .{ ._, ._, .mov, .memi(.dst0d, .tmp0), .tmp1d, ._, ._ }, |
| 65769 | .{ ._, ._, .sub, .tmp0d, .si(4), ._, ._ }, |
| 65770 | .{ ._, ._ae, .j, .@"0b", ._, ._, ._ }, |
| 65771 | } }, |
| 65772 | }, .{ |
| 65773 | .src_constraints = .{ .any_signed_int_or_full_vec, .any, .any }, |
| 65774 | .patterns = &.{ |
| 65775 | .{ .src = .{ .to_mem, .none, .none } }, |
| 65776 | }, |
| 65777 | .extra_temps = .{ |
| 65778 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 65779 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 65780 | .unused, |
| 65781 | .unused, |
| 65782 | .unused, |
| 65783 | .unused, |
| 65784 | .unused, |
| 65785 | .unused, |
| 65786 | .unused, |
| 65787 | .unused, |
| 65788 | .unused, |
| 65789 | }, |
| 65790 | .dst_temps = .{ .mem, .unused }, |
| 65791 | .each = .{ .once = &.{ |
| 65792 | .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_unaligned_size_up_4), ._, ._ }, |
| 65793 | .{ .@"0:", ._, .mov, .tmp1d, .memi(.src0d, .tmp0), ._, ._ }, |
| 65794 | .{ ._, ._, .not, .tmp1d, ._, ._, ._ }, |
| 65795 | .{ ._, ._, .mov, .memi(.dst0d, .tmp0), .tmp1d, ._, ._ }, |
| 65796 | .{ ._, ._, .sub, .tmp0d, .si(4), ._, ._ }, |
| 65797 | .{ ._, ._ae, .j, .@"0b", ._, ._, ._ }, |
| 65798 | } }, |
| 65799 | }, .{ |
| 65800 | .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .dword, .is = .dword } }, .any, .any }, |
| 65801 | .patterns = &.{ |
| 65802 | .{ .src = .{ .to_mem, .none, .none } }, |
| 65803 | }, |
| 65804 | .extra_temps = .{ |
| 65805 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 65806 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 65807 | .unused, |
| 65808 | .unused, |
| 65809 | .unused, |
| 65810 | .unused, |
| 65811 | .unused, |
| 65812 | .unused, |
| 65813 | .unused, |
| 65814 | .unused, |
| 65815 | .unused, |
| 65816 | }, |
| 65817 | .dst_temps = .{ .mem, .unused }, |
| 65818 | .each = .{ .once = &.{ |
| 65819 | .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_size), ._, ._ }, |
| 65820 | .{ .@"0:", ._, .mov, .tmp1d, .memi(.src0d, .tmp0), ._, ._ }, |
| 65821 | .{ ._, ._, .not, .tmp1d, ._, ._, ._ }, |
| 65822 | .{ ._, ._, .mov, .memi(.dst0d, .tmp0), .tmp1d, ._, ._ }, |
| 65823 | .{ ._, ._, .sub, .tmp0d, .si(4), ._, ._ }, |
| 65824 | .{ ._, ._ae, .j, .@"0b", ._, ._, ._ }, |
| 65272 | 65825 | } }, |
| 65273 | 65826 | }, .{ |
| 65274 | 65827 | .patterns = &.{ |
| ... | ... | @@ -65289,14 +65842,13 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 65289 | 65842 | }, |
| 65290 | 65843 | .dst_temps = .{ .mem, .unused }, |
| 65291 | 65844 | .each = .{ .once = &.{ |
| 65292 | | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, |
| 65845 | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_unaligned_size_up_8), ._, ._ }, |
| 65293 | 65846 | .{ ._, ._, .lea, .tmp1p, .mem(.tmp3), ._, ._ }, |
| 65294 | 65847 | .{ .@"0:", ._, .mov, .tmp2d, .memi(.src0d, .tmp0), ._, ._ }, |
| 65295 | 65848 | .{ ._, ._, .xor, .tmp2d, .leai(.tmp1d, .tmp0), ._, ._ }, |
| 65296 | 65849 | .{ ._, ._, .mov, .memi(.dst0d, .tmp0), .tmp2d, ._, ._ }, |
| 65297 | | .{ ._, ._, .lea, .tmp0d, .lead(.tmp0, 4), ._, ._ }, |
| 65298 | | .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_unaligned_size), ._, ._ }, |
| 65299 | | .{ ._, ._b, .j, .@"0b", ._, ._, ._ }, |
| 65850 | .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ }, |
| 65851 | .{ ._, ._ae, .j, .@"0b", ._, ._, ._ }, |
| 65300 | 65852 | } }, |
| 65301 | 65853 | } }) catch |err| switch (err) { |
| 65302 | 65854 | error.SelectFailed => return cg.fail("failed to select {s} {f} {f}", .{ |
| ... | ... | @@ -75371,7 +75923,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 75371 | 75923 | .src_constraints = .{ .{ .scalar_int = .{ .of = .qword, .is = .byte } }, .any, .any }, |
| 75372 | 75924 | .patterns = &.{ |
| 75373 | 75925 | .{ .src = .{ .mem, .none, .none } }, |
| 75374 | | .{ .src = .{ .to_mm, .none, .none } }, |
| 75926 | .{ .src = .{ .to_mmx, .none, .none } }, |
| 75375 | 75927 | }, |
| 75376 | 75928 | .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .mmx } }, .unused }, |
| 75377 | 75929 | .each = .{ .once = &.{ |
| ... | ... | @@ -75382,7 +75934,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 75382 | 75934 | .src_constraints = .{ .{ .scalar_int = .{ .of = .qword, .is = .word } }, .any, .any }, |
| 75383 | 75935 | .patterns = &.{ |
| 75384 | 75936 | .{ .src = .{ .mem, .none, .none } }, |
| 75385 | | .{ .src = .{ .to_mm, .none, .none } }, |
| 75937 | .{ .src = .{ .to_mmx, .none, .none } }, |
| 75386 | 75938 | }, |
| 75387 | 75939 | .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .mmx } }, .unused }, |
| 75388 | 75940 | .each = .{ .once = &.{ |
| ... | ... | @@ -75393,7 +75945,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 75393 | 75945 | .src_constraints = .{ .{ .scalar_int = .{ .of = .qword, .is = .dword } }, .any, .any }, |
| 75394 | 75946 | .patterns = &.{ |
| 75395 | 75947 | .{ .src = .{ .mem, .none, .none } }, |
| 75396 | | .{ .src = .{ .to_mm, .none, .none } }, |
| 75948 | .{ .src = .{ .to_mmx, .none, .none } }, |
| 75397 | 75949 | }, |
| 75398 | 75950 | .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .mmx } }, .unused }, |
| 75399 | 75951 | .each = .{ .once = &.{ |
| ... | ... | @@ -190208,9 +190760,9 @@ const Temp = struct { |
| 190208 | 190760 | .required_features = .{ .sse, .mmx, null, null }, |
| 190209 | 190761 | .src_constraints = .{ .{ .int = .qword }, .{ .int = .qword }, .any }, |
| 190210 | 190762 | .patterns = &.{ |
| 190211 | | .{ .src = .{ .to_mut_mm, .mem, .none } }, |
| 190212 | | .{ .src = .{ .mem, .to_mut_mm, .none }, .commute = .{ 0, 1 } }, |
| 190213 | | .{ .src = .{ .to_mut_mm, .to_mm, .none } }, |
| 190763 | .{ .src = .{ .to_mut_mmx, .mem, .none } }, |
| 190764 | .{ .src = .{ .mem, .to_mut_mmx, .none }, .commute = .{ 0, 1 } }, |
| 190765 | .{ .src = .{ .to_mut_mmx, .to_mmx, .none } }, |
| 190214 | 190766 | }, |
| 190215 | 190767 | .extra_temps = .{ |
| 190216 | 190768 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| ... | ... | @@ -190238,9 +190790,9 @@ const Temp = struct { |
| 190238 | 190790 | .required_features = .{ .avx, null, null, null }, |
| 190239 | 190791 | .src_constraints = .{ .{ .int = .xword }, .{ .int = .xword }, .any }, |
| 190240 | 190792 | .patterns = &.{ |
| 190241 | | .{ .src = .{ .to_xmm, .mem, .none } }, |
| 190242 | | .{ .src = .{ .mem, .to_xmm, .none }, .commute = .{ 0, 1 } }, |
| 190243 | | .{ .src = .{ .to_xmm, .to_xmm, .none } }, |
| 190793 | .{ .src = .{ .to_sse, .mem, .none } }, |
| 190794 | .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } }, |
| 190795 | .{ .src = .{ .to_sse, .to_sse, .none } }, |
| 190244 | 190796 | }, |
| 190245 | 190797 | .extra_temps = .{ |
| 190246 | 190798 | .{ .kind = .{ .rc = .sse } }, |
| ... | ... | @@ -190265,9 +190817,9 @@ const Temp = struct { |
| 190265 | 190817 | .required_features = .{ .sse4_1, null, null, null }, |
| 190266 | 190818 | .src_constraints = .{ .{ .int = .xword }, .{ .int = .xword }, .any }, |
| 190267 | 190819 | .patterns = &.{ |
| 190268 | | .{ .src = .{ .to_mut_xmm, .mem, .none } }, |
| 190269 | | .{ .src = .{ .mem, .to_mut_xmm, .none }, .commute = .{ 0, 1 } }, |
| 190270 | | .{ .src = .{ .to_mut_xmm, .to_xmm, .none } }, |
| 190820 | .{ .src = .{ .to_mut_sse, .mem, .none } }, |
| 190821 | .{ .src = .{ .mem, .to_mut_sse, .none }, .commute = .{ 0, 1 } }, |
| 190822 | .{ .src = .{ .to_mut_sse, .to_sse, .none } }, |
| 190271 | 190823 | }, |
| 190272 | 190824 | .dst_temps = .{ .{ .cc = .z }, .unused }, |
| 190273 | 190825 | .clobbers = .{ .eflags = true }, |
| ... | ... | @@ -190279,9 +190831,9 @@ const Temp = struct { |
| 190279 | 190831 | .required_features = .{ .sse2, .fast_imm16, null, null }, |
| 190280 | 190832 | .src_constraints = .{ .{ .int = .xword }, .{ .int = .xword }, .any }, |
| 190281 | 190833 | .patterns = &.{ |
| 190282 | | .{ .src = .{ .to_mut_xmm, .mem, .none } }, |
| 190283 | | .{ .src = .{ .mem, .to_mut_xmm, .none }, .commute = .{ 0, 1 } }, |
| 190284 | | .{ .src = .{ .to_mut_xmm, .to_xmm, .none } }, |
| 190834 | .{ .src = .{ .to_mut_sse, .mem, .none } }, |
| 190835 | .{ .src = .{ .mem, .to_mut_sse, .none }, .commute = .{ 0, 1 } }, |
| 190836 | .{ .src = .{ .to_mut_sse, .to_sse, .none } }, |
| 190285 | 190837 | }, |
| 190286 | 190838 | .extra_temps = .{ |
| 190287 | 190839 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| ... | ... | @@ -190309,9 +190861,9 @@ const Temp = struct { |
| 190309 | 190861 | .required_features = .{ .sse2, null, null, null }, |
| 190310 | 190862 | .src_constraints = .{ .{ .int = .xword }, .{ .int = .xword }, .any }, |
| 190311 | 190863 | .patterns = &.{ |
| 190312 | | .{ .src = .{ .to_mut_xmm, .mem, .none } }, |
| 190313 | | .{ .src = .{ .mem, .to_mut_xmm, .none }, .commute = .{ 0, 1 } }, |
| 190314 | | .{ .src = .{ .to_mut_xmm, .to_xmm, .none } }, |
| 190864 | .{ .src = .{ .to_mut_sse, .mem, .none } }, |
| 190865 | .{ .src = .{ .mem, .to_mut_sse, .none }, .commute = .{ 0, 1 } }, |
| 190866 | .{ .src = .{ .to_mut_sse, .to_sse, .none } }, |
| 190315 | 190867 | }, |
| 190316 | 190868 | .extra_temps = .{ |
| 190317 | 190869 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| ... | ... | @@ -190339,9 +190891,9 @@ const Temp = struct { |
| 190339 | 190891 | .required_features = .{ .avx2, null, null, null }, |
| 190340 | 190892 | .src_constraints = .{ .{ .int = .yword }, .{ .int = .yword }, .any }, |
| 190341 | 190893 | .patterns = &.{ |
| 190342 | | .{ .src = .{ .to_ymm, .mem, .none } }, |
| 190343 | | .{ .src = .{ .mem, .to_ymm, .none }, .commute = .{ 0, 1 } }, |
| 190344 | | .{ .src = .{ .to_ymm, .to_ymm, .none } }, |
| 190894 | .{ .src = .{ .to_sse, .mem, .none } }, |
| 190895 | .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } }, |
| 190896 | .{ .src = .{ .to_sse, .to_sse, .none } }, |
| 190345 | 190897 | }, |
| 190346 | 190898 | .extra_temps = .{ |
| 190347 | 190899 | .{ .kind = .{ .rc = .sse } }, |
| ... | ... | @@ -190366,9 +190918,9 @@ const Temp = struct { |
| 190366 | 190918 | .required_features = .{ .avx, null, null, null }, |
| 190367 | 190919 | .src_constraints = .{ .{ .int = .yword }, .{ .int = .yword }, .any }, |
| 190368 | 190920 | .patterns = &.{ |
| 190369 | | .{ .src = .{ .to_ymm, .mem, .none } }, |
| 190370 | | .{ .src = .{ .mem, .to_ymm, .none }, .commute = .{ 0, 1 } }, |
| 190371 | | .{ .src = .{ .to_ymm, .to_ymm, .none } }, |
| 190921 | .{ .src = .{ .to_sse, .mem, .none } }, |
| 190922 | .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } }, |
| 190923 | .{ .src = .{ .to_sse, .to_sse, .none } }, |
| 190372 | 190924 | }, |
| 190373 | 190925 | .extra_temps = .{ |
| 190374 | 190926 | .{ .kind = .{ .rc = .sse } }, |
| ... | ... | @@ -192348,6 +192900,7 @@ const Select = struct { |
| 192348 | 192900 | any_scalar_int, |
| 192349 | 192901 | any_scalar_signed_int, |
| 192350 | 192902 | any_scalar_unsigned_int, |
| 192903 | any_signed_int_or_full_vec, |
| 192351 | 192904 | any_float, |
| 192352 | 192905 | po2_any, |
| 192353 | 192906 | bool, |
| ... | ... | @@ -192444,6 +192997,11 @@ const Select = struct { |
| 192444 | 192997 | .any_scalar_int => cg.intInfo(ty.scalarType(zcu)) != null, |
| 192445 | 192998 | .any_scalar_signed_int => if (cg.intInfo(ty.scalarType(zcu))) |int_info| int_info.signedness == .signed else false, |
| 192446 | 192999 | .any_scalar_unsigned_int => if (cg.intInfo(ty.scalarType(zcu))) |int_info| int_info.signedness == .unsigned else false, |
| 193000 | .any_signed_int_or_full_vec => ty.isVector(zcu) and |
| 193001 | if (cg.intInfo(ty.childType(zcu))) |int_info| switch (int_info.signedness) { |
| 193002 | .signed => true, |
| 193003 | .unsigned => (int_info.bits >= 8 and std.math.isPowerOfTwo(int_info.bits)) or int_info.bits % 128 == 0, |
| 193004 | } else false, |
| 192447 | 193005 | .any_float => ty.isRuntimeFloat(), |
| 192448 | 193006 | .po2_any => std.math.isPowerOfTwo(ty.abiSize(zcu)), |
| 192449 | 193007 | .bool => ty.toIntern() == .bool_type, |
| ... | ... | @@ -192484,7 +193042,7 @@ const Select = struct { |
| 192484 | 193042 | .signed_int_or_full_vec => |size| ty.isVector(zcu) and @divExact(size.bitSize(cg.target), 8) >= ty.abiSize(zcu) and |
| 192485 | 193043 | if (cg.intInfo(ty.childType(zcu))) |int_info| switch (int_info.signedness) { |
| 192486 | 193044 | .signed => true, |
| 192487 | | .unsigned => int_info.bits >= 8 and std.math.isPowerOfTwo(int_info.bits), |
| 193045 | .unsigned => (int_info.bits >= 8 and std.math.isPowerOfTwo(int_info.bits)) or int_info.bits % 128 == 0, |
| 192488 | 193046 | } else false, |
| 192489 | 193047 | .unsigned_int_vec => |size| ty.isVector(zcu) and @divExact(size.bitSize(cg.target), 8) >= ty.abiSize(zcu) and |
| 192490 | 193048 | if (cg.intInfo(ty.childType(zcu))) |int_info| int_info.signedness == .unsigned else false, |
| ... | ... | @@ -192733,22 +193291,10 @@ const Select = struct { |
| 192733 | 193291 | to_mmx, |
| 192734 | 193292 | mut_mmx, |
| 192735 | 193293 | to_mut_mmx, |
| 192736 | | mm, |
| 192737 | | to_mm, |
| 192738 | | mut_mm, |
| 192739 | | to_mut_mm, |
| 192740 | 193294 | sse, |
| 192741 | 193295 | to_sse, |
| 192742 | 193296 | mut_sse, |
| 192743 | 193297 | to_mut_sse, |
| 192744 | | xmm, |
| 192745 | | to_xmm, |
| 192746 | | mut_xmm, |
| 192747 | | to_mut_xmm, |
| 192748 | | ymm, |
| 192749 | | to_ymm, |
| 192750 | | mut_ymm, |
| 192751 | | to_mut_ymm, |
| 192752 | 193298 | reg_mask: RegMaskSpec, |
| 192753 | 193299 | all_reg_mask: RegMaskSpec, |
| 192754 | 193300 | |
| ... | ... | @@ -192838,17 +193384,6 @@ const Select = struct { |
| 192838 | 193384 | else => false, |
| 192839 | 193385 | }, |
| 192840 | 193386 | .to_mmx, .to_mut_mmx => true, |
| 192841 | | .mm => temp.typeOf(cg).abiSize(cg.pt.zcu) == 8 and switch (temp.tracking(cg).short) { |
| 192842 | | .register => |reg| reg.isClass(.mmx), |
| 192843 | | .register_offset => |reg_off| reg_off.reg.isClass(.mmx) and reg_off.off == 0, |
| 192844 | | else => false, |
| 192845 | | }, |
| 192846 | | .mut_mm => temp.isMut(cg) and temp.typeOf(cg).abiSize(cg.pt.zcu) == 8 and switch (temp.tracking(cg).short) { |
| 192847 | | .register => |reg| reg.isClass(.mmx), |
| 192848 | | .register_offset => |reg_off| reg_off.reg.isClass(.mmx) and reg_off.off == 0, |
| 192849 | | else => false, |
| 192850 | | }, |
| 192851 | | .to_mm, .to_mut_mm => temp.typeOf(cg).abiSize(cg.pt.zcu) == 8, |
| 192852 | 193387 | .sse => switch (temp.tracking(cg).short) { |
| 192853 | 193388 | .register => |reg| reg.isClass(.sse), |
| 192854 | 193389 | .register_offset => |reg_off| reg_off.reg.isClass(.sse) and reg_off.off == 0, |
| ... | ... | @@ -192860,28 +193395,6 @@ const Select = struct { |
| 192860 | 193395 | else => false, |
| 192861 | 193396 | }, |
| 192862 | 193397 | .to_sse, .to_mut_sse => true, |
| 192863 | | .xmm => temp.typeOf(cg).abiSize(cg.pt.zcu) == 16 and switch (temp.tracking(cg).short) { |
| 192864 | | .register => |reg| reg.isClass(.sse), |
| 192865 | | .register_offset => |reg_off| reg_off.reg.isClass(.sse) and reg_off.off == 0, |
| 192866 | | else => false, |
| 192867 | | }, |
| 192868 | | .mut_xmm => temp.isMut(cg) and temp.typeOf(cg).abiSize(cg.pt.zcu) == 16 and switch (temp.tracking(cg).short) { |
| 192869 | | .register => |reg| reg.isClass(.sse), |
| 192870 | | .register_offset => |reg_off| reg_off.reg.isClass(.sse) and reg_off.off == 0, |
| 192871 | | else => false, |
| 192872 | | }, |
| 192873 | | .to_xmm, .to_mut_xmm => temp.typeOf(cg).abiSize(cg.pt.zcu) == 16, |
| 192874 | | .ymm => temp.typeOf(cg).abiSize(cg.pt.zcu) == 32 and switch (temp.tracking(cg).short) { |
| 192875 | | .register => |reg| reg.isClass(.sse), |
| 192876 | | .register_offset => |reg_off| reg_off.reg.isClass(.sse) and reg_off.off == 0, |
| 192877 | | else => false, |
| 192878 | | }, |
| 192879 | | .mut_ymm => temp.isMut(cg) and temp.typeOf(cg).abiSize(cg.pt.zcu) == 32 and switch (temp.tracking(cg).short) { |
| 192880 | | .register => |reg| reg.isClass(.sse), |
| 192881 | | .register_offset => |reg_off| reg_off.reg.isClass(.sse) and reg_off.off == 0, |
| 192882 | | else => false, |
| 192883 | | }, |
| 192884 | | .to_ymm, .to_mut_ymm => temp.typeOf(cg).abiSize(cg.pt.zcu) == 32, |
| 192885 | 193398 | .reg_mask => |mask_spec| switch (temp.tracking(cg).short) { |
| 192886 | 193399 | .register_mask => |reg_mask| mask_spec.size.bitSize(cg.target) >= |
| 192887 | 193400 | reg_mask.info.scalar.bitSize(cg.target) * temp.typeOf(cg).vectorLen(cg.pt.zcu) and |
| ... | ... | @@ -192915,10 +193428,10 @@ const Select = struct { |
| 192915 | 193428 | .to_mut_gphi => try temp.toRegClass(true, .gphi, cg), |
| 192916 | 193429 | .x87, .to_x87 => try temp.toRegClass(false, .x87, cg), |
| 192917 | 193430 | .mut_x87, .to_mut_x87 => try temp.toRegClass(true, .x87, cg), |
| 192918 | | .mmx, .to_mmx, .mm, .to_mm => try temp.toRegClass(false, .mmx, cg), |
| 192919 | | .mut_mmx, .to_mut_mmx, .mut_mm, .to_mut_mm => try temp.toRegClass(true, .mmx, cg), |
| 192920 | | .sse, .to_sse, .xmm, .to_xmm, .ymm, .to_ymm => try temp.toRegClass(false, .sse, cg), |
| 192921 | | .mut_sse, .to_mut_sse, .mut_xmm, .to_mut_xmm, .mut_ymm, .to_mut_ymm => try temp.toRegClass(true, .sse, cg), |
| 193431 | .mmx, .to_mmx => try temp.toRegClass(false, .mmx, cg), |
| 193432 | .mut_mmx, .to_mut_mmx => try temp.toRegClass(true, .mmx, cg), |
| 193433 | .sse, .to_sse => try temp.toRegClass(false, .sse, cg), |
| 193434 | .mut_sse, .to_mut_sse => try temp.toRegClass(true, .sse, cg), |
| 192922 | 193435 | }; |
| 192923 | 193436 | } |
| 192924 | 193437 | }; |