authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2025-05-27 23:31:30-04:00
committergravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2025-05-28 15:10:22-04:00
logd29ea656b0a555ddcbf7c142a1d8c8096402f92b
tree3376f5e6c3effd012de72a2566a2657aa246865c
parent114a4eaf5c7f1a65943f3b1d41a55fd84c281efc

x86_64: implement optimized float `@reduce(.Max)`


2 files changed, 1703 insertions(+), 9 deletions(-)

src/arch/x86_64/CodeGen.zig+1694-9
...@@ -2389,7 +2389,7 @@ fn genBodyBlock(self: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -2389,7 +2389,7 @@ fn genBodyBlock(self: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2389}2389}
23902390
2391fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {2391fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2392 @setEvalBranchQuota(26_800);2392 @setEvalBranchQuota(27_100);
2393 const pt = cg.pt;2393 const pt = cg.pt;
2394 const zcu = pt.zcu;2394 const zcu = pt.zcu;
2395 const ip = &zcu.intern_pool;2395 const ip = &zcu.intern_pool;
...@@ -146530,15 +146530,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -146530,15 +146530,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
146530 }146530 }
146531 try res[0].finish(inst, &.{reduce.operand}, &ops, cg);146531 try res[0].finish(inst, &.{reduce.operand}, &ops, cg);
146532 },146532 },
146533 .reduce_optimized => |air_tag| if (use_old) try cg.airReduce(inst) else fallback: {146533 .reduce_optimized => |air_tag| if (use_old) try cg.airReduce(inst) else {
146534 const inf = std.math.inf(f16);146534 const inf = std.math.inf(f16);
146535 const reduce = air_datas[@intFromEnum(inst)].reduce;146535 const reduce = air_datas[@intFromEnum(inst)].reduce;
146536 switch (reduce.operation) {
146537 .And, .Or, .Xor => unreachable,
146538 .Min => {},
146539 .Max => break :fallback try cg.airReduce(inst),
146540 .Add, .Mul => {},
146541 }
146542 var ops = try cg.tempsFromOperands(inst, .{reduce.operand});146536 var ops = try cg.tempsFromOperands(inst, .{reduce.operand});
146543 var res: [1]Temp = undefined;146537 var res: [1]Temp = undefined;
146544 cg.select(&res, &.{cg.typeOfIndex(inst)}, &ops, switch (reduce.operation) {146538 cg.select(&res, &.{cg.typeOfIndex(inst)}, &ops, switch (reduce.operation) {
...@@ -148235,7 +148229,1698 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -148235,7 +148229,1698 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
148235 .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },148229 .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
148236 } },148230 } },
148237 } },148231 } },
148238 .Max => unreachable,148232 .Max => comptime &.{ .{
148233 .required_features = .{ .f16c, null, null, null },
148234 .dst_constraints = .{ .{ .float = .word }, .any },
148235 .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .dword, .is = .word } }, .any, .any },
148236 .patterns = &.{
148237 .{ .src = .{ .mem, .none, .none } },
148238 .{ .src = .{ .to_sse, .none, .none } },
148239 },
148240 .extra_temps = .{
148241 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
148242 .unused,
148243 .unused,
148244 .unused,
148245 .unused,
148246 .unused,
148247 .unused,
148248 .unused,
148249 .unused,
148250 .unused,
148251 .unused,
148252 },
148253 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
148254 .each = .{ .once = &.{
148255 .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
148256 .{ ._, .v_ps, .shuf, .tmp0x, .dst0x, .dst0x, .ui(0b01) },
148257 .{ ._, .v_ss, .max, .dst0x, .dst0x, .tmp0x, ._ },
148258 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
148259 } },
148260 }, .{
148261 .required_features = .{ .f16c, null, null, null },
148262 .dst_constraints = .{ .{ .float = .word }, .any },
148263 .src_constraints = .{ .{ .exclusive_scalar_float = .{ .of = .qword, .is = .word } }, .any, .any },
148264 .patterns = &.{
148265 .{ .src = .{ .mem, .none, .none } },
148266 .{ .src = .{ .to_sse, .none, .none } },
148267 },
148268 .extra_temps = .{
148269 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
148270 .unused,
148271 .unused,
148272 .unused,
148273 .unused,
148274 .unused,
148275 .unused,
148276 .unused,
148277 .unused,
148278 .unused,
148279 .unused,
148280 },
148281 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
148282 .each = .{ .once = &.{
148283 .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
148284 .{ ._, .v_ps, .shuf, .tmp0x, .dst0x, .dst0x, .ui(0b11_10) },
148285 .{ ._, .v_ss, .max, .dst0x, .dst0x, .tmp0x, ._ },
148286 .{ ._, .v_ps, .shuf, .tmp0x, .dst0x, .dst0x, .ui(0b01) },
148287 .{ ._, .v_ss, .max, .dst0x, .dst0x, .tmp0x, ._ },
148288 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
148289 } },
148290 }, .{
148291 .required_features = .{ .f16c, null, null, null },
148292 .dst_constraints = .{ .{ .float = .word }, .any },
148293 .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .qword, .is = .word } }, .any, .any },
148294 .patterns = &.{
148295 .{ .src = .{ .mem, .none, .none } },
148296 .{ .src = .{ .to_sse, .none, .none } },
148297 },
148298 .extra_temps = .{
148299 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
148300 .unused,
148301 .unused,
148302 .unused,
148303 .unused,
148304 .unused,
148305 .unused,
148306 .unused,
148307 .unused,
148308 .unused,
148309 .unused,
148310 },
148311 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
148312 .each = .{ .once = &.{
148313 .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
148314 .{ ._, .v_ps, .shuf, .tmp0x, .dst0x, .dst0x, .ui(0b11_10) },
148315 .{ ._, .v_ps, .max, .dst0x, .dst0x, .tmp0x, ._ },
148316 .{ ._, .v_ps, .shuf, .tmp0x, .dst0x, .dst0x, .ui(0b01) },
148317 .{ ._, .v_ss, .max, .dst0x, .dst0x, .tmp0x, ._ },
148318 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
148319 } },
148320 }, .{
148321 .required_features = .{ .f16c, null, null, null },
148322 .dst_constraints = .{ .{ .float = .word }, .any },
148323 .src_constraints = .{ .{ .exclusive_scalar_float = .{ .of = .xword, .is = .word } }, .any, .any },
148324 .patterns = &.{
148325 .{ .src = .{ .to_sse, .none, .none } },
148326 },
148327 .extra_temps = .{
148328 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
148329 .{ .type = .vector_16_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0 } } },
148330 .{ .type = .vector_8_f16, .kind = .{ .splat_float_mem = .{ .ref = .src0, .outside = -inf } } },
148331 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
148332 .unused,
148333 .unused,
148334 .unused,
148335 .unused,
148336 .unused,
148337 .unused,
148338 .unused,
148339 },
148340 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
148341 .each = .{ .once = &.{
148342 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
148343 .{ ._, .v_ps, .@"and", .dst0x, .src0x, .lea(.tmp0x), ._ },
148344 .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
148345 .{ ._, .v_ps, .@"or", .dst0x, .src0x, .lea(.tmp0x), ._ },
148346 .{ ._, .v_ps, .cvtph2, .dst0y, .dst0x, ._, ._ },
148347 .{ ._, .v_f128, .extract, .tmp3x, .dst0y, .ui(1), ._ },
148348 .{ ._, .v_ps, .max, .dst0x, .dst0x, .tmp3x, ._ },
148349 .{ ._, .v_ps, .shuf, .tmp3x, .dst0x, .dst0x, .ui(0b11_10) },
148350 .{ ._, .v_ps, .max, .dst0x, .dst0x, .tmp3x, ._ },
148351 .{ ._, .v_ps, .shuf, .tmp3x, .dst0x, .dst0x, .ui(0b01) },
148352 .{ ._, .v_ss, .max, .dst0x, .dst0x, .tmp3x, ._ },
148353 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
148354 } },
148355 }, .{
148356 .required_features = .{ .f16c, null, null, null },
148357 .dst_constraints = .{ .{ .float = .word }, .any },
148358 .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .xword, .is = .word } }, .any, .any },
148359 .patterns = &.{
148360 .{ .src = .{ .mem, .none, .none } },
148361 .{ .src = .{ .to_sse, .none, .none } },
148362 },
148363 .extra_temps = .{
148364 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
148365 .unused,
148366 .unused,
148367 .unused,
148368 .unused,
148369 .unused,
148370 .unused,
148371 .unused,
148372 .unused,
148373 .unused,
148374 .unused,
148375 },
148376 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
148377 .each = .{ .once = &.{
148378 .{ ._, .v_ps, .cvtph2, .dst0y, .src0x, ._, ._ },
148379 .{ ._, .v_f128, .extract, .tmp0x, .dst0y, .ui(1), ._ },
148380 .{ ._, .v_ps, .max, .dst0x, .dst0x, .tmp0x, ._ },
148381 .{ ._, .v_ps, .shuf, .tmp0x, .dst0x, .dst0x, .ui(0b11_10) },
148382 .{ ._, .v_ps, .max, .dst0x, .dst0x, .tmp0x, ._ },
148383 .{ ._, .v_ps, .shuf, .tmp0x, .dst0x, .dst0x, .ui(0b01) },
148384 .{ ._, .v_ss, .max, .dst0x, .dst0x, .tmp0x, ._ },
148385 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
148386 } },
148387 }, .{
148388 .required_features = .{ .f16c, null, null, null },
148389 .dst_constraints = .{ .{ .float = .word }, .any },
148390 .src_constraints = .{ .{ .exclusive_scalar_float = .{ .of = .yword, .is = .word } }, .any, .any },
148391 .patterns = &.{
148392 .{ .src = .{ .to_sse, .none, .none } },
148393 },
148394 .extra_temps = .{
148395 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
148396 .{ .type = .vector_32_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0 } } },
148397 .{ .type = .vector_16_f16, .kind = .{ .splat_float_mem = .{ .ref = .src0, .outside = -inf } } },
148398 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
148399 .unused,
148400 .unused,
148401 .unused,
148402 .unused,
148403 .unused,
148404 .unused,
148405 .unused,
148406 },
148407 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
148408 .each = .{ .once = &.{
148409 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
148410 .{ ._, .v_ps, .@"and", .dst0y, .src0y, .lea(.tmp0y), ._ },
148411 .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
148412 .{ ._, .v_ps, .@"or", .dst0y, .dst0y, .lea(.tmp0y), ._ },
148413 .{ ._, .v_f128, .extract, .tmp3x, .dst0y, .ui(1), ._ },
148414 .{ ._, .v_ps, .cvtph2, .dst0y, .dst0x, ._, ._ },
148415 .{ ._, .v_ps, .cvtph2, .tmp3y, .tmp3x, ._, ._ },
148416 .{ ._, .v_ps, .max, .dst0y, .dst0y, .tmp3y, ._ },
148417 .{ ._, .v_f128, .extract, .tmp3x, .dst0y, .ui(1), ._ },
148418 .{ ._, .v_ps, .max, .dst0x, .dst0x, .tmp3x, ._ },
148419 .{ ._, .v_ps, .shuf, .tmp3x, .dst0x, .dst0x, .ui(0b11_10) },
148420 .{ ._, .v_ps, .max, .dst0x, .dst0x, .tmp3x, ._ },
148421 .{ ._, .v_ps, .shuf, .tmp3x, .dst0x, .dst0x, .ui(0b01) },
148422 .{ ._, .v_ss, .max, .dst0x, .dst0x, .tmp3x, ._ },
148423 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
148424 } },
148425 }, .{
148426 .required_features = .{ .f16c, null, null, null },
148427 .dst_constraints = .{ .{ .float = .word }, .any },
148428 .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .yword, .is = .word } }, .any, .any },
148429 .patterns = &.{
148430 .{ .src = .{ .to_sse, .none, .none } },
148431 },
148432 .extra_temps = .{
148433 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
148434 .unused,
148435 .unused,
148436 .unused,
148437 .unused,
148438 .unused,
148439 .unused,
148440 .unused,
148441 .unused,
148442 .unused,
148443 .unused,
148444 },
148445 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
148446 .each = .{ .once = &.{
148447 .{ ._, .v_f128, .extract, .tmp0x, .src0y, .ui(1), ._ },
148448 .{ ._, .v_ps, .cvtph2, .dst0y, .src0x, ._, ._ },
148449 .{ ._, .v_ps, .cvtph2, .tmp0y, .tmp0x, ._, ._ },
148450 .{ ._, .v_ps, .max, .dst0y, .dst0y, .tmp0y, ._ },
148451 .{ ._, .v_f128, .extract, .tmp0x, .dst0y, .ui(1), ._ },
148452 .{ ._, .v_ps, .max, .dst0x, .dst0x, .tmp0x, ._ },
148453 .{ ._, .v_ps, .shuf, .tmp0x, .dst0x, .dst0x, .ui(0b11_10) },
148454 .{ ._, .v_ps, .max, .dst0x, .dst0x, .tmp0x, ._ },
148455 .{ ._, .v_ps, .shuf, .tmp0x, .dst0x, .dst0x, .ui(0b01) },
148456 .{ ._, .v_ss, .max, .dst0x, .dst0x, .tmp0x, ._ },
148457 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
148458 } },
148459 }, .{
148460 .required_features = .{ .avx512f, null, null, null },
148461 .dst_constraints = .{ .{ .float = .word }, .any },
148462 .src_constraints = .{ .{ .exclusive_scalar_float = .{ .of = .zword, .is = .word } }, .any, .any },
148463 .patterns = &.{
148464 .{ .src = .{ .to_mem, .none, .none } },
148465 },
148466 .extra_temps = .{
148467 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
148468 .{ .type = .vector_64_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0 } } },
148469 .{ .type = .vector_32_f16, .kind = .{ .splat_float_mem = .{ .ref = .src0, .outside = -inf } } },
148470 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
148471 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
148472 .unused,
148473 .unused,
148474 .unused,
148475 .unused,
148476 .unused,
148477 .unused,
148478 },
148479 .dst_temps = .{ .{ .rc = .sse }, .unused },
148480 .each = .{ .once = &.{
148481 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
148482 .{ ._, .v_ps, .mova, .dst0y, .lea(.tmp0y), ._, ._ },
148483 .{ ._, .v_ps, .mova, .tmp3y, .lead(.tmp0y, 32), ._, ._ },
148484 .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
148485 .{ ._, .v_ps, .@"and", .tmp3y, .tmp3y, .memd(.src0y, 32), ._ },
148486 .{ ._, .v_ps, .@"and", .dst0y, .dst0y, .mem(.src0y), ._ },
148487 .{ ._, .v_ps, .@"or", .dst0y, .dst0y, .lea(.tmp0y), ._ },
148488 .{ ._, .v_ps, .@"or", .tmp3y, .tmp3y, .lead(.tmp0y, 32), ._ },
148489 .{ ._, .v_f128, .extract, .tmp4x, .tmp3y, .ui(1), ._ },
148490 .{ ._, .v_ps, .cvtph2, .tmp3y, .tmp3x, ._, ._ },
148491 .{ ._, .v_ps, .cvtph2, .tmp4y, .tmp4x, ._, ._ },
148492 .{ ._, .v_ps, .max, .tmp3y, .tmp3y, .tmp4y, ._ },
148493 .{ ._, .v_f128, .extract, .tmp4x, .dst0y, .ui(1), ._ },
148494 .{ ._, .v_ps, .cvtph2, .dst0y, .dst0x, ._, ._ },
148495 .{ ._, .v_ps, .cvtph2, .tmp4y, .tmp4x, ._, ._ },
148496 .{ ._, .v_ps, .max, .dst0y, .dst0y, .tmp4y, ._ },
148497 .{ ._, .v_ps, .max, .dst0y, .dst0y, .tmp3y, ._ },
148498 .{ ._, .v_f128, .extract, .tmp3x, .dst0y, .ui(1), ._ },
148499 .{ ._, .v_ps, .max, .dst0x, .dst0x, .tmp3x, ._ },
148500 .{ ._, .v_ps, .shuf, .tmp3x, .dst0x, .dst0x, .ui(0b11_10) },
148501 .{ ._, .v_ps, .max, .dst0x, .dst0x, .tmp3x, ._ },
148502 .{ ._, .v_ps, .shuf, .tmp3x, .dst0x, .dst0x, .ui(0b01) },
148503 .{ ._, .v_ss, .max, .dst0x, .dst0x, .tmp3x, ._ },
148504 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
148505 } },
148506 }, .{
148507 .required_features = .{ .avx512f, null, null, null },
148508 .dst_constraints = .{ .{ .float = .word }, .any },
148509 .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .zword, .is = .word } }, .any, .any },
148510 .patterns = &.{
148511 .{ .src = .{ .to_mem, .none, .none } },
148512 },
148513 .extra_temps = .{
148514 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
148515 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
148516 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
148517 .unused,
148518 .unused,
148519 .unused,
148520 .unused,
148521 .unused,
148522 .unused,
148523 .unused,
148524 .unused,
148525 },
148526 .dst_temps = .{ .{ .rc = .sse }, .unused },
148527 .each = .{ .once = &.{
148528 .{ ._, .v_ps, .mova, .tmp1y, .memd(.src0y, 32), ._, ._ },
148529 .{ ._, .v_ps, .mova, .dst0y, .mem(.src0y), ._, ._ },
148530 .{ ._, .v_f128, .extract, .tmp2x, .tmp1y, .ui(1), ._ },
148531 .{ ._, .v_ps, .cvtph2, .tmp1y, .tmp1x, ._, ._ },
148532 .{ ._, .v_ps, .cvtph2, .tmp2y, .tmp2x, ._, ._ },
148533 .{ ._, .v_ps, .max, .tmp1y, .tmp1y, .tmp2y, ._ },
148534 .{ ._, .v_f128, .extract, .tmp2x, .dst0y, .ui(1), ._ },
148535 .{ ._, .v_ps, .cvtph2, .dst0y, .dst0x, ._, ._ },
148536 .{ ._, .v_ps, .cvtph2, .tmp2y, .tmp2x, ._, ._ },
148537 .{ ._, .v_ps, .max, .dst0y, .dst0y, .tmp2y, ._ },
148538 .{ ._, .v_ps, .max, .dst0y, .dst0y, .tmp1y, ._ },
148539 .{ ._, .v_f128, .extract, .tmp1x, .dst0y, .ui(1), ._ },
148540 .{ ._, .v_ps, .max, .dst0x, .dst0x, .tmp1x, ._ },
148541 .{ ._, .v_ps, .shuf, .tmp1x, .dst0x, .dst0x, .ui(0b11_10) },
148542 .{ ._, .v_ps, .max, .dst0x, .dst0x, .tmp1x, ._ },
148543 .{ ._, .v_ps, .shuf, .tmp1x, .dst0x, .dst0x, .ui(0b01) },
148544 .{ ._, .v_ss, .max, .dst0x, .dst0x, .tmp1x, ._ },
148545 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
148546 } },
148547 }, .{
148548 .required_features = .{ .f16c, null, null, null },
148549 .dst_constraints = .{ .{ .float = .word }, .any },
148550 .src_constraints = .{ .{ .unaligned_multiple_scalar_float = .{ .of = .xword, .is = .word } }, .any, .any },
148551 .patterns = &.{
148552 .{ .src = .{ .to_mem, .none, .none } },
148553 },
148554 .extra_temps = .{
148555 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
148556 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
148557 .unused,
148558 .unused,
148559 .unused,
148560 .unused,
148561 .unused,
148562 .unused,
148563 .unused,
148564 .unused,
148565 .unused,
148566 },
148567 .dst_temps = .{ .{ .rc = .sse }, .unused },
148568 .clobbers = .{ .eflags = true },
148569 .each = .{ .once = &.{
148570 .{ ._, ._, .mov, .tmp0d, .sia(-32, .src0, .add_unaligned_size), ._, ._ },
148571 .{ ._, .v_ps, .cvtph2, .dst0y, .memad(.src0x, .add_unaligned_size, -16), ._, ._ },
148572 .{ .@"0:", .v_ps, .cvtph2, .tmp1y, .memi(.src0x, .tmp0), ._, ._ },
148573 .{ ._, .v_ps, .max, .dst0y, .dst0y, .tmp1y, ._ },
148574 .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
148575 .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
148576 .{ ._, .v_f128, .extract, .tmp1x, .dst0y, .ui(1), ._ },
148577 .{ ._, .v_ps, .max, .dst0x, .dst0x, .tmp1x, ._ },
148578 .{ ._, .v_ps, .shuf, .tmp1x, .dst0x, .dst0x, .ui(0b11_10) },
148579 .{ ._, .v_ps, .max, .dst0x, .dst0x, .tmp1x, ._ },
148580 .{ ._, .v_ps, .shuf, .tmp1x, .dst0x, .dst0x, .ui(0b01) },
148581 .{ ._, .v_ss, .max, .dst0x, .dst0x, .tmp1x, ._ },
148582 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
148583 } },
148584 }, .{
148585 .required_features = .{ .avx512f, null, null, null },
148586 .dst_constraints = .{ .{ .float = .word }, .any },
148587 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .zword, .is = .word } }, .any, .any },
148588 .patterns = &.{
148589 .{ .src = .{ .to_mem, .none, .none } },
148590 },
148591 .extra_temps = .{
148592 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
148593 .{ .type = .vector_64_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0 } } },
148594 .{ .type = .vector_32_f16, .kind = .{ .splat_float_mem = .{ .ref = .src0, .outside = -inf } } },
148595 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
148596 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
148597 .unused,
148598 .unused,
148599 .unused,
148600 .unused,
148601 .unused,
148602 .unused,
148603 },
148604 .dst_temps = .{ .{ .rc = .sse }, .unused },
148605 .clobbers = .{ .eflags = true },
148606 .each = .{ .once = &.{
148607 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
148608 .{ ._, .v_ps, .mova, .dst0y, .lea(.tmp0y), ._, ._ },
148609 .{ ._, .v_ps, .mova, .tmp3y, .lead(.tmp0y, 32), ._, ._ },
148610 .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
148611 .{ ._, .v_ps, .@"and", .tmp3y, .tmp3y, .memad(.src0y, .add_size, -32), ._ },
148612 .{ ._, .v_ps, .@"and", .dst0y, .dst0y, .memad(.src0y, .add_size, -64), ._ },
148613 .{ ._, .v_ps, .@"or", .dst0y, .dst0y, .lea(.tmp0y), ._ },
148614 .{ ._, .v_ps, .@"or", .tmp3y, .tmp3y, .lead(.tmp0y, 32), ._ },
148615 .{ ._, ._, .mov, .tmp0d, .sia(-80, .src0, .add_size), ._, ._ },
148616 .{ ._, .v_f128, .extract, .tmp4x, .tmp3y, .ui(1), ._ },
148617 .{ ._, .v_ps, .cvtph2, .tmp3y, .tmp3x, ._, ._ },
148618 .{ ._, .v_ps, .cvtph2, .tmp4y, .tmp4x, ._, ._ },
148619 .{ ._, .v_ps, .max, .tmp3y, .tmp3y, .tmp4y, ._ },
148620 .{ ._, .v_f128, .extract, .tmp4x, .dst0y, .ui(1), ._ },
148621 .{ ._, .v_ps, .cvtph2, .dst0y, .dst0x, ._, ._ },
148622 .{ ._, .v_ps, .cvtph2, .tmp4y, .tmp4x, ._, ._ },
148623 .{ ._, .v_ps, .max, .dst0y, .dst0y, .tmp4y, ._ },
148624 .{ ._, .v_ps, .max, .dst0y, .dst0y, .tmp3y, ._ },
148625 .{ .@"0:", .v_ps, .cvtph2, .tmp3y, .memi(.src0x, .tmp0), ._, ._ },
148626 .{ ._, .v_ps, .max, .dst0y, .dst0y, .tmp3y, ._ },
148627 .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
148628 .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
148629 .{ ._, .v_f128, .extract, .tmp3x, .dst0y, .ui(1), ._ },
148630 .{ ._, .v_ps, .max, .dst0x, .dst0x, .tmp3x, ._ },
148631 .{ ._, .v_ps, .shuf, .tmp3x, .dst0x, .dst0x, .ui(0b11_10) },
148632 .{ ._, .v_ps, .max, .dst0x, .dst0x, .tmp3x, ._ },
148633 .{ ._, .v_ps, .shuf, .tmp3x, .dst0x, .dst0x, .ui(0b01) },
148634 .{ ._, .v_ss, .max, .dst0x, .dst0x, .tmp3x, ._ },
148635 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
148636 } },
148637 }, .{
148638 .required_features = .{ .f16c, null, null, null },
148639 .dst_constraints = .{ .{ .float = .word }, .any },
148640 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .word } }, .any, .any },
148641 .patterns = &.{
148642 .{ .src = .{ .to_mem, .none, .none } },
148643 },
148644 .extra_temps = .{
148645 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
148646 .{ .type = .vector_32_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0 } } },
148647 .{ .type = .vector_16_f16, .kind = .{ .splat_float_mem = .{ .ref = .src0, .outside = -inf } } },
148648 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
148649 .unused,
148650 .unused,
148651 .unused,
148652 .unused,
148653 .unused,
148654 .unused,
148655 .unused,
148656 },
148657 .dst_temps = .{ .{ .rc = .sse }, .unused },
148658 .clobbers = .{ .eflags = true },
148659 .each = .{ .once = &.{
148660 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
148661 .{ ._, .v_ps, .mova, .dst0y, .lea(.tmp0y), ._, ._ },
148662 .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
148663 .{ ._, .v_ps, .@"and", .dst0y, .dst0y, .memad(.src0y, .add_size, -32), ._ },
148664 .{ ._, .v_ps, .@"or", .dst0y, .dst0y, .lea(.tmp0y), ._ },
148665 .{ ._, ._, .mov, .tmp0d, .sia(-48, .src0, .add_size), ._, ._ },
148666 .{ ._, .v_f128, .extract, .tmp3x, .dst0y, .ui(1), ._ },
148667 .{ ._, .v_ps, .cvtph2, .dst0y, .dst0x, ._, ._ },
148668 .{ ._, .v_ps, .cvtph2, .tmp3y, .tmp3x, ._, ._ },
148669 .{ ._, .v_ps, .max, .dst0y, .dst0y, .tmp3y, ._ },
148670 .{ .@"0:", .v_ps, .cvtph2, .tmp3y, .memi(.src0x, .tmp0), ._, ._ },
148671 .{ ._, .v_ps, .max, .dst0y, .dst0y, .tmp3y, ._ },
148672 .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
148673 .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
148674 .{ ._, .v_f128, .extract, .tmp3x, .dst0y, .ui(1), ._ },
148675 .{ ._, .v_ps, .max, .dst0x, .dst0x, .tmp3x, ._ },
148676 .{ ._, .v_ps, .shuf, .tmp3x, .dst0x, .dst0x, .ui(0b11_10) },
148677 .{ ._, .v_ps, .max, .dst0x, .dst0x, .tmp3x, ._ },
148678 .{ ._, .v_ps, .shuf, .tmp3x, .dst0x, .dst0x, .ui(0b01) },
148679 .{ ._, .v_ss, .max, .dst0x, .dst0x, .tmp3x, ._ },
148680 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
148681 } },
148682 }, .{
148683 .required_features = .{ .avx, null, null, null },
148684 .dst_constraints = .{ .{ .float = .word }, .any },
148685 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
148686 .patterns = &.{
148687 .{ .src = .{ .to_mem, .none, .none } },
148688 },
148689 .call_frame = .{ .alignment = .@"16" },
148690 .extra_temps = .{
148691 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
148692 .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
148693 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmaxh" } } },
148694 .unused,
148695 .unused,
148696 .unused,
148697 .unused,
148698 .unused,
148699 .unused,
148700 .unused,
148701 .unused,
148702 },
148703 .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
148704 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
148705 .each = .{ .once = &.{
148706 .{ ._, .vp_, .xor, .dst0x, .dst0x, .dst0x, ._ },
148707 .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_unaligned_size), ._, ._ },
148708 .{ ._, .vp_w, .insr, .dst0x, .dst0x, .memad(.src0w, .add_unaligned_size, -2), .ui(0) },
148709 .{ .@"0:", .vp_, .xor, .tmp1x, .tmp1x, .tmp1x, ._ },
148710 .{ ._, .vp_w, .insr, .tmp1x, .tmp1x, .memi(.src0w, .tmp0), .ui(0) },
148711 .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
148712 .{ ._, ._, .sub, .tmp0d, .si(2), ._, ._ },
148713 .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
148714 } },
148715 }, .{
148716 .required_features = .{ .sse2, null, null, null },
148717 .dst_constraints = .{ .{ .float = .word }, .any },
148718 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
148719 .patterns = &.{
148720 .{ .src = .{ .to_mem, .none, .none } },
148721 },
148722 .call_frame = .{ .alignment = .@"16" },
148723 .extra_temps = .{
148724 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
148725 .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
148726 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmaxh" } } },
148727 .unused,
148728 .unused,
148729 .unused,
148730 .unused,
148731 .unused,
148732 .unused,
148733 .unused,
148734 .unused,
148735 },
148736 .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
148737 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
148738 .each = .{ .once = &.{
148739 .{ ._, .p_, .xor, .dst0x, .dst0x, ._, ._ },
148740 .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_unaligned_size), ._, ._ },
148741 .{ ._, .p_w, .insr, .dst0x, .memad(.src0w, .add_unaligned_size, -2), .ui(0), ._ },
148742 .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
148743 .{ ._, .p_w, .insr, .tmp1x, .memi(.src0w, .tmp0), .ui(0), ._ },
148744 .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
148745 .{ ._, ._, .sub, .tmp0d, .si(2), ._, ._ },
148746 .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
148747 } },
148748 }, .{
148749 .required_features = .{ .sse, null, null, null },
148750 .dst_constraints = .{ .{ .float = .word }, .any },
148751 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
148752 .patterns = &.{
148753 .{ .src = .{ .to_mem, .none, .none } },
148754 },
148755 .call_frame = .{ .alignment = .@"16" },
148756 .extra_temps = .{
148757 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
148758 .{ .type = .f16, .kind = .{ .reg = .ax } },
148759 .{ .type = .f32, .kind = .mem },
148760 .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
148761 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmaxh" } } },
148762 .unused,
148763 .unused,
148764 .unused,
148765 .unused,
148766 .unused,
148767 .unused,
148768 },
148769 .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
148770 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
148771 .each = .{ .once = &.{
148772 .{ ._, ._ps, .xor, .dst0x, .dst0x, ._, ._ },
148773 .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_unaligned_size), ._, ._ },
148774 .{ ._, ._, .movzx, .tmp1d, .memad(.src0w, .add_unaligned_size, -2), ._, ._ },
148775 .{ ._, ._, .mov, .mem(.tmp2d), .tmp1d, ._, ._ },
148776 .{ ._, ._ss, .mov, .dst0x, .mem(.tmp2d), ._, ._ },
148777 .{ .@"0:", ._ps, .xor, .tmp3x, .tmp3x, ._, ._ },
148778 .{ ._, ._ss, .mov, .tmp3x, .memi(.src0d, .tmp0), ._, ._ },
148779 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
148780 .{ ._, ._, .sub, .tmp0d, .si(2), ._, ._ },
148781 .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
148782 } },
148783 }, .{
148784 .required_features = .{ .avx, null, null, null },
148785 .dst_constraints = .{ .{ .float = .dword }, .any },
148786 .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .qword, .is = .dword } }, .any, .any },
148787 .patterns = &.{
148788 .{ .src = .{ .to_sse, .none, .none } },
148789 },
148790 .extra_temps = .{
148791 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
148792 .unused,
148793 .unused,
148794 .unused,
148795 .unused,
148796 .unused,
148797 .unused,
148798 .unused,
148799 .unused,
148800 .unused,
148801 .unused,
148802 },
148803 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
148804 .each = .{ .once = &.{
148805 .{ ._, .v_ps, .shuf, .tmp0x, .src0x, .src0x, .ui(0b01) },
148806 .{ ._, .v_ss, .max, .dst0x, .src0x, .tmp0x, ._ },
148807 } },
148808 }, .{
148809 .required_features = .{ .sse, null, null, null },
148810 .dst_constraints = .{ .{ .float = .dword }, .any },
148811 .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .qword, .is = .dword } }, .any, .any },
148812 .patterns = &.{
148813 .{ .src = .{ .to_mut_sse, .none, .none } },
148814 },
148815 .extra_temps = .{
148816 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
148817 .unused,
148818 .unused,
148819 .unused,
148820 .unused,
148821 .unused,
148822 .unused,
148823 .unused,
148824 .unused,
148825 .unused,
148826 .unused,
148827 },
148828 .dst_temps = .{ .{ .ref = .src0 }, .unused },
148829 .each = .{ .once = &.{
148830 .{ ._, ._ps, .mova, .tmp0x, .src0x, ._, ._ },
148831 .{ ._, ._ps, .shuf, .tmp0x, .tmp0x, .ui(0b01), ._ },
148832 .{ ._, ._ss, .max, .dst0x, .tmp0x, ._, ._ },
148833 } },
148834 }, .{
148835 .required_features = .{ .avx, null, null, null },
148836 .dst_constraints = .{ .{ .float = .dword }, .any },
148837 .src_constraints = .{ .{ .exclusive_scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
148838 .patterns = &.{
148839 .{ .src = .{ .to_sse, .none, .none } },
148840 },
148841 .extra_temps = .{
148842 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
148843 .unused,
148844 .unused,
148845 .unused,
148846 .unused,
148847 .unused,
148848 .unused,
148849 .unused,
148850 .unused,
148851 .unused,
148852 .unused,
148853 },
148854 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
148855 .each = .{ .once = &.{
148856 .{ ._, .v_ps, .movhl, .tmp0x, .src0x, .src0x, ._ },
148857 .{ ._, .v_ss, .max, .tmp0x, .src0x, .tmp0x, ._ },
148858 .{ ._, .v_ps, .shuf, .dst0x, .src0x, .src0x, .ui(0b01) },
148859 .{ ._, .v_ss, .max, .dst0x, .tmp0x, .dst0x, ._ },
148860 } },
148861 }, .{
148862 .required_features = .{ .sse, null, null, null },
148863 .dst_constraints = .{ .{ .float = .dword }, .any },
148864 .src_constraints = .{ .{ .exclusive_scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
148865 .patterns = &.{
148866 .{ .src = .{ .to_mut_sse, .none, .none } },
148867 },
148868 .extra_temps = .{
148869 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
148870 .unused,
148871 .unused,
148872 .unused,
148873 .unused,
148874 .unused,
148875 .unused,
148876 .unused,
148877 .unused,
148878 .unused,
148879 .unused,
148880 },
148881 .dst_temps = .{ .{ .ref = .src0 }, .unused },
148882 .each = .{ .once = &.{
148883 .{ ._, ._ps, .xor, .tmp0x, .tmp0x, ._, ._ },
148884 .{ ._, ._ps, .movhl, .tmp0x, .src0x, ._, ._ },
148885 .{ ._, ._ss, .max, .tmp0x, .src0x, ._, ._ },
148886 .{ ._, ._ps, .shuf, .dst0x, .src0x, .ui(0b01), ._ },
148887 .{ ._, ._ss, .max, .dst0x, .tmp0x, ._, ._ },
148888 } },
148889 }, .{
148890 .required_features = .{ .avx, null, null, null },
148891 .dst_constraints = .{ .{ .float = .dword }, .any },
148892 .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
148893 .patterns = &.{
148894 .{ .src = .{ .to_sse, .none, .none } },
148895 },
148896 .extra_temps = .{
148897 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
148898 .unused,
148899 .unused,
148900 .unused,
148901 .unused,
148902 .unused,
148903 .unused,
148904 .unused,
148905 .unused,
148906 .unused,
148907 .unused,
148908 },
148909 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
148910 .each = .{ .once = &.{
148911 .{ ._, .v_ps, .movhl, .tmp0x, .src0x, .src0x, ._ },
148912 .{ ._, .v_ps, .max, .dst0x, .src0x, .tmp0x, ._ },
148913 .{ ._, .v_ps, .shuf, .tmp0x, .src0x, .src0x, .ui(0b01) },
148914 .{ ._, .v_ss, .max, .dst0x, .src0x, .tmp0x, ._ },
148915 } },
148916 }, .{
148917 .required_features = .{ .sse, null, null, null },
148918 .dst_constraints = .{ .{ .float = .dword }, .any },
148919 .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
148920 .patterns = &.{
148921 .{ .src = .{ .to_mut_sse, .none, .none } },
148922 },
148923 .extra_temps = .{
148924 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
148925 .unused,
148926 .unused,
148927 .unused,
148928 .unused,
148929 .unused,
148930 .unused,
148931 .unused,
148932 .unused,
148933 .unused,
148934 .unused,
148935 },
148936 .dst_temps = .{ .{ .ref = .src0 }, .unused },
148937 .each = .{ .once = &.{
148938 .{ ._, ._ps, .xor, .tmp0x, .tmp0x, ._, ._ },
148939 .{ ._, ._ps, .movhl, .tmp0x, .src0x, ._, ._ },
148940 .{ ._, ._ps, .max, .dst0x, .tmp0x, ._, ._ },
148941 .{ ._, ._ps, .mova, .tmp0x, .dst0x, ._, ._ },
148942 .{ ._, ._ps, .shuf, .tmp0x, .tmp0x, .ui(0b01), ._ },
148943 .{ ._, ._ss, .max, .dst0x, .tmp0x, ._, ._ },
148944 } },
148945 }, .{
148946 .required_features = .{ .avx, null, null, null },
148947 .dst_constraints = .{ .{ .float = .dword }, .any },
148948 .src_constraints = .{ .{ .exclusive_scalar_float = .{ .of = .yword, .is = .dword } }, .any, .any },
148949 .patterns = &.{
148950 .{ .src = .{ .to_sse, .none, .none } },
148951 },
148952 .extra_temps = .{
148953 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
148954 .{ .type = .vector_32_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0 } } },
148955 .{ .type = .vector_8_f32, .kind = .{ .splat_float_mem = .{ .ref = .src0, .outside = -inf } } },
148956 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
148957 .unused,
148958 .unused,
148959 .unused,
148960 .unused,
148961 .unused,
148962 .unused,
148963 .unused,
148964 },
148965 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
148966 .each = .{ .once = &.{
148967 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
148968 .{ ._, .v_ps, .@"and", .dst0y, .src0y, .lea(.tmp0y), ._ },
148969 .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
148970 .{ ._, .v_ps, .@"or", .dst0y, .src0y, .lea(.tmp0y), ._ },
148971 .{ ._, .v_f128, .extract, .tmp3x, .dst0y, .ui(1), ._ },
148972 .{ ._, .v_ps, .max, .dst0x, .dst0x, .tmp3x, ._ },
148973 .{ ._, .v_ps, .movhl, .tmp3x, .dst0x, .dst0x, ._ },
148974 .{ ._, .v_ps, .max, .dst0x, .dst0x, .tmp3x, ._ },
148975 .{ ._, .v_ps, .shuf, .tmp3x, .dst0x, .dst0x, .ui(0b01) },
148976 .{ ._, .v_ss, .max, .dst0x, .dst0x, .tmp3x, ._ },
148977 } },
148978 }, .{
148979 .required_features = .{ .avx, null, null, null },
148980 .dst_constraints = .{ .{ .float = .dword }, .any },
148981 .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .yword, .is = .dword } }, .any, .any },
148982 .patterns = &.{
148983 .{ .src = .{ .to_sse, .none, .none } },
148984 },
148985 .extra_temps = .{
148986 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
148987 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
148988 .unused,
148989 .unused,
148990 .unused,
148991 .unused,
148992 .unused,
148993 .unused,
148994 .unused,
148995 .unused,
148996 .unused,
148997 },
148998 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
148999 .each = .{ .once = &.{
149000 .{ ._, .v_f128, .extract, .tmp1x, .src0y, .ui(1), ._ },
149001 .{ ._, .v_ps, .max, .dst0x, .src0x, .tmp1x, ._ },
149002 .{ ._, .v_ps, .movhl, .tmp1x, .dst0x, .dst0x, ._ },
149003 .{ ._, .v_ps, .max, .dst0x, .dst0x, .tmp1x, ._ },
149004 .{ ._, .v_ps, .shuf, .tmp1x, .dst0x, .dst0x, .ui(0b01) },
149005 .{ ._, .v_ss, .max, .dst0x, .dst0x, .tmp1x, ._ },
149006 } },
149007 }, .{
149008 .required_features = .{ .avx512f, null, null, null },
149009 .dst_constraints = .{ .{ .float = .dword }, .any },
149010 .src_constraints = .{ .{ .exclusive_scalar_float = .{ .of = .zword, .is = .dword } }, .any, .any },
149011 .patterns = &.{
149012 .{ .src = .{ .to_mem, .none, .none } },
149013 },
149014 .extra_temps = .{
149015 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
149016 .{ .type = .vector_64_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0 } } },
149017 .{ .type = .vector_16_f32, .kind = .{ .splat_float_mem = .{ .ref = .src0, .outside = -inf } } },
149018 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
149019 .unused,
149020 .unused,
149021 .unused,
149022 .unused,
149023 .unused,
149024 .unused,
149025 .unused,
149026 },
149027 .dst_temps = .{ .{ .rc = .sse }, .unused },
149028 .each = .{ .once = &.{
149029 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
149030 .{ ._, .v_ps, .mova, .dst0y, .lea(.tmp0y), ._, ._ },
149031 .{ ._, .v_ps, .mova, .tmp3y, .lead(.tmp0y, 32), ._, ._ },
149032 .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
149033 .{ ._, .v_ps, .@"and", .dst0y, .dst0y, .mem(.src0y), ._ },
149034 .{ ._, .v_ps, .@"and", .tmp3y, .tmp3y, .memd(.src0y, 32), ._ },
149035 .{ ._, .v_ps, .@"or", .dst0y, .dst0y, .lea(.tmp0y), ._ },
149036 .{ ._, .v_ps, .@"or", .tmp3y, .tmp3y, .lead(.tmp0y, 32), ._ },
149037 .{ ._, .v_ps, .max, .dst0y, .dst0y, .tmp3y, ._ },
149038 .{ ._, .v_i128, .extract, .tmp3x, .dst0y, .ui(1), ._ },
149039 .{ ._, .v_ps, .max, .dst0x, .dst0x, .tmp3x, ._ },
149040 .{ ._, .v_ps, .movhl, .tmp3x, .dst0x, .dst0x, ._ },
149041 .{ ._, .v_ps, .max, .dst0x, .dst0x, .tmp3x, ._ },
149042 .{ ._, .v_ps, .shuf, .tmp3x, .dst0x, .dst0x, .ui(0b01) },
149043 .{ ._, .v_ss, .max, .dst0x, .dst0x, .tmp3x, ._ },
149044 } },
149045 }, .{
149046 .required_features = .{ .avx512f, null, null, null },
149047 .dst_constraints = .{ .{ .float = .dword }, .any },
149048 .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .zword, .is = .dword } }, .any, .any },
149049 .patterns = &.{
149050 .{ .src = .{ .to_mem, .none, .none } },
149051 },
149052 .extra_temps = .{
149053 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
149054 .unused,
149055 .unused,
149056 .unused,
149057 .unused,
149058 .unused,
149059 .unused,
149060 .unused,
149061 .unused,
149062 .unused,
149063 .unused,
149064 },
149065 .dst_temps = .{ .{ .rc = .sse }, .unused },
149066 .each = .{ .once = &.{
149067 .{ ._, .v_ps, .mova, .dst0y, .mem(.src0y), ._, ._ },
149068 .{ ._, .v_ps, .mova, .tmp0y, .memd(.src0y, 32), ._, ._ },
149069 .{ ._, .v_ps, .max, .dst0y, .dst0y, .tmp0y, ._ },
149070 .{ ._, .v_i128, .extract, .tmp0x, .dst0y, .ui(1), ._ },
149071 .{ ._, .v_ps, .max, .dst0x, .dst0x, .tmp0x, ._ },
149072 .{ ._, .v_ps, .movhl, .tmp0x, .dst0x, .dst0x, ._ },
149073 .{ ._, .v_ps, .max, .dst0x, .dst0x, .tmp0x, ._ },
149074 .{ ._, .v_ps, .shuf, .tmp0x, .dst0x, .dst0x, .ui(0b01) },
149075 .{ ._, .v_ss, .max, .dst0x, .dst0x, .tmp0x, ._ },
149076 } },
149077 }, .{
149078 .required_features = .{ .avx, null, null, null },
149079 .dst_constraints = .{ .{ .float = .dword }, .any },
149080 .src_constraints = .{ .{ .unaligned_multiple_scalar_float = .{ .of = .yword, .is = .dword } }, .any, .any },
149081 .patterns = &.{
149082 .{ .src = .{ .to_mem, .none, .none } },
149083 },
149084 .extra_temps = .{
149085 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
149086 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
149087 .unused,
149088 .unused,
149089 .unused,
149090 .unused,
149091 .unused,
149092 .unused,
149093 .unused,
149094 .unused,
149095 .unused,
149096 },
149097 .dst_temps = .{ .{ .rc = .sse }, .unused },
149098 .clobbers = .{ .eflags = true },
149099 .each = .{ .once = &.{
149100 .{ ._, ._, .mov, .tmp0d, .sia(-64, .src0, .add_unaligned_size), ._, ._ },
149101 .{ ._, .v_ps, .mova, .dst0y, .memad(.src0y, .add_unaligned_size, -32), ._, ._ },
149102 .{ .@"0:", .v_ps, .max, .dst0y, .dst0y, .memi(.src0y, .tmp0), ._ },
149103 .{ ._, ._, .sub, .tmp0d, .si(32), ._, ._ },
149104 .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
149105 .{ ._, .v_f128, .extract, .tmp1x, .dst0y, .ui(1), ._ },
149106 .{ ._, .v_ps, .max, .dst0x, .dst0x, .tmp1x, ._ },
149107 .{ ._, .v_ps, .movhl, .tmp1x, .dst0x, .dst0x, ._ },
149108 .{ ._, .v_ps, .max, .dst0x, .dst0x, .tmp1x, ._ },
149109 .{ ._, .v_ps, .shuf, .tmp1x, .dst0x, .dst0x, .ui(0b01) },
149110 .{ ._, .v_ss, .max, .dst0x, .dst0x, .tmp1x, ._ },
149111 } },
149112 }, .{
149113 .required_features = .{ .sse, null, null, null },
149114 .dst_constraints = .{ .{ .float = .dword }, .any },
149115 .src_constraints = .{ .{ .unaligned_multiple_scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
149116 .patterns = &.{
149117 .{ .src = .{ .to_mem, .none, .none } },
149118 },
149119 .extra_temps = .{
149120 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
149121 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
149122 .unused,
149123 .unused,
149124 .unused,
149125 .unused,
149126 .unused,
149127 .unused,
149128 .unused,
149129 .unused,
149130 .unused,
149131 },
149132 .dst_temps = .{ .{ .rc = .sse }, .unused },
149133 .clobbers = .{ .eflags = true },
149134 .each = .{ .once = &.{
149135 .{ ._, ._, .mov, .tmp0d, .sia(-32, .src0, .add_unaligned_size), ._, ._ },
149136 .{ ._, ._ps, .mova, .dst0x, .memad(.src0x, .add_unaligned_size, -16), ._, ._ },
149137 .{ .@"0:", ._ps, .max, .dst0x, .memi(.src0x, .tmp0), ._, ._ },
149138 .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
149139 .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
149140 .{ ._, ._ps, .xor, .tmp1x, .tmp1x, ._, ._ },
149141 .{ ._, ._ps, .movhl, .tmp1x, .dst0x, ._, ._ },
149142 .{ ._, ._ps, .max, .dst0x, .tmp1x, ._, ._ },
149143 .{ ._, ._ps, .mova, .tmp1x, .dst0x, ._, ._ },
149144 .{ ._, ._ps, .shuf, .tmp1x, .tmp1x, .ui(0b01), ._ },
149145 .{ ._, ._ss, .max, .dst0x, .tmp1x, ._, ._ },
149146 } },
149147 }, .{
149148 .required_features = .{ .avx512f, null, null, null },
149149 .dst_constraints = .{ .{ .float = .dword }, .any },
149150 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .zword, .is = .dword } }, .any, .any },
149151 .patterns = &.{
149152 .{ .src = .{ .to_mem, .none, .none } },
149153 },
149154 .extra_temps = .{
149155 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
149156 .{ .type = .vector_64_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0 } } },
149157 .{ .type = .vector_16_f32, .kind = .{ .splat_float_mem = .{ .ref = .src0, .outside = -inf } } },
149158 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
149159 .unused,
149160 .unused,
149161 .unused,
149162 .unused,
149163 .unused,
149164 .unused,
149165 .unused,
149166 },
149167 .dst_temps = .{ .{ .rc = .sse }, .unused },
149168 .clobbers = .{ .eflags = true },
149169 .each = .{ .once = &.{
149170 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
149171 .{ ._, .v_ps, .mova, .dst0y, .lea(.tmp0y), ._, ._ },
149172 .{ ._, .v_ps, .mova, .tmp3y, .lead(.tmp0y, 32), ._, ._ },
149173 .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
149174 .{ ._, .v_ps, .@"and", .tmp3y, .tmp3y, .memad(.src0y, .add_size, -32), ._ },
149175 .{ ._, .v_ps, .@"and", .dst0y, .dst0y, .memad(.src0y, .add_size, -64), ._ },
149176 .{ ._, .v_ps, .@"or", .dst0y, .dst0y, .lea(.tmp0y), ._ },
149177 .{ ._, .v_ps, .@"or", .tmp3y, .tmp3y, .lead(.tmp0y, 32), ._ },
149178 .{ ._, ._, .mov, .tmp0d, .sia(-128, .src0, .add_size), ._, ._ },
149179 .{ .@"0:", .v_ps, .max, .tmp3y, .tmp3y, .memid(.src0y, .tmp0, 32), ._ },
149180 .{ ._, .v_ps, .max, .dst0y, .dst0y, .memi(.src0y, .tmp0), ._ },
149181 .{ ._, ._, .sub, .tmp0d, .si(64), ._, ._ },
149182 .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
149183 .{ ._, .v_ps, .max, .dst0y, .dst0y, .tmp3y, ._ },
149184 .{ ._, .v_f128, .extract, .tmp3x, .dst0y, .ui(1), ._ },
149185 .{ ._, .v_ps, .max, .dst0x, .dst0x, .tmp3x, ._ },
149186 .{ ._, .v_ps, .movhl, .tmp3x, .dst0x, .dst0x, ._ },
149187 .{ ._, .v_ps, .max, .dst0x, .dst0x, .tmp3x, ._ },
149188 .{ ._, .v_ps, .shuf, .tmp3x, .dst0x, .dst0x, .ui(0b01) },
149189 .{ ._, .v_ss, .max, .dst0x, .dst0x, .tmp3x, ._ },
149190 } },
149191 }, .{
149192 .required_features = .{ .avx, null, null, null },
149193 .dst_constraints = .{ .{ .float = .dword }, .any },
149194 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } }, .any, .any },
149195 .patterns = &.{
149196 .{ .src = .{ .to_mem, .none, .none } },
149197 },
149198 .extra_temps = .{
149199 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
149200 .{ .type = .vector_32_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0 } } },
149201 .{ .type = .vector_8_f32, .kind = .{ .splat_float_mem = .{ .ref = .src0, .outside = -inf } } },
149202 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
149203 .unused,
149204 .unused,
149205 .unused,
149206 .unused,
149207 .unused,
149208 .unused,
149209 .unused,
149210 },
149211 .dst_temps = .{ .{ .rc = .sse }, .unused },
149212 .clobbers = .{ .eflags = true },
149213 .each = .{ .once = &.{
149214 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
149215 .{ ._, .v_ps, .mova, .dst0y, .lea(.tmp0y), ._, ._ },
149216 .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
149217 .{ ._, .v_ps, .@"and", .dst0y, .dst0y, .memad(.src0y, .add_size, -32), ._ },
149218 .{ ._, .v_ps, .@"or", .dst0y, .dst0y, .lea(.tmp0y), ._ },
149219 .{ ._, ._, .mov, .tmp0d, .sia(-48, .src0, .add_size), ._, ._ },
149220 .{ ._, .v_f128, .extract, .tmp3x, .dst0y, .ui(1), ._ },
149221 .{ ._, .v_ps, .max, .dst0x, .dst0x, .tmp3x, ._ },
149222 .{ .@"0:", .v_ps, .max, .dst0x, .dst0x, .memi(.src0x, .tmp0), ._ },
149223 .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
149224 .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
149225 .{ ._, .v_ps, .movhl, .tmp3x, .dst0x, .dst0x, ._ },
149226 .{ ._, .v_ps, .max, .dst0x, .dst0x, .tmp3x, ._ },
149227 .{ ._, .v_ps, .shuf, .tmp3x, .dst0x, .dst0x, .ui(0b01) },
149228 .{ ._, .v_ss, .max, .dst0x, .dst0x, .tmp3x, ._ },
149229 } },
149230 }, .{
149231 .required_features = .{ .sse, null, null, null },
149232 .dst_constraints = .{ .{ .float = .dword }, .any },
149233 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
149234 .patterns = &.{
149235 .{ .src = .{ .to_mem, .none, .none } },
149236 },
149237 .extra_temps = .{
149238 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
149239 .{ .type = .vector_16_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0 } } },
149240 .{ .type = .vector_4_f32, .kind = .{ .splat_float_mem = .{ .ref = .src0, .outside = -inf } } },
149241 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
149242 .unused,
149243 .unused,
149244 .unused,
149245 .unused,
149246 .unused,
149247 .unused,
149248 .unused,
149249 },
149250 .dst_temps = .{ .{ .rc = .sse }, .unused },
149251 .clobbers = .{ .eflags = true },
149252 .each = .{ .once = &.{
149253 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
149254 .{ ._, ._ps, .mova, .dst0x, .lea(.tmp0x), ._, ._ },
149255 .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
149256 .{ ._, ._ps, .@"and", .dst0x, .memad(.src0x, .add_size, -16), ._, ._ },
149257 .{ ._, ._ps, .@"or", .dst0x, .lea(.tmp0x), ._, ._ },
149258 .{ ._, ._, .mov, .tmp0d, .sia(-32, .src0, .add_size), ._, ._ },
149259 .{ .@"0:", ._ps, .max, .dst0x, .memi(.src0x, .tmp0), ._, ._ },
149260 .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
149261 .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
149262 .{ ._, ._ps, .xor, .tmp3x, .tmp3x, ._, ._ },
149263 .{ ._, ._ps, .movhl, .tmp3x, .dst0x, ._, ._ },
149264 .{ ._, ._ps, .max, .dst0x, .tmp3x, ._, ._ },
149265 .{ ._, ._ps, .mova, .tmp3x, .dst0x, ._, ._ },
149266 .{ ._, ._ps, .shuf, .tmp3x, .tmp3x, .ui(0b01), ._ },
149267 .{ ._, ._ss, .max, .dst0x, .tmp3x, ._, ._ },
149268 } },
149269 }, .{
149270 .required_features = .{ .avx, null, null, null },
149271 .dst_constraints = .{ .{ .float = .qword }, .any },
149272 .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .xword, .is = .qword } }, .any, .any },
149273 .patterns = &.{
149274 .{ .src = .{ .to_sse, .none, .none } },
149275 },
149276 .extra_temps = .{
149277 .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
149278 .unused,
149279 .unused,
149280 .unused,
149281 .unused,
149282 .unused,
149283 .unused,
149284 .unused,
149285 .unused,
149286 .unused,
149287 .unused,
149288 },
149289 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
149290 .each = .{ .once = &.{
149291 .{ ._, .v_ps, .movhl, .tmp0x, .src0x, .src0x, ._ },
149292 .{ ._, .v_sd, .max, .dst0x, .src0x, .tmp0x, ._ },
149293 } },
149294 }, .{
149295 .required_features = .{ .sse2, null, null, null },
149296 .dst_constraints = .{ .{ .float = .qword }, .any },
149297 .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .xword, .is = .qword } }, .any, .any },
149298 .patterns = &.{
149299 .{ .src = .{ .to_mut_sse, .none, .none } },
149300 },
149301 .extra_temps = .{
149302 .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
149303 .unused,
149304 .unused,
149305 .unused,
149306 .unused,
149307 .unused,
149308 .unused,
149309 .unused,
149310 .unused,
149311 .unused,
149312 .unused,
149313 },
149314 .dst_temps = .{ .{ .ref = .src0 }, .unused },
149315 .each = .{ .once = &.{
149316 .{ ._, ._ps, .xor, .tmp0x, .tmp0x, ._, ._ },
149317 .{ ._, ._ps, .movhl, .tmp0x, .src0x, ._, ._ },
149318 .{ ._, ._sd, .max, .dst0x, .tmp0x, ._, ._ },
149319 } },
149320 }, .{
149321 .required_features = .{ .avx, null, null, null },
149322 .dst_constraints = .{ .{ .float = .qword }, .any },
149323 .src_constraints = .{ .{ .exclusive_scalar_float = .{ .of = .yword, .is = .qword } }, .any, .any },
149324 .patterns = &.{
149325 .{ .src = .{ .to_sse, .none, .none } },
149326 },
149327 .extra_temps = .{
149328 .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
149329 .unused,
149330 .unused,
149331 .unused,
149332 .unused,
149333 .unused,
149334 .unused,
149335 .unused,
149336 .unused,
149337 .unused,
149338 .unused,
149339 },
149340 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
149341 .each = .{ .once = &.{
149342 .{ ._, .v_f128, .extract, .tmp0x, .src0y, .ui(1), ._ },
149343 .{ ._, .v_sd, .max, .tmp0x, .src0x, .tmp0x, ._ },
149344 .{ ._, .v_ps, .movhl, .dst0x, .src0x, .src0x, ._ },
149345 .{ ._, .v_sd, .max, .dst0x, .tmp0x, .dst0x, ._ },
149346 } },
149347 }, .{
149348 .required_features = .{ .avx, null, null, null },
149349 .dst_constraints = .{ .{ .float = .qword }, .any },
149350 .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .yword, .is = .qword } }, .any, .any },
149351 .patterns = &.{
149352 .{ .src = .{ .to_sse, .none, .none } },
149353 },
149354 .extra_temps = .{
149355 .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
149356 .unused,
149357 .unused,
149358 .unused,
149359 .unused,
149360 .unused,
149361 .unused,
149362 .unused,
149363 .unused,
149364 .unused,
149365 .unused,
149366 },
149367 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
149368 .each = .{ .once = &.{
149369 .{ ._, .v_f128, .extract, .tmp0x, .src0y, .ui(1), ._ },
149370 .{ ._, .v_pd, .max, .dst0x, .src0x, .tmp0x, ._ },
149371 .{ ._, .v_ps, .movhl, .tmp0x, .dst0x, .dst0x, ._ },
149372 .{ ._, .v_sd, .max, .dst0x, .dst0x, .tmp0x, ._ },
149373 } },
149374 }, .{
149375 .required_features = .{ .avx512f, null, null, null },
149376 .dst_constraints = .{ .{ .float = .qword }, .any },
149377 .src_constraints = .{ .{ .exclusive_scalar_float = .{ .of = .zword, .is = .qword } }, .any, .any },
149378 .patterns = &.{
149379 .{ .src = .{ .to_mem, .none, .none } },
149380 },
149381 .extra_temps = .{
149382 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
149383 .{ .type = .vector_64_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0 } } },
149384 .{ .type = .vector_8_f64, .kind = .{ .splat_float_mem = .{ .ref = .src0, .outside = -inf } } },
149385 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
149386 .unused,
149387 .unused,
149388 .unused,
149389 .unused,
149390 .unused,
149391 .unused,
149392 .unused,
149393 },
149394 .dst_temps = .{ .{ .rc = .sse }, .unused },
149395 .each = .{ .once = &.{
149396 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
149397 .{ ._, .v_pd, .mova, .dst0y, .lea(.tmp0y), ._, ._ },
149398 .{ ._, .v_pd, .mova, .tmp3y, .lead(.tmp0y, 32), ._, ._ },
149399 .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
149400 .{ ._, .v_pd, .@"and", .dst0y, .dst0y, .mem(.src0y), ._ },
149401 .{ ._, .v_pd, .@"and", .tmp3y, .tmp3y, .memd(.src0y, 32), ._ },
149402 .{ ._, .v_pd, .@"or", .dst0y, .dst0y, .lea(.tmp0y), ._ },
149403 .{ ._, .v_pd, .@"or", .tmp3y, .tmp3y, .lead(.tmp0y, 32), ._ },
149404 .{ ._, .v_pd, .max, .dst0y, .dst0y, .tmp3y, ._ },
149405 .{ ._, .v_i128, .extract, .tmp3x, .dst0y, .ui(1), ._ },
149406 .{ ._, .v_pd, .max, .dst0x, .dst0x, .tmp3x, ._ },
149407 .{ ._, .v_ps, .movhl, .tmp3x, .dst0x, .dst0x, ._ },
149408 .{ ._, .v_sd, .max, .dst0x, .dst0x, .tmp3x, ._ },
149409 } },
149410 }, .{
149411 .required_features = .{ .avx512f, null, null, null },
149412 .dst_constraints = .{ .{ .float = .qword }, .any },
149413 .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .zword, .is = .qword } }, .any, .any },
149414 .patterns = &.{
149415 .{ .src = .{ .to_mem, .none, .none } },
149416 },
149417 .extra_temps = .{
149418 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
149419 .unused,
149420 .unused,
149421 .unused,
149422 .unused,
149423 .unused,
149424 .unused,
149425 .unused,
149426 .unused,
149427 .unused,
149428 .unused,
149429 },
149430 .dst_temps = .{ .{ .rc = .sse }, .unused },
149431 .each = .{ .once = &.{
149432 .{ ._, .v_pd, .mova, .dst0y, .mem(.src0y), ._, ._ },
149433 .{ ._, .v_pd, .mova, .tmp0y, .memd(.src0y, 32), ._, ._ },
149434 .{ ._, .v_pd, .max, .dst0y, .dst0y, .tmp0y, ._ },
149435 .{ ._, .v_i128, .extract, .tmp0x, .dst0y, .ui(1), ._ },
149436 .{ ._, .v_pd, .max, .dst0x, .dst0x, .tmp0x, ._ },
149437 .{ ._, .v_ps, .movhl, .tmp0x, .dst0x, .dst0x, ._ },
149438 .{ ._, .v_sd, .max, .dst0x, .dst0x, .tmp0x, ._ },
149439 } },
149440 }, .{
149441 .required_features = .{ .avx, null, null, null },
149442 .dst_constraints = .{ .{ .float = .qword }, .any },
149443 .src_constraints = .{ .{ .unaligned_multiple_scalar_float = .{ .of = .yword, .is = .qword } }, .any, .any },
149444 .patterns = &.{
149445 .{ .src = .{ .to_mem, .none, .none } },
149446 },
149447 .extra_temps = .{
149448 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
149449 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
149450 .unused,
149451 .unused,
149452 .unused,
149453 .unused,
149454 .unused,
149455 .unused,
149456 .unused,
149457 .unused,
149458 .unused,
149459 },
149460 .dst_temps = .{ .{ .rc = .sse }, .unused },
149461 .clobbers = .{ .eflags = true },
149462 .each = .{ .once = &.{
149463 .{ ._, ._, .mov, .tmp0d, .sia(-64, .src0, .add_unaligned_size), ._, ._ },
149464 .{ ._, .v_pd, .mova, .dst0y, .memad(.src0y, .add_unaligned_size, -32), ._, ._ },
149465 .{ .@"0:", .v_pd, .max, .dst0y, .dst0y, .memi(.src0y, .tmp0), ._ },
149466 .{ ._, ._, .sub, .tmp0d, .si(32), ._, ._ },
149467 .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
149468 .{ ._, .v_f128, .extract, .tmp1x, .dst0y, .ui(1), ._ },
149469 .{ ._, .v_pd, .max, .dst0x, .dst0x, .tmp1x, ._ },
149470 .{ ._, .v_ps, .movhl, .tmp1x, .dst0x, .dst0x, ._ },
149471 .{ ._, .v_pd, .max, .dst0x, .dst0x, .tmp1x, ._ },
149472 } },
149473 }, .{
149474 .required_features = .{ .sse2, null, null, null },
149475 .dst_constraints = .{ .{ .float = .qword }, .any },
149476 .src_constraints = .{ .{ .unaligned_multiple_scalar_float = .{ .of = .xword, .is = .qword } }, .any, .any },
149477 .patterns = &.{
149478 .{ .src = .{ .to_mem, .none, .none } },
149479 },
149480 .extra_temps = .{
149481 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
149482 .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
149483 .unused,
149484 .unused,
149485 .unused,
149486 .unused,
149487 .unused,
149488 .unused,
149489 .unused,
149490 .unused,
149491 .unused,
149492 },
149493 .dst_temps = .{ .{ .rc = .sse }, .unused },
149494 .clobbers = .{ .eflags = true },
149495 .each = .{ .once = &.{
149496 .{ ._, ._, .mov, .tmp0d, .sia(-32, .src0, .add_unaligned_size), ._, ._ },
149497 .{ ._, ._pd, .mova, .dst0x, .memad(.src0x, .add_unaligned_size, -16), ._, ._ },
149498 .{ .@"0:", ._pd, .max, .dst0x, .memi(.src0x, .tmp0), ._, ._ },
149499 .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
149500 .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
149501 .{ ._, ._ps, .xor, .tmp1x, .tmp1x, ._, ._ },
149502 .{ ._, ._ps, .movhl, .tmp1x, .dst0x, ._, ._ },
149503 .{ ._, ._sd, .max, .dst0x, .tmp1x, ._, ._ },
149504 } },
149505 }, .{
149506 .required_features = .{ .avx512f, null, null, null },
149507 .dst_constraints = .{ .{ .float = .qword }, .any },
149508 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .zword, .is = .qword } }, .any, .any },
149509 .patterns = &.{
149510 .{ .src = .{ .to_mem, .none, .none } },
149511 },
149512 .extra_temps = .{
149513 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
149514 .{ .type = .vector_64_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0 } } },
149515 .{ .type = .vector_8_f64, .kind = .{ .splat_float_mem = .{ .ref = .src0, .outside = -inf } } },
149516 .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } },
149517 .unused,
149518 .unused,
149519 .unused,
149520 .unused,
149521 .unused,
149522 .unused,
149523 .unused,
149524 },
149525 .dst_temps = .{ .{ .rc = .sse }, .unused },
149526 .clobbers = .{ .eflags = true },
149527 .each = .{ .once = &.{
149528 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
149529 .{ ._, .v_pd, .mova, .dst0y, .lea(.tmp0y), ._, ._ },
149530 .{ ._, .v_pd, .mova, .tmp3y, .lead(.tmp0y, 32), ._, ._ },
149531 .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
149532 .{ ._, .v_pd, .@"and", .tmp3y, .tmp3y, .memad(.src0y, .add_size, -32), ._ },
149533 .{ ._, .v_pd, .@"and", .dst0y, .dst0y, .memad(.src0y, .add_size, -64), ._ },
149534 .{ ._, .v_pd, .@"or", .dst0y, .dst0y, .lea(.tmp0y), ._ },
149535 .{ ._, .v_pd, .@"or", .tmp3y, .tmp3y, .lead(.tmp0y, 32), ._ },
149536 .{ ._, ._, .mov, .tmp0d, .sia(-128, .src0, .add_size), ._, ._ },
149537 .{ .@"0:", .v_pd, .max, .tmp3y, .tmp3y, .memid(.src0y, .tmp0, 32), ._ },
149538 .{ ._, .v_pd, .max, .dst0y, .dst0y, .memi(.src0y, .tmp0), ._ },
149539 .{ ._, ._, .sub, .tmp0d, .si(64), ._, ._ },
149540 .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
149541 .{ ._, .v_pd, .max, .dst0y, .dst0y, .tmp3y, ._ },
149542 .{ ._, .v_f128, .extract, .tmp3x, .dst0y, .ui(1), ._ },
149543 .{ ._, .v_pd, .max, .dst0x, .dst0x, .tmp3x, ._ },
149544 .{ ._, .v_ps, .movhl, .tmp3x, .dst0x, .dst0x, ._ },
149545 .{ ._, .v_sd, .max, .dst0x, .dst0x, .tmp3x, ._ },
149546 } },
149547 }, .{
149548 .required_features = .{ .avx, null, null, null },
149549 .dst_constraints = .{ .{ .float = .qword }, .any },
149550 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } }, .any, .any },
149551 .patterns = &.{
149552 .{ .src = .{ .to_mem, .none, .none } },
149553 },
149554 .extra_temps = .{
149555 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
149556 .{ .type = .vector_32_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0 } } },
149557 .{ .type = .vector_4_f64, .kind = .{ .splat_float_mem = .{ .ref = .src0, .outside = -inf } } },
149558 .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
149559 .unused,
149560 .unused,
149561 .unused,
149562 .unused,
149563 .unused,
149564 .unused,
149565 .unused,
149566 },
149567 .dst_temps = .{ .{ .rc = .sse }, .unused },
149568 .clobbers = .{ .eflags = true },
149569 .each = .{ .once = &.{
149570 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
149571 .{ ._, .v_pd, .mova, .dst0y, .lea(.tmp0y), ._, ._ },
149572 .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
149573 .{ ._, .v_pd, .@"and", .dst0y, .dst0y, .memad(.src0y, .add_size, -32), ._ },
149574 .{ ._, .v_pd, .@"or", .dst0y, .dst0y, .lea(.tmp0y), ._ },
149575 .{ ._, ._, .mov, .tmp0d, .sia(-48, .src0, .add_size), ._, ._ },
149576 .{ ._, .v_f128, .extract, .tmp3x, .dst0y, .ui(1), ._ },
149577 .{ ._, .v_pd, .max, .dst0x, .dst0x, .tmp3x, ._ },
149578 .{ .@"0:", .v_pd, .max, .dst0x, .dst0x, .memi(.src0x, .tmp0), ._ },
149579 .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
149580 .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
149581 .{ ._, .v_ps, .movhl, .tmp3x, .dst0x, .dst0x, ._ },
149582 .{ ._, .v_pd, .max, .dst0x, .dst0x, .tmp3x, ._ },
149583 } },
149584 }, .{
149585 .required_features = .{ .sse2, null, null, null },
149586 .dst_constraints = .{ .{ .float = .qword }, .any },
149587 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, .any, .any },
149588 .patterns = &.{
149589 .{ .src = .{ .to_mem, .none, .none } },
149590 },
149591 .extra_temps = .{
149592 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
149593 .{ .type = .vector_16_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0 } } },
149594 .{ .type = .vector_2_f64, .kind = .{ .splat_float_mem = .{ .ref = .src0, .outside = -inf } } },
149595 .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
149596 .unused,
149597 .unused,
149598 .unused,
149599 .unused,
149600 .unused,
149601 .unused,
149602 .unused,
149603 },
149604 .dst_temps = .{ .{ .rc = .sse }, .unused },
149605 .clobbers = .{ .eflags = true },
149606 .each = .{ .once = &.{
149607 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
149608 .{ ._, ._pd, .mova, .dst0x, .lea(.tmp0x), ._, ._ },
149609 .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
149610 .{ ._, ._pd, .@"and", .dst0x, .memad(.src0x, .add_size, -16), ._, ._ },
149611 .{ ._, ._pd, .@"or", .dst0x, .lea(.tmp0x), ._, ._ },
149612 .{ ._, ._, .mov, .tmp0d, .sia(-32, .src0, .add_size), ._, ._ },
149613 .{ .@"0:", ._pd, .max, .dst0x, .memi(.src0x, .tmp0), ._, ._ },
149614 .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
149615 .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
149616 .{ ._, ._ps, .xor, .tmp3x, .tmp3x, ._, ._ },
149617 .{ ._, ._ps, .movhl, .tmp3x, .dst0x, ._, ._ },
149618 .{ ._, ._pd, .max, .dst0x, .tmp3x, ._, ._ },
149619 } },
149620 }, .{
149621 .required_features = .{ .x87, .cmov, null, null },
149622 .dst_constraints = .{ .{ .float = .qword }, .any },
149623 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
149624 .patterns = &.{
149625 .{ .src = .{ .to_mem, .none, .none } },
149626 },
149627 .extra_temps = .{
149628 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
149629 .{ .type = .f64, .kind = .{ .reg = .st7 } },
149630 .{ .type = .f64, .kind = .{ .reg = .st6 } },
149631 .unused,
149632 .unused,
149633 .unused,
149634 .unused,
149635 .unused,
149636 .unused,
149637 .unused,
149638 .unused,
149639 },
149640 .dst_temps = .{ .mem, .unused },
149641 .clobbers = .{ .eflags = true },
149642 .each = .{ .once = &.{
149643 .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_unaligned_size), ._, ._ },
149644 .{ ._, .f_, .ld, .memad(.src0q, .add_unaligned_size, -8), ._, ._, ._ },
149645 .{ .@"0:", .f_, .ld, .memi(.src0q, .tmp0), ._, ._, ._ },
149646 .{ ._, .f_, .ucomi, .tmp2t, .tmp1t, ._, ._ },
149647 .{ ._, .f_b, .cmov, .tmp2t, .tmp1t, ._, ._ },
149648 .{ ._, .f_p, .st, .tmp1t, ._, ._, ._ },
149649 .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
149650 .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
149651 .{ ._, .f_p, .st, .dst0q, ._, ._, ._ },
149652 } },
149653 }, .{
149654 .required_features = .{ .sahf, .x87, null, null },
149655 .dst_constraints = .{ .{ .float = .qword }, .any },
149656 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
149657 .patterns = &.{
149658 .{ .src = .{ .to_mem, .none, .none } },
149659 },
149660 .extra_temps = .{
149661 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
149662 .{ .type = .f64, .kind = .{ .reg = .st7 } },
149663 .{ .type = .f64, .kind = .{ .reg = .st6 } },
149664 .{ .type = .u16, .kind = .{ .reg = .ax } },
149665 .unused,
149666 .unused,
149667 .unused,
149668 .unused,
149669 .unused,
149670 .unused,
149671 .unused,
149672 },
149673 .dst_temps = .{ .mem, .unused },
149674 .clobbers = .{ .eflags = true },
149675 .each = .{ .once = &.{
149676 .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_unaligned_size), ._, ._ },
149677 .{ ._, .f_, .ld, .memad(.src0q, .add_unaligned_size, -8), ._, ._, ._ },
149678 .{ .@"0:", .f_, .ld, .memi(.src0q, .tmp0), ._, ._, ._ },
149679 .{ ._, .f_, .ucom, .tmp1t, ._, ._, ._ },
149680 .{ ._, .fn_sw, .st, .tmp3w, ._, ._, ._ },
149681 .{ ._, ._, .sahf, ._, ._, ._, ._ },
149682 .{ ._, ._b, .j, .@"1f", ._, ._, ._ },
149683 .{ ._, .f_, .st, .tmp1t, ._, ._, ._ },
149684 .{ .@"1:", .f_p, .st, .tmp2t, ._, ._, ._ },
149685 .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
149686 .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
149687 .{ ._, .f_p, .st, .dst0q, ._, ._, ._ },
149688 } },
149689 }, .{
149690 .required_features = .{ .x87, null, null, null },
149691 .dst_constraints = .{ .{ .float = .qword }, .any },
149692 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
149693 .patterns = &.{
149694 .{ .src = .{ .to_mem, .none, .none } },
149695 },
149696 .extra_temps = .{
149697 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
149698 .{ .type = .f64, .kind = .{ .reg = .st7 } },
149699 .{ .type = .f64, .kind = .{ .reg = .st6 } },
149700 .{ .type = .u16, .kind = .{ .reg = .ax } },
149701 .unused,
149702 .unused,
149703 .unused,
149704 .unused,
149705 .unused,
149706 .unused,
149707 .unused,
149708 },
149709 .dst_temps = .{ .mem, .unused },
149710 .clobbers = .{ .eflags = true },
149711 .each = .{ .once = &.{
149712 .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_unaligned_size), ._, ._ },
149713 .{ ._, .f_, .ld, .memad(.src0q, .add_unaligned_size, -8), ._, ._, ._ },
149714 .{ .@"0:", .f_, .ld, .memi(.src0q, .tmp0), ._, ._, ._ },
149715 .{ ._, .f_, .ucom, .tmp1t, ._, ._, ._ },
149716 .{ ._, .fn_sw, .st, .tmp3w, ._, ._, ._ },
149717 .{ ._, ._, .@"test", .tmp3h, .si(0b0_000_001), ._, ._ },
149718 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
149719 .{ ._, .f_, .st, .tmp1t, ._, ._, ._ },
149720 .{ .@"1:", .f_p, .st, .tmp2t, ._, ._, ._ },
149721 .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
149722 .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
149723 .{ ._, .f_p, .st, .dst0q, ._, ._, ._ },
149724 } },
149725 }, .{
149726 .required_features = .{ .x87, .cmov, null, null },
149727 .dst_constraints = .{ .{ .float = .tbyte }, .any },
149728 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
149729 .patterns = &.{
149730 .{ .src = .{ .to_mem, .none, .none } },
149731 },
149732 .extra_temps = .{
149733 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
149734 .{ .type = .f80, .kind = .{ .reg = .st7 } },
149735 .{ .type = .f80, .kind = .{ .reg = .st6 } },
149736 .unused,
149737 .unused,
149738 .unused,
149739 .unused,
149740 .unused,
149741 .unused,
149742 .unused,
149743 .unused,
149744 },
149745 .dst_temps = .{ .{ .rc = .x87 }, .unused },
149746 .clobbers = .{ .eflags = true },
149747 .each = .{ .once = &.{
149748 .{ ._, ._, .mov, .tmp0d, .sia(-32, .src0, .add_unaligned_size), ._, ._ },
149749 .{ ._, .f_, .ld, .memad(.src0t, .add_unaligned_size, -16), ._, ._, ._ },
149750 .{ .@"0:", .f_, .ld, .memi(.src0t, .tmp0), ._, ._, ._ },
149751 .{ ._, .f_, .ucomi, .tmp2t, .tmp1t, ._, ._ },
149752 .{ ._, .f_b, .cmov, .tmp2t, .tmp1t, ._, ._ },
149753 .{ ._, .f_p, .st, .tmp1t, ._, ._, ._ },
149754 .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
149755 .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
149756 .{ ._, .f_p, .st, .dst0t, ._, ._, ._ },
149757 } },
149758 }, .{
149759 .required_features = .{ .sahf, .x87, null, null },
149760 .dst_constraints = .{ .{ .float = .tbyte }, .any },
149761 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
149762 .patterns = &.{
149763 .{ .src = .{ .to_mem, .none, .none } },
149764 },
149765 .extra_temps = .{
149766 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
149767 .{ .type = .f80, .kind = .{ .reg = .st7 } },
149768 .{ .type = .f80, .kind = .{ .reg = .st6 } },
149769 .{ .type = .u16, .kind = .{ .reg = .ax } },
149770 .unused,
149771 .unused,
149772 .unused,
149773 .unused,
149774 .unused,
149775 .unused,
149776 .unused,
149777 },
149778 .dst_temps = .{ .{ .rc = .x87 }, .unused },
149779 .clobbers = .{ .eflags = true },
149780 .each = .{ .once = &.{
149781 .{ ._, ._, .mov, .tmp0d, .sia(-32, .src0, .add_unaligned_size), ._, ._ },
149782 .{ ._, .f_, .ld, .memad(.src0t, .add_unaligned_size, -16), ._, ._, ._ },
149783 .{ .@"0:", .f_, .ld, .memi(.src0t, .tmp0), ._, ._, ._ },
149784 .{ ._, .f_, .ucom, .tmp1t, ._, ._, ._ },
149785 .{ ._, .fn_sw, .st, .tmp3w, ._, ._, ._ },
149786 .{ ._, ._, .sahf, ._, ._, ._, ._ },
149787 .{ ._, ._b, .j, .@"1f", ._, ._, ._ },
149788 .{ ._, .f_, .st, .tmp1t, ._, ._, ._ },
149789 .{ .@"1:", .f_p, .st, .tmp2t, ._, ._, ._ },
149790 .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
149791 .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
149792 .{ ._, .f_p, .st, .dst0t, ._, ._, ._ },
149793 } },
149794 }, .{
149795 .required_features = .{ .x87, null, null, null },
149796 .dst_constraints = .{ .{ .float = .tbyte }, .any },
149797 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
149798 .patterns = &.{
149799 .{ .src = .{ .to_mem, .none, .none } },
149800 },
149801 .extra_temps = .{
149802 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
149803 .{ .type = .f80, .kind = .{ .reg = .st7 } },
149804 .{ .type = .f80, .kind = .{ .reg = .st6 } },
149805 .{ .type = .u16, .kind = .{ .reg = .ax } },
149806 .unused,
149807 .unused,
149808 .unused,
149809 .unused,
149810 .unused,
149811 .unused,
149812 .unused,
149813 },
149814 .dst_temps = .{ .{ .rc = .x87 }, .unused },
149815 .clobbers = .{ .eflags = true },
149816 .each = .{ .once = &.{
149817 .{ ._, ._, .mov, .tmp0d, .sia(-32, .src0, .add_unaligned_size), ._, ._ },
149818 .{ ._, .f_, .ld, .memad(.src0t, .add_unaligned_size, -16), ._, ._, ._ },
149819 .{ .@"0:", .f_, .ld, .memi(.src0t, .tmp0), ._, ._, ._ },
149820 .{ ._, .f_, .ucom, .tmp1t, ._, ._, ._ },
149821 .{ ._, .fn_sw, .st, .tmp3w, ._, ._, ._ },
149822 .{ ._, ._, .@"test", .tmp3h, .si(0b0_000_001), ._, ._ },
149823 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
149824 .{ ._, .f_, .st, .tmp1t, ._, ._, ._ },
149825 .{ .@"1:", .f_p, .st, .tmp2t, ._, ._, ._ },
149826 .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
149827 .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
149828 .{ ._, .f_p, .st, .dst0t, ._, ._, ._ },
149829 } },
149830 }, .{
149831 .required_features = .{ .avx, null, null, null },
149832 .dst_constraints = .{ .{ .float = .xword }, .any },
149833 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
149834 .patterns = &.{
149835 .{ .src = .{ .to_mem, .none, .none } },
149836 },
149837 .call_frame = .{ .alignment = .@"16" },
149838 .extra_temps = .{
149839 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
149840 .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
149841 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmaxq" } } },
149842 .unused,
149843 .unused,
149844 .unused,
149845 .unused,
149846 .unused,
149847 .unused,
149848 .unused,
149849 .unused,
149850 },
149851 .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
149852 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
149853 .each = .{ .once = &.{
149854 .{ ._, ._, .mov, .tmp0d, .sia(-32, .src0, .add_unaligned_size), ._, ._ },
149855 .{ ._, .v_dqa, .mov, .dst0x, .memad(.src0x, .add_unaligned_size, -16), ._, ._ },
149856 .{ .@"0:", .v_dqa, .mov, .tmp1x, .memi(.src0x, .tmp0), ._, ._ },
149857 .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
149858 .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
149859 .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
149860 } },
149861 }, .{
149862 .required_features = .{ .sse2, null, null, null },
149863 .dst_constraints = .{ .{ .float = .xword }, .any },
149864 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
149865 .patterns = &.{
149866 .{ .src = .{ .to_mem, .none, .none } },
149867 },
149868 .call_frame = .{ .alignment = .@"16" },
149869 .extra_temps = .{
149870 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
149871 .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
149872 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmaxq" } } },
149873 .unused,
149874 .unused,
149875 .unused,
149876 .unused,
149877 .unused,
149878 .unused,
149879 .unused,
149880 .unused,
149881 },
149882 .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
149883 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
149884 .each = .{ .once = &.{
149885 .{ ._, ._, .mov, .tmp0d, .sia(-32, .src0, .add_unaligned_size), ._, ._ },
149886 .{ ._, ._dqa, .mov, .dst0x, .memad(.src0x, .add_unaligned_size, -16), ._, ._ },
149887 .{ .@"0:", ._dqa, .mov, .tmp1x, .memi(.src0x, .tmp0), ._, ._ },
149888 .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
149889 .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
149890 .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
149891 } },
149892 }, .{
149893 .required_features = .{ .sse, null, null, null },
149894 .dst_constraints = .{ .{ .float = .xword }, .any },
149895 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
149896 .patterns = &.{
149897 .{ .src = .{ .to_mem, .none, .none } },
149898 },
149899 .call_frame = .{ .alignment = .@"16" },
149900 .extra_temps = .{
149901 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
149902 .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
149903 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmaxq" } } },
149904 .unused,
149905 .unused,
149906 .unused,
149907 .unused,
149908 .unused,
149909 .unused,
149910 .unused,
149911 .unused,
149912 },
149913 .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
149914 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
149915 .each = .{ .once = &.{
149916 .{ ._, ._, .mov, .tmp0d, .sia(-32, .src0, .add_unaligned_size), ._, ._ },
149917 .{ ._, ._ps, .mova, .dst0x, .memad(.src0x, .add_unaligned_size, -16), ._, ._ },
149918 .{ .@"0:", ._ps, .mova, .tmp1x, .memi(.src0x, .tmp0), ._, ._ },
149919 .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
149920 .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
149921 .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
149922 } },
149923 } },
148239 .Add => comptime &.{ .{149924 .Add => comptime &.{ .{
148240 .required_features = .{ .f16c, .fast_hops, null, null },149925 .required_features = .{ .f16c, .fast_hops, null, null },
148241 .dst_constraints = .{ .{ .float = .word }, .any },149926 .dst_constraints = .{ .{ .float = .word }, .any },
test/behavior/x86_64/unary.zig+9
...@@ -5137,6 +5137,15 @@ test reduceMinOptimized {...@@ -5137,6 +5137,15 @@ test reduceMinOptimized {
5137 try test_reduce_min_optimized.testFloatVectors();5137 try test_reduce_min_optimized.testFloatVectors();
5138}5138}
51395139
5140inline fn reduceMaxOptimized(comptime Type: type, rhs: Type) @typeInfo(Type).vector.child {
5141 @setFloatMode(.optimized);
5142 return @reduce(.Max, rhs);
5143}
5144test reduceMaxOptimized {
5145 const test_reduce_max_optimized = unary(reduceMaxOptimized, .{});
5146 try test_reduce_max_optimized.testFloatVectors();
5147}
5148
5140inline fn reduceAddOptimized(comptime Type: type, rhs: Type) @typeInfo(Type).vector.child {5149inline fn reduceAddOptimized(comptime Type: type, rhs: Type) @typeInfo(Type).vector.child {
5141 @setFloatMode(.optimized);5150 @setFloatMode(.optimized);
5142 return @reduce(.Add, rhs);5151 return @reduce(.Add, rhs);