| ... | ... | @@ -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; |
| ... | ... | @@ -23288,10 +23288,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 23288 | 23288 | .dst_temps = .{ .mem, .unused }, |
| 23289 | 23289 | .clobbers = .{ .eflags = true }, |
| 23290 | 23290 | .each = .{ .once = &.{ |
| 23291 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 23292 | | .{ .@"0:", ._, .lea, .tmp1p, .memia(.src0, .tmp0, .add_size), ._, ._ }, |
| 23293 | | .{ ._, ._, .lea, .tmp2p, .memia(.src1, .tmp0, .add_size), ._, ._ }, |
| 23294 | | .{ ._, ._, .lea, .tmp3p, .memia(.dst0, .tmp0, .add_size), ._, ._ }, |
| 23291 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, |
| 23292 | .{ .@"0:", ._, .lea, .tmp1p, .memia(.src0, .tmp0, .add_unaligned_size), ._, ._ }, |
| 23293 | .{ ._, ._, .lea, .tmp2p, .memia(.src1, .tmp0, .add_unaligned_size), ._, ._ }, |
| 23294 | .{ ._, ._, .lea, .tmp3p, .memia(.dst0, .tmp0, .add_unaligned_size), ._, ._ }, |
| 23295 | 23295 | .{ ._, ._, .mov, .tmp4d, .sia(-8, .src0, .add_elem_size), ._, ._ }, |
| 23296 | 23296 | .{ .@"1:", ._, .xor, .tmp5d, .tmp5d, ._, ._ }, |
| 23297 | 23297 | .{ ._, ._, .@"or", .tmp5q, .leai(.tmp1q, .tmp4), ._, ._ }, |
| ... | ... | @@ -23339,10 +23339,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 23339 | 23339 | .dst_temps = .{ .mem, .unused }, |
| 23340 | 23340 | .clobbers = .{ .eflags = true }, |
| 23341 | 23341 | .each = .{ .once = &.{ |
| 23342 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 23343 | | .{ .@"0:", ._, .lea, .tmp1p, .memia(.src0, .tmp0, .add_size), ._, ._ }, |
| 23344 | | .{ ._, ._, .lea, .tmp2p, .memiad(.src1, .tmp0, .add_size, 8), ._, ._ }, |
| 23345 | | .{ ._, ._, .lea, .tmp3p, .memia(.dst0, .tmp0, .add_size), ._, ._ }, |
| 23342 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, |
| 23343 | .{ .@"0:", ._, .lea, .tmp1p, .memia(.src0, .tmp0, .add_unaligned_size), ._, ._ }, |
| 23344 | .{ ._, ._, .lea, .tmp2p, .memiad(.src1, .tmp0, .add_unaligned_size, 8), ._, ._ }, |
| 23345 | .{ ._, ._, .lea, .tmp3p, .memia(.dst0, .tmp0, .add_unaligned_size), ._, ._ }, |
| 23346 | 23346 | .{ ._, ._, .mov, .tmp4d, .sia(-1, .src0, .add_elem_size_div_8), ._, ._ }, |
| 23347 | 23347 | .{ .@"1:", ._, .lea, .tmp5p, .leaa(.tmp4, .sub_src0_elem_size_div_8), ._, ._ }, |
| 23348 | 23348 | .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ }, |
| ... | ... | @@ -23393,10 +23393,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 23393 | 23393 | .dst_temps = .{ .mem, .unused }, |
| 23394 | 23394 | .clobbers = .{ .eflags = true }, |
| 23395 | 23395 | .each = .{ .once = &.{ |
| 23396 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 23397 | | .{ .@"0:", ._, .lea, .tmp1p, .memia(.src0, .tmp0, .add_size), ._, ._ }, |
| 23398 | | .{ ._, ._, .lea, .tmp2p, .memiad(.src1, .tmp0, .add_size, 8), ._, ._ }, |
| 23399 | | .{ ._, ._, .lea, .tmp3p, .memia(.dst0, .tmp0, .add_size), ._, ._ }, |
| 23396 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, |
| 23397 | .{ .@"0:", ._, .lea, .tmp1p, .memia(.src0, .tmp0, .add_unaligned_size), ._, ._ }, |
| 23398 | .{ ._, ._, .lea, .tmp2p, .memiad(.src1, .tmp0, .add_unaligned_size, 8), ._, ._ }, |
| 23399 | .{ ._, ._, .lea, .tmp3p, .memia(.dst0, .tmp0, .add_unaligned_size), ._, ._ }, |
| 23400 | 23400 | .{ ._, ._, .mov, .tmp4d, .sia(-1, .src0, .add_elem_size_div_8), ._, ._ }, |
| 23401 | 23401 | .{ .@"1:", ._, .lea, .tmp5p, .leaa(.tmp4, .sub_src0_elem_size_div_8), ._, ._ }, |
| 23402 | 23402 | .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ }, |
| ... | ... | @@ -23447,10 +23447,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 23447 | 23447 | .dst_temps = .{ .mem, .unused }, |
| 23448 | 23448 | .clobbers = .{ .eflags = true }, |
| 23449 | 23449 | .each = .{ .once = &.{ |
| 23450 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 23451 | | .{ .@"0:", ._, .lea, .tmp1p, .memia(.src0, .tmp0, .add_size), ._, ._ }, |
| 23452 | | .{ ._, ._, .lea, .tmp2p, .memiad(.src1, .tmp0, .add_size, 8), ._, ._ }, |
| 23453 | | .{ ._, ._, .lea, .tmp3p, .memia(.dst0, .tmp0, .add_size), ._, ._ }, |
| 23450 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, |
| 23451 | .{ .@"0:", ._, .lea, .tmp1p, .memia(.src0, .tmp0, .add_unaligned_size), ._, ._ }, |
| 23452 | .{ ._, ._, .lea, .tmp2p, .memiad(.src1, .tmp0, .add_unaligned_size, 8), ._, ._ }, |
| 23453 | .{ ._, ._, .lea, .tmp3p, .memia(.dst0, .tmp0, .add_unaligned_size), ._, ._ }, |
| 23454 | 23454 | .{ ._, ._, .mov, .tmp4d, .sia(-1, .src0, .add_elem_size_div_8), ._, ._ }, |
| 23455 | 23455 | .{ .@"1:", ._, .lea, .tmp5p, .leaa(.tmp4, .sub_src0_elem_size_div_8), ._, ._ }, |
| 23456 | 23456 | .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ }, |
| ... | ... | @@ -23502,10 +23502,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 23502 | 23502 | .dst_temps = .{ .mem, .unused }, |
| 23503 | 23503 | .clobbers = .{ .eflags = true }, |
| 23504 | 23504 | .each = .{ .once = &.{ |
| 23505 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 23506 | | .{ .@"0:", ._, .lea, .tmp1p, .memia(.src0, .tmp0, .add_size), ._, ._ }, |
| 23507 | | .{ ._, ._, .lea, .tmp2p, .memiad(.src1, .tmp0, .add_size, 8), ._, ._ }, |
| 23508 | | .{ ._, ._, .lea, .tmp3p, .memia(.dst0, .tmp0, .add_size), ._, ._ }, |
| 23505 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, |
| 23506 | .{ .@"0:", ._, .lea, .tmp1p, .memia(.src0, .tmp0, .add_unaligned_size), ._, ._ }, |
| 23507 | .{ ._, ._, .lea, .tmp2p, .memiad(.src1, .tmp0, .add_unaligned_size, 8), ._, ._ }, |
| 23508 | .{ ._, ._, .lea, .tmp3p, .memia(.dst0, .tmp0, .add_unaligned_size), ._, ._ }, |
| 23509 | 23509 | .{ ._, ._, .mov, .tmp4d, .sia(-1, .src0, .add_elem_size_div_8), ._, ._ }, |
| 23510 | 23510 | .{ .@"1:", ._, .lea, .tmp5p, .leaa(.tmp4, .sub_src0_elem_size_div_8), ._, ._ }, |
| 23511 | 23511 | .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ }, |
| ... | ... | @@ -26107,10 +26107,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 26107 | 26107 | .dst_temps = .{ .mem, .unused }, |
| 26108 | 26108 | .clobbers = .{ .eflags = true }, |
| 26109 | 26109 | .each = .{ .once = &.{ |
| 26110 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 26111 | | .{ .@"0:", ._, .lea, .tmp1p, .memia(.src0, .tmp0, .add_size), ._, ._ }, |
| 26112 | | .{ ._, ._, .lea, .tmp2p, .memia(.src1, .tmp0, .add_size), ._, ._ }, |
| 26113 | | .{ ._, ._, .lea, .tmp3p, .memia(.dst0, .tmp0, .add_size), ._, ._ }, |
| 26110 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, |
| 26111 | .{ .@"0:", ._, .lea, .tmp1p, .memia(.src0, .tmp0, .add_unaligned_size), ._, ._ }, |
| 26112 | .{ ._, ._, .lea, .tmp2p, .memia(.src1, .tmp0, .add_unaligned_size), ._, ._ }, |
| 26113 | .{ ._, ._, .lea, .tmp3p, .memia(.dst0, .tmp0, .add_unaligned_size), ._, ._ }, |
| 26114 | 26114 | .{ ._, ._, .mov, .tmp4d, .sia(-8, .src0, .add_elem_size), ._, ._ }, |
| 26115 | 26115 | .{ .@"1:", ._, .xor, .tmp5d, .tmp5d, ._, ._ }, |
| 26116 | 26116 | .{ ._, ._, .@"or", .tmp5q, .leai(.tmp1q, .tmp4), ._, ._ }, |
| ... | ... | @@ -26158,10 +26158,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 26158 | 26158 | .dst_temps = .{ .mem, .unused }, |
| 26159 | 26159 | .clobbers = .{ .eflags = true }, |
| 26160 | 26160 | .each = .{ .once = &.{ |
| 26161 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 26162 | | .{ .@"0:", ._, .lea, .tmp1p, .memia(.src0, .tmp0, .add_size), ._, ._ }, |
| 26163 | | .{ ._, ._, .lea, .tmp2p, .memiad(.src1, .tmp0, .add_size, 8), ._, ._ }, |
| 26164 | | .{ ._, ._, .lea, .tmp3p, .memia(.dst0, .tmp0, .add_size), ._, ._ }, |
| 26161 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, |
| 26162 | .{ .@"0:", ._, .lea, .tmp1p, .memia(.src0, .tmp0, .add_unaligned_size), ._, ._ }, |
| 26163 | .{ ._, ._, .lea, .tmp2p, .memiad(.src1, .tmp0, .add_unaligned_size, 8), ._, ._ }, |
| 26164 | .{ ._, ._, .lea, .tmp3p, .memia(.dst0, .tmp0, .add_unaligned_size), ._, ._ }, |
| 26165 | 26165 | .{ ._, ._, .mov, .tmp4d, .sia(-1, .src0, .add_elem_size_div_8), ._, ._ }, |
| 26166 | 26166 | .{ .@"1:", ._, .lea, .tmp5p, .leaa(.tmp4, .sub_src0_elem_size_div_8), ._, ._ }, |
| 26167 | 26167 | .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ }, |
| ... | ... | @@ -26212,10 +26212,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 26212 | 26212 | .dst_temps = .{ .mem, .unused }, |
| 26213 | 26213 | .clobbers = .{ .eflags = true }, |
| 26214 | 26214 | .each = .{ .once = &.{ |
| 26215 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 26216 | | .{ .@"0:", ._, .lea, .tmp1p, .memia(.src0, .tmp0, .add_size), ._, ._ }, |
| 26217 | | .{ ._, ._, .lea, .tmp2p, .memiad(.src1, .tmp0, .add_size, 8), ._, ._ }, |
| 26218 | | .{ ._, ._, .lea, .tmp3p, .memia(.dst0, .tmp0, .add_size), ._, ._ }, |
| 26215 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, |
| 26216 | .{ .@"0:", ._, .lea, .tmp1p, .memia(.src0, .tmp0, .add_unaligned_size), ._, ._ }, |
| 26217 | .{ ._, ._, .lea, .tmp2p, .memiad(.src1, .tmp0, .add_unaligned_size, 8), ._, ._ }, |
| 26218 | .{ ._, ._, .lea, .tmp3p, .memia(.dst0, .tmp0, .add_unaligned_size), ._, ._ }, |
| 26219 | 26219 | .{ ._, ._, .mov, .tmp4d, .sia(-1, .src0, .add_elem_size_div_8), ._, ._ }, |
| 26220 | 26220 | .{ .@"1:", ._, .lea, .tmp5p, .leaa(.tmp4, .sub_src0_elem_size_div_8), ._, ._ }, |
| 26221 | 26221 | .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ }, |
| ... | ... | @@ -26266,10 +26266,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 26266 | 26266 | .dst_temps = .{ .mem, .unused }, |
| 26267 | 26267 | .clobbers = .{ .eflags = true }, |
| 26268 | 26268 | .each = .{ .once = &.{ |
| 26269 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 26270 | | .{ .@"0:", ._, .lea, .tmp1p, .memia(.src0, .tmp0, .add_size), ._, ._ }, |
| 26271 | | .{ ._, ._, .lea, .tmp2p, .memiad(.src1, .tmp0, .add_size, 8), ._, ._ }, |
| 26272 | | .{ ._, ._, .lea, .tmp3p, .memia(.dst0, .tmp0, .add_size), ._, ._ }, |
| 26269 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, |
| 26270 | .{ .@"0:", ._, .lea, .tmp1p, .memia(.src0, .tmp0, .add_unaligned_size), ._, ._ }, |
| 26271 | .{ ._, ._, .lea, .tmp2p, .memiad(.src1, .tmp0, .add_unaligned_size, 8), ._, ._ }, |
| 26272 | .{ ._, ._, .lea, .tmp3p, .memia(.dst0, .tmp0, .add_unaligned_size), ._, ._ }, |
| 26273 | 26273 | .{ ._, ._, .mov, .tmp4d, .sia(-1, .src0, .add_elem_size_div_8), ._, ._ }, |
| 26274 | 26274 | .{ .@"1:", ._, .lea, .tmp5p, .leaa(.tmp4, .sub_src0_elem_size_div_8), ._, ._ }, |
| 26275 | 26275 | .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ }, |
| ... | ... | @@ -26321,10 +26321,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 26321 | 26321 | .dst_temps = .{ .mem, .unused }, |
| 26322 | 26322 | .clobbers = .{ .eflags = true }, |
| 26323 | 26323 | .each = .{ .once = &.{ |
| 26324 | | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 26325 | | .{ .@"0:", ._, .lea, .tmp1p, .memia(.src0, .tmp0, .add_size), ._, ._ }, |
| 26326 | | .{ ._, ._, .lea, .tmp2p, .memiad(.src1, .tmp0, .add_size, 8), ._, ._ }, |
| 26327 | | .{ ._, ._, .lea, .tmp3p, .memia(.dst0, .tmp0, .add_size), ._, ._ }, |
| 26324 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, |
| 26325 | .{ .@"0:", ._, .lea, .tmp1p, .memia(.src0, .tmp0, .add_unaligned_size), ._, ._ }, |
| 26326 | .{ ._, ._, .lea, .tmp2p, .memiad(.src1, .tmp0, .add_unaligned_size, 8), ._, ._ }, |
| 26327 | .{ ._, ._, .lea, .tmp3p, .memia(.dst0, .tmp0, .add_unaligned_size), ._, ._ }, |
| 26328 | 26328 | .{ ._, ._, .mov, .tmp4d, .sia(-1, .src0, .add_elem_size_div_8), ._, ._ }, |
| 26329 | 26329 | .{ .@"1:", ._, .lea, .tmp5p, .leaa(.tmp4, .sub_src0_elem_size_div_8), ._, ._ }, |
| 26330 | 26330 | .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ }, |
| ... | ... | @@ -37912,7 +37912,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 37912 | 37912 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, |
| 37913 | 37913 | .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ }, |
| 37914 | 37914 | .{ ._, .i_, .div, .memia(.src1b, .tmp0, .add_unaligned_size), ._, ._, ._ }, |
| 37915 | | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1h, ._, ._ }, |
| 37915 | .{ ._, ._, .movsx, .tmp1d, .tmp1h, ._, ._ }, |
| 37916 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1l, ._, ._ }, |
| 37916 | 37917 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| 37917 | 37918 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 37918 | 37919 | } }, |
| ... | ... | @@ -37944,7 +37945,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 37944 | 37945 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, |
| 37945 | 37946 | .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ }, |
| 37946 | 37947 | .{ ._, .i_, .div, .memia(.src1b, .tmp0, .add_unaligned_size), ._, ._, ._ }, |
| 37947 | | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1h, ._, ._ }, |
| 37948 | .{ ._, ._, .movsx, .tmp1d, .tmp1h, ._, ._ }, |
| 37949 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1l, ._, ._ }, |
| 37948 | 37950 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| 37949 | 37951 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| 37950 | 37952 | } }, |
| ... | ... | @@ -37977,7 +37979,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 37977 | 37979 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, |
| 37978 | 37980 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ }, |
| 37979 | 37981 | .{ ._, ._, .div, .memia(.src1b, .tmp0, .add_unaligned_size), ._, ._, ._ }, |
| 37980 | | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1h, ._, ._ }, |
| 37982 | .{ ._, ._, .movzx, .tmp1d, .tmp1h, ._, ._ }, |
| 37983 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1l, ._, ._ }, |
| 37981 | 37984 | .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, |
| 37982 | 37985 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 37983 | 37986 | } }, |
| ... | ... | @@ -38009,7 +38012,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 38009 | 38012 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, |
| 38010 | 38013 | .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ }, |
| 38011 | 38014 | .{ ._, ._, .div, .memia(.src1b, .tmp0, .add_unaligned_size), ._, ._, ._ }, |
| 38012 | | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1h, ._, ._ }, |
| 38015 | .{ ._, ._, .movzx, .tmp1d, .tmp1h, ._, ._ }, |
| 38016 | .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1l, ._, ._ }, |
| 38013 | 38017 | .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, |
| 38014 | 38018 | .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, |
| 38015 | 38019 | } }, |
| ... | ... | @@ -59429,9 +59433,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 59429 | 59433 | .required_features = .{ .mmx, null, null, null }, |
| 59430 | 59434 | .src_constraints = .{ .{ .size = .qword }, .{ .size = .qword }, .any }, |
| 59431 | 59435 | .patterns = &.{ |
| 59432 | | .{ .src = .{ .to_mut_mm, .mem, .none } }, |
| 59433 | | .{ .src = .{ .mem, .to_mut_mm, .none }, .commute = .{ 0, 1 } }, |
| 59434 | | .{ .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 } }, |
| 59435 | 59439 | }, |
| 59436 | 59440 | .dst_temps = .{ .{ .ref = .src0 }, .unused }, |
| 59437 | 59441 | .each = .{ .once = &.{ |
| ... | ... | @@ -59441,9 +59445,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 59441 | 59445 | .required_features = .{ .avx, null, null, null }, |
| 59442 | 59446 | .src_constraints = .{ .{ .size = .xword }, .{ .size = .xword }, .any }, |
| 59443 | 59447 | .patterns = &.{ |
| 59444 | | .{ .src = .{ .to_xmm, .mem, .none } }, |
| 59445 | | .{ .src = .{ .mem, .to_xmm, .none }, .commute = .{ 0, 1 } }, |
| 59446 | | .{ .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 } }, |
| 59447 | 59451 | }, |
| 59448 | 59452 | .dst_temps = .{ .{ .rc = .sse }, .unused }, |
| 59449 | 59453 | .each = .{ .once = &.{ |
| ... | ... | @@ -59453,9 +59457,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 59453 | 59457 | .required_features = .{ .sse2, null, null, null }, |
| 59454 | 59458 | .src_constraints = .{ .{ .size = .xword }, .{ .size = .xword }, .any }, |
| 59455 | 59459 | .patterns = &.{ |
| 59456 | | .{ .src = .{ .to_mut_xmm, .mem, .none } }, |
| 59457 | | .{ .src = .{ .mem, .to_mut_xmm, .none }, .commute = .{ 0, 1 } }, |
| 59458 | | .{ .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 } }, |
| 59459 | 59463 | }, |
| 59460 | 59464 | .dst_temps = .{ .{ .ref = .src0 }, .unused }, |
| 59461 | 59465 | .each = .{ .once = &.{ |
| ... | ... | @@ -59465,9 +59469,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 59465 | 59469 | .required_features = .{ .sse, null, null, null }, |
| 59466 | 59470 | .src_constraints = .{ .{ .size = .xword }, .{ .size = .xword }, .any }, |
| 59467 | 59471 | .patterns = &.{ |
| 59468 | | .{ .src = .{ .to_mut_xmm, .mem, .none } }, |
| 59469 | | .{ .src = .{ .mem, .to_mut_xmm, .none }, .commute = .{ 0, 1 } }, |
| 59470 | | .{ .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 } }, |
| 59471 | 59475 | }, |
| 59472 | 59476 | .dst_temps = .{ .{ .ref = .src0 }, .unused }, |
| 59473 | 59477 | .each = .{ .once = &.{ |
| ... | ... | @@ -59477,9 +59481,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 59477 | 59481 | .required_features = .{ .avx2, null, null, null }, |
| 59478 | 59482 | .src_constraints = .{ .{ .size = .yword }, .{ .size = .yword }, .any }, |
| 59479 | 59483 | .patterns = &.{ |
| 59480 | | .{ .src = .{ .to_ymm, .mem, .none } }, |
| 59481 | | .{ .src = .{ .mem, .to_ymm, .none }, .commute = .{ 0, 1 } }, |
| 59482 | | .{ .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 } }, |
| 59483 | 59487 | }, |
| 59484 | 59488 | .dst_temps = .{ .{ .rc = .sse }, .unused }, |
| 59485 | 59489 | .each = .{ .once = &.{ |
| ... | ... | @@ -59489,9 +59493,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 59489 | 59493 | .required_features = .{ .avx, null, null, null }, |
| 59490 | 59494 | .src_constraints = .{ .{ .size = .yword }, .{ .size = .yword }, .any }, |
| 59491 | 59495 | .patterns = &.{ |
| 59492 | | .{ .src = .{ .to_ymm, .mem, .none } }, |
| 59493 | | .{ .src = .{ .mem, .to_ymm, .none }, .commute = .{ 0, 1 } }, |
| 59494 | | .{ .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 } }, |
| 59495 | 59499 | }, |
| 59496 | 59500 | .dst_temps = .{ .{ .rc = .sse }, .unused }, |
| 59497 | 59501 | .each = .{ .once = &.{ |
| ... | ... | @@ -64077,6 +64081,16 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 64077 | 64081 | var ops = try cg.tempsFromOperands(inst, .{ty_op.operand}); |
| 64078 | 64082 | var res: [1]Temp = undefined; |
| 64079 | 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 | }, .{ |
| 64080 | 64094 | .src_constraints = .{ .{ .signed_or_exact_int = .byte }, .any, .any }, |
| 64081 | 64095 | .patterns = &.{ |
| 64082 | 64096 | .{ .src = .{ .mut_mem, .none, .none } }, |
| ... | ... | @@ -64097,6 +64111,16 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 64097 | 64111 | .each = .{ .once = &.{ |
| 64098 | 64112 | .{ ._, ._, .xor, .dst0b, .sa(.src0, .add_umax), ._, ._ }, |
| 64099 | 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 | } }, |
| 64100 | 64124 | }, .{ |
| 64101 | 64125 | .src_constraints = .{ .{ .signed_or_exact_int = .word }, .any, .any }, |
| 64102 | 64126 | .patterns = &.{ |
| ... | ... | @@ -64118,6 +64142,16 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 64118 | 64142 | .each = .{ .once = &.{ |
| 64119 | 64143 | .{ ._, ._, .xor, .dst0w, .sa(.src0, .add_umax), ._, ._ }, |
| 64120 | 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 | } }, |
| 64121 | 64155 | }, .{ |
| 64122 | 64156 | .src_constraints = .{ .{ .signed_or_exact_int = .dword }, .any, .any }, |
| 64123 | 64157 | .patterns = &.{ |
| ... | ... | @@ -64139,6 +64173,17 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 64139 | 64173 | .each = .{ .once = &.{ |
| 64140 | 64174 | .{ ._, ._, .xor, .dst0d, .sa(.src0, .add_umax), ._, ._ }, |
| 64141 | 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 | } }, |
| 64142 | 64187 | }, .{ |
| 64143 | 64188 | .required_features = .{ .@"64bit", null, null, null }, |
| 64144 | 64189 | .src_constraints = .{ .{ .signed_or_exact_int = .qword }, .any, .any }, |
| ... | ... | @@ -64162,12 +64207,24 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 64162 | 64207 | .{ ._, ._, .mov, .dst0q, .ua(.src0, .add_umax), ._, ._ }, |
| 64163 | 64208 | .{ ._, ._, .xor, .dst0q, .src0q, ._, ._ }, |
| 64164 | 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 | } }, |
| 64165 | 64222 | }, .{ |
| 64166 | 64223 | .required_features = .{ .mmx, null, null, null }, |
| 64167 | 64224 | .src_constraints = .{ .{ .signed_or_exact_int = .qword }, .any, .any }, |
| 64168 | 64225 | .patterns = &.{ |
| 64169 | 64226 | .{ .src = .{ .mem, .none, .none } }, |
| 64170 | | .{ .src = .{ .to_mm, .none, .none } }, |
| 64227 | .{ .src = .{ .to_mmx, .none, .none } }, |
| 64171 | 64228 | }, |
| 64172 | 64229 | .dst_temps = .{ .{ .rc = .mmx }, .unused }, |
| 64173 | 64230 | .each = .{ .once = &.{ |
| ... | ... | @@ -64178,7 +64235,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 64178 | 64235 | .required_features = .{ .mmx, null, null, null }, |
| 64179 | 64236 | .src_constraints = .{ .{ .unsigned_int = .qword }, .any, .any }, |
| 64180 | 64237 | .patterns = &.{ |
| 64181 | | .{ .src = .{ .to_mut_mm, .none, .none } }, |
| 64238 | .{ .src = .{ .to_mut_mmx, .none, .none } }, |
| 64182 | 64239 | }, |
| 64183 | 64240 | .extra_temps = .{ |
| 64184 | 64241 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| ... | ... | @@ -64198,12 +64255,24 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 64198 | 64255 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 64199 | 64256 | .{ ._, .p_, .xor, .dst0q, .lea(.tmp0q), ._, ._ }, |
| 64200 | 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 | } }, |
| 64201 | 64270 | }, .{ |
| 64202 | 64271 | .required_features = .{ .avx, null, null, null }, |
| 64203 | 64272 | .src_constraints = .{ .{ .signed_or_exact_int = .xword }, .any, .any }, |
| 64204 | 64273 | .patterns = &.{ |
| 64205 | 64274 | .{ .src = .{ .mem, .none, .none } }, |
| 64206 | | .{ .src = .{ .to_xmm, .none, .none } }, |
| 64275 | .{ .src = .{ .to_sse, .none, .none } }, |
| 64207 | 64276 | }, |
| 64208 | 64277 | .dst_temps = .{ .{ .rc = .sse }, .unused }, |
| 64209 | 64278 | .each = .{ .once = &.{ |
| ... | ... | @@ -64214,7 +64283,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 64214 | 64283 | .required_features = .{ .avx, null, null, null }, |
| 64215 | 64284 | .src_constraints = .{ .{ .unsigned_int = .xword }, .any, .any }, |
| 64216 | 64285 | .patterns = &.{ |
| 64217 | | .{ .src = .{ .to_xmm, .none, .none } }, |
| 64286 | .{ .src = .{ .to_sse, .none, .none } }, |
| 64218 | 64287 | }, |
| 64219 | 64288 | .extra_temps = .{ |
| 64220 | 64289 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| ... | ... | @@ -64234,12 +64303,24 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 64234 | 64303 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 64235 | 64304 | .{ ._, .vp_, .xor, .dst0x, .src0x, .lea(.tmp0x), ._ }, |
| 64236 | 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 | } }, |
| 64237 | 64318 | }, .{ |
| 64238 | 64319 | .required_features = .{ .sse2, null, null, null }, |
| 64239 | 64320 | .src_constraints = .{ .{ .signed_or_exact_int = .xword }, .any, .any }, |
| 64240 | 64321 | .patterns = &.{ |
| 64241 | 64322 | .{ .src = .{ .mem, .none, .none } }, |
| 64242 | | .{ .src = .{ .to_xmm, .none, .none } }, |
| 64323 | .{ .src = .{ .to_sse, .none, .none } }, |
| 64243 | 64324 | }, |
| 64244 | 64325 | .dst_temps = .{ .{ .rc = .sse }, .unused }, |
| 64245 | 64326 | .each = .{ .once = &.{ |
| ... | ... | @@ -64250,7 +64331,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 64250 | 64331 | .required_features = .{ .sse2, null, null, null }, |
| 64251 | 64332 | .src_constraints = .{ .{ .unsigned_int = .xword }, .any, .any }, |
| 64252 | 64333 | .patterns = &.{ |
| 64253 | | .{ .src = .{ .to_mut_xmm, .none, .none } }, |
| 64334 | .{ .src = .{ .to_mut_sse, .none, .none } }, |
| 64254 | 64335 | }, |
| 64255 | 64336 | .extra_temps = .{ |
| 64256 | 64337 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| ... | ... | @@ -64270,11 +64351,35 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 64270 | 64351 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 64271 | 64352 | .{ ._, .p_, .xor, .dst0x, .lea(.tmp0x), ._, ._ }, |
| 64272 | 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 | } }, |
| 64273 | 64378 | }, .{ |
| 64274 | 64379 | .required_features = .{ .sse, null, null, null }, |
| 64275 | 64380 | .src_constraints = .{ .{ .int = .xword }, .any, .any }, |
| 64276 | 64381 | .patterns = &.{ |
| 64277 | | .{ .src = .{ .to_mut_xmm, .none, .none } }, |
| 64382 | .{ .src = .{ .to_mut_sse, .none, .none } }, |
| 64278 | 64383 | }, |
| 64279 | 64384 | .extra_temps = .{ |
| 64280 | 64385 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| ... | ... | @@ -64294,12 +64399,24 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 64294 | 64399 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 64295 | 64400 | .{ ._, ._ps, .xor, .dst0x, .lea(.tmp0x), ._, ._ }, |
| 64296 | 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 | } }, |
| 64297 | 64414 | }, .{ |
| 64298 | 64415 | .required_features = .{ .avx2, null, null, null }, |
| 64299 | 64416 | .src_constraints = .{ .{ .signed_or_exact_int = .yword }, .any, .any }, |
| 64300 | 64417 | .patterns = &.{ |
| 64301 | 64418 | .{ .src = .{ .mem, .none, .none } }, |
| 64302 | | .{ .src = .{ .to_ymm, .none, .none } }, |
| 64419 | .{ .src = .{ .to_sse, .none, .none } }, |
| 64303 | 64420 | }, |
| 64304 | 64421 | .dst_temps = .{ .{ .rc = .sse }, .unused }, |
| 64305 | 64422 | .each = .{ .once = &.{ |
| ... | ... | @@ -64310,7 +64427,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 64310 | 64427 | .required_features = .{ .avx2, null, null, null }, |
| 64311 | 64428 | .src_constraints = .{ .{ .unsigned_int = .yword }, .any, .any }, |
| 64312 | 64429 | .patterns = &.{ |
| 64313 | | .{ .src = .{ .to_ymm, .none, .none } }, |
| 64430 | .{ .src = .{ .to_sse, .none, .none } }, |
| 64314 | 64431 | }, |
| 64315 | 64432 | .extra_temps = .{ |
| 64316 | 64433 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| ... | ... | @@ -64330,12 +64447,24 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 64330 | 64447 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 64331 | 64448 | .{ ._, .vp_, .xor, .dst0y, .src0y, .lea(.tmp0y), ._ }, |
| 64332 | 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 | } }, |
| 64333 | 64462 | }, .{ |
| 64334 | 64463 | .required_features = .{ .avx, null, null, null }, |
| 64335 | 64464 | .src_constraints = .{ .{ .signed_or_exact_int = .yword }, .any, .any }, |
| 64336 | 64465 | .patterns = &.{ |
| 64337 | 64466 | .{ .src = .{ .mem, .none, .none } }, |
| 64338 | | .{ .src = .{ .to_ymm, .none, .none } }, |
| 64467 | .{ .src = .{ .to_sse, .none, .none } }, |
| 64339 | 64468 | }, |
| 64340 | 64469 | .dst_temps = .{ .{ .rc = .sse }, .unused }, |
| 64341 | 64470 | .each = .{ .once = &.{ |
| ... | ... | @@ -64346,7 +64475,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 64346 | 64475 | .required_features = .{ .avx, null, null, null }, |
| 64347 | 64476 | .src_constraints = .{ .{ .unsigned_int = .yword }, .any, .any }, |
| 64348 | 64477 | .patterns = &.{ |
| 64349 | | .{ .src = .{ .to_ymm, .none, .none } }, |
| 64478 | .{ .src = .{ .to_sse, .none, .none } }, |
| 64350 | 64479 | }, |
| 64351 | 64480 | .extra_temps = .{ |
| 64352 | 64481 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| ... | ... | @@ -64366,6 +64495,37 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 64366 | 64495 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 64367 | 64496 | .{ ._, .v_pd, .xor, .dst0y, .src0y, .lea(.tmp0y), ._ }, |
| 64368 | 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 | } }, |
| 64369 | 64529 | }, .{ |
| 64370 | 64530 | .required_features = .{ .avx2, null, null, null }, |
| 64371 | 64531 | .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .yword, .is = .xword } }, .any, .any }, |
| ... | ... | @@ -64397,6 +64557,35 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 64397 | 64557 | .{ .@"0:", .vp_, .xor, .tmp2x, .tmp1x, .memad(.src0x, .add_size, -16), ._ }, |
| 64398 | 64558 | .{ ._, .v_dqa, .mov, .memad(.dst0x, .add_size, -16), .tmp2x, ._, ._ }, |
| 64399 | 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 | } }, |
| 64400 | 64589 | }, .{ |
| 64401 | 64590 | .required_features = .{ .avx2, null, null, null }, |
| 64402 | 64591 | .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .yword, .is = .yword } }, .any, .any }, |
| ... | ... | @@ -64426,6 +64615,37 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 64426 | 64615 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 64427 | 64616 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 64428 | 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 | } }, |
| 64429 | 64649 | }, .{ |
| 64430 | 64650 | .required_features = .{ .avx, null, null, null }, |
| 64431 | 64651 | .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .yword, .is = .xword } }, .any, .any }, |
| ... | ... | @@ -64457,6 +64677,35 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 64457 | 64677 | .{ .@"0:", .v_pd, .xor, .tmp2x, .tmp1x, .memad(.src0x, .add_size, -16), ._ }, |
| 64458 | 64678 | .{ ._, .v_pd, .mova, .memad(.dst0x, .add_size, -16), .tmp2x, ._, ._ }, |
| 64459 | 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 | } }, |
| 64460 | 64709 | }, .{ |
| 64461 | 64710 | .required_features = .{ .avx, null, null, null }, |
| 64462 | 64711 | .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .yword, .is = .yword } }, .any, .any }, |
| ... | ... | @@ -64486,6 +64735,35 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 64486 | 64735 | .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, |
| 64487 | 64736 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 64488 | 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 | } }, |
| 64489 | 64767 | }, .{ |
| 64490 | 64768 | .required_features = .{ .avx, null, null, null }, |
| 64491 | 64769 | .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .xword, .is = .xword } }, .any, .any }, |
| ... | ... | @@ -64515,6 +64793,36 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 64515 | 64793 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 64516 | 64794 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 64517 | 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 | } }, |
| 64518 | 64826 | }, .{ |
| 64519 | 64827 | .required_features = .{ .sse2, null, null, null }, |
| 64520 | 64828 | .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .xword, .is = .xword } }, .any, .any }, |
| ... | ... | @@ -64545,6 +64853,34 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 64545 | 64853 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 64546 | 64854 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 64547 | 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 | } }, |
| 64548 | 64884 | }, .{ |
| 64549 | 64885 | .required_features = .{ .@"64bit", null, null, null }, |
| 64550 | 64886 | .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .xword, .is = .xword } }, .any, .any }, |
| ... | ... | @@ -64573,6 +64909,35 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 64573 | 64909 | .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, |
| 64574 | 64910 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 64575 | 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 | } }, |
| 64576 | 64941 | }, .{ |
| 64577 | 64942 | .required_features = .{ .@"64bit", null, null, null }, |
| 64578 | 64943 | .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .xword, .is = .xword } }, .any, .any }, |
| ... | ... | @@ -65038,7 +65403,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 65038 | 65403 | .src_constraints = .{ .{ .signed_int_or_full_vec = .qword }, .any, .any }, |
| 65039 | 65404 | .patterns = &.{ |
| 65040 | 65405 | .{ .src = .{ .mem, .none, .none } }, |
| 65041 | | .{ .src = .{ .to_mm, .none, .none } }, |
| 65406 | .{ .src = .{ .to_mmx, .none, .none } }, |
| 65042 | 65407 | }, |
| 65043 | 65408 | .dst_temps = .{ .{ .rc = .mmx }, .unused }, |
| 65044 | 65409 | .each = .{ .once = &.{ |
| ... | ... | @@ -65049,7 +65414,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 65049 | 65414 | .required_features = .{ .mmx, null, null, null }, |
| 65050 | 65415 | .src_constraints = .{ .{ .unsigned_int_vec = .qword }, .any, .any }, |
| 65051 | 65416 | .patterns = &.{ |
| 65052 | | .{ .src = .{ .to_mut_mm, .none, .none } }, |
| 65417 | .{ .src = .{ .to_mut_mmx, .none, .none } }, |
| 65053 | 65418 | }, |
| 65054 | 65419 | .extra_temps = .{ |
| 65055 | 65420 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| ... | ... | @@ -65074,7 +65439,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 65074 | 65439 | .src_constraints = .{ .{ .signed_int_or_full_vec = .xword }, .any, .any }, |
| 65075 | 65440 | .patterns = &.{ |
| 65076 | 65441 | .{ .src = .{ .mem, .none, .none } }, |
| 65077 | | .{ .src = .{ .to_xmm, .none, .none } }, |
| 65442 | .{ .src = .{ .to_sse, .none, .none } }, |
| 65078 | 65443 | }, |
| 65079 | 65444 | .dst_temps = .{ .{ .rc = .sse }, .unused }, |
| 65080 | 65445 | .each = .{ .once = &.{ |
| ... | ... | @@ -65085,7 +65450,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 65085 | 65450 | .required_features = .{ .avx, null, null, null }, |
| 65086 | 65451 | .src_constraints = .{ .{ .unsigned_int_vec = .xword }, .any, .any }, |
| 65087 | 65452 | .patterns = &.{ |
| 65088 | | .{ .src = .{ .to_xmm, .none, .none } }, |
| 65453 | .{ .src = .{ .to_sse, .none, .none } }, |
| 65089 | 65454 | }, |
| 65090 | 65455 | .extra_temps = .{ |
| 65091 | 65456 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| ... | ... | @@ -65110,7 +65475,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 65110 | 65475 | .src_constraints = .{ .{ .signed_int_or_full_vec = .xword }, .any, .any }, |
| 65111 | 65476 | .patterns = &.{ |
| 65112 | 65477 | .{ .src = .{ .mem, .none, .none } }, |
| 65113 | | .{ .src = .{ .to_xmm, .none, .none } }, |
| 65478 | .{ .src = .{ .to_sse, .none, .none } }, |
| 65114 | 65479 | }, |
| 65115 | 65480 | .dst_temps = .{ .{ .rc = .sse }, .unused }, |
| 65116 | 65481 | .each = .{ .once = &.{ |
| ... | ... | @@ -65121,7 +65486,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 65121 | 65486 | .required_features = .{ .sse2, null, null, null }, |
| 65122 | 65487 | .src_constraints = .{ .{ .unsigned_int_vec = .xword }, .any, .any }, |
| 65123 | 65488 | .patterns = &.{ |
| 65124 | | .{ .src = .{ .to_mut_xmm, .none, .none } }, |
| 65489 | .{ .src = .{ .to_mut_sse, .none, .none } }, |
| 65125 | 65490 | }, |
| 65126 | 65491 | .extra_temps = .{ |
| 65127 | 65492 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| ... | ... | @@ -65145,7 +65510,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 65145 | 65510 | .required_features = .{ .sse, null, null, null }, |
| 65146 | 65511 | .src_constraints = .{ .{ .unsigned_int_vec = .xword }, .any, .any }, |
| 65147 | 65512 | .patterns = &.{ |
| 65148 | | .{ .src = .{ .to_mut_xmm, .none, .none } }, |
| 65513 | .{ .src = .{ .to_mut_sse, .none, .none } }, |
| 65149 | 65514 | }, |
| 65150 | 65515 | .extra_temps = .{ |
| 65151 | 65516 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| ... | ... | @@ -65170,7 +65535,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 65170 | 65535 | .src_constraints = .{ .{ .signed_int_or_full_vec = .yword }, .any, .any }, |
| 65171 | 65536 | .patterns = &.{ |
| 65172 | 65537 | .{ .src = .{ .mem, .none, .none } }, |
| 65173 | | .{ .src = .{ .to_ymm, .none, .none } }, |
| 65538 | .{ .src = .{ .to_sse, .none, .none } }, |
| 65174 | 65539 | }, |
| 65175 | 65540 | .dst_temps = .{ .{ .rc = .sse }, .unused }, |
| 65176 | 65541 | .each = .{ .once = &.{ |
| ... | ... | @@ -65181,7 +65546,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 65181 | 65546 | .required_features = .{ .avx2, null, null, null }, |
| 65182 | 65547 | .src_constraints = .{ .{ .unsigned_int_vec = .yword }, .any, .any }, |
| 65183 | 65548 | .patterns = &.{ |
| 65184 | | .{ .src = .{ .to_ymm, .none, .none } }, |
| 65549 | .{ .src = .{ .to_sse, .none, .none } }, |
| 65185 | 65550 | }, |
| 65186 | 65551 | .extra_temps = .{ |
| 65187 | 65552 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| ... | ... | @@ -65206,7 +65571,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 65206 | 65571 | .src_constraints = .{ .{ .signed_int_or_full_vec = .yword }, .any, .any }, |
| 65207 | 65572 | .patterns = &.{ |
| 65208 | 65573 | .{ .src = .{ .mem, .none, .none } }, |
| 65209 | | .{ .src = .{ .to_ymm, .none, .none } }, |
| 65574 | .{ .src = .{ .to_sse, .none, .none } }, |
| 65210 | 65575 | }, |
| 65211 | 65576 | .dst_temps = .{ .{ .rc = .sse }, .unused }, |
| 65212 | 65577 | .each = .{ .once = &.{ |
| ... | ... | @@ -65217,7 +65582,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 65217 | 65582 | .required_features = .{ .avx, null, null, null }, |
| 65218 | 65583 | .src_constraints = .{ .{ .unsigned_int_vec = .yword }, .any, .any }, |
| 65219 | 65584 | .patterns = &.{ |
| 65220 | | .{ .src = .{ .to_ymm, .none, .none } }, |
| 65585 | .{ .src = .{ .to_sse, .none, .none } }, |
| 65221 | 65586 | }, |
| 65222 | 65587 | .extra_temps = .{ |
| 65223 | 65588 | .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, |
| ... | ... | @@ -65237,6 +65602,118 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 65237 | 65602 | .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, |
| 65238 | 65603 | .{ ._, .v_pd, .xor, .dst0y, .src0y, .lea(.tmp0y), ._ }, |
| 65239 | 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 | } }, |
| 65240 | 65717 | }, .{ |
| 65241 | 65718 | .required_features = .{ .@"64bit", null, null, null }, |
| 65242 | 65719 | .patterns = &.{ |
| ... | ... | @@ -65257,14 +65734,94 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 65257 | 65734 | }, |
| 65258 | 65735 | .dst_temps = .{ .mem, .unused }, |
| 65259 | 65736 | .each = .{ .once = &.{ |
| 65260 | | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, |
| 65737 | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_unaligned_size_up_8), ._, ._ }, |
| 65261 | 65738 | .{ ._, ._, .lea, .tmp1p, .mem(.tmp3), ._, ._ }, |
| 65262 | 65739 | .{ .@"0:", ._, .mov, .tmp2q, .memi(.src0q, .tmp0), ._, ._ }, |
| 65263 | 65740 | .{ ._, ._, .xor, .tmp2q, .leai(.tmp1q, .tmp0), ._, ._ }, |
| 65264 | 65741 | .{ ._, ._, .mov, .memi(.dst0q, .tmp0), .tmp2q, ._, ._ }, |
| 65265 | | .{ ._, ._, .lea, .tmp0d, .lead(.tmp0, 8), ._, ._ }, |
| 65266 | | .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_unaligned_size), ._, ._ }, |
| 65267 | | .{ ._, ._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", ._, ._, ._ }, |
| 65268 | 65825 | } }, |
| 65269 | 65826 | }, .{ |
| 65270 | 65827 | .patterns = &.{ |
| ... | ... | @@ -65285,14 +65842,13 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 65285 | 65842 | }, |
| 65286 | 65843 | .dst_temps = .{ .mem, .unused }, |
| 65287 | 65844 | .each = .{ .once = &.{ |
| 65288 | | .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, |
| 65845 | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_unaligned_size_up_8), ._, ._ }, |
| 65289 | 65846 | .{ ._, ._, .lea, .tmp1p, .mem(.tmp3), ._, ._ }, |
| 65290 | 65847 | .{ .@"0:", ._, .mov, .tmp2d, .memi(.src0d, .tmp0), ._, ._ }, |
| 65291 | 65848 | .{ ._, ._, .xor, .tmp2d, .leai(.tmp1d, .tmp0), ._, ._ }, |
| 65292 | 65849 | .{ ._, ._, .mov, .memi(.dst0d, .tmp0), .tmp2d, ._, ._ }, |
| 65293 | | .{ ._, ._, .lea, .tmp0d, .lead(.tmp0, 4), ._, ._ }, |
| 65294 | | .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_unaligned_size), ._, ._ }, |
| 65295 | | .{ ._, ._b, .j, .@"0b", ._, ._, ._ }, |
| 65850 | .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ }, |
| 65851 | .{ ._, ._ae, .j, .@"0b", ._, ._, ._ }, |
| 65296 | 65852 | } }, |
| 65297 | 65853 | } }) catch |err| switch (err) { |
| 65298 | 65854 | error.SelectFailed => return cg.fail("failed to select {s} {f} {f}", .{ |
| ... | ... | @@ -75367,7 +75923,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 75367 | 75923 | .src_constraints = .{ .{ .scalar_int = .{ .of = .qword, .is = .byte } }, .any, .any }, |
| 75368 | 75924 | .patterns = &.{ |
| 75369 | 75925 | .{ .src = .{ .mem, .none, .none } }, |
| 75370 | | .{ .src = .{ .to_mm, .none, .none } }, |
| 75926 | .{ .src = .{ .to_mmx, .none, .none } }, |
| 75371 | 75927 | }, |
| 75372 | 75928 | .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .mmx } }, .unused }, |
| 75373 | 75929 | .each = .{ .once = &.{ |
| ... | ... | @@ -75378,7 +75934,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 75378 | 75934 | .src_constraints = .{ .{ .scalar_int = .{ .of = .qword, .is = .word } }, .any, .any }, |
| 75379 | 75935 | .patterns = &.{ |
| 75380 | 75936 | .{ .src = .{ .mem, .none, .none } }, |
| 75381 | | .{ .src = .{ .to_mm, .none, .none } }, |
| 75937 | .{ .src = .{ .to_mmx, .none, .none } }, |
| 75382 | 75938 | }, |
| 75383 | 75939 | .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .mmx } }, .unused }, |
| 75384 | 75940 | .each = .{ .once = &.{ |
| ... | ... | @@ -75389,7 +75945,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 75389 | 75945 | .src_constraints = .{ .{ .scalar_int = .{ .of = .qword, .is = .dword } }, .any, .any }, |
| 75390 | 75946 | .patterns = &.{ |
| 75391 | 75947 | .{ .src = .{ .mem, .none, .none } }, |
| 75392 | | .{ .src = .{ .to_mm, .none, .none } }, |
| 75948 | .{ .src = .{ .to_mmx, .none, .none } }, |
| 75393 | 75949 | }, |
| 75394 | 75950 | .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .mmx } }, .unused }, |
| 75395 | 75951 | .each = .{ .once = &.{ |
| ... | ... | @@ -112415,7 +112971,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 112415 | 112971 | .dst_temps = .{ .mem, .unused }, |
| 112416 | 112972 | .clobbers = .{ .eflags = true }, |
| 112417 | 112973 | .each = .{ .once = &.{ |
| 112418 | | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ }, |
| 112974 | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_unaligned_size_up_8), ._, ._ }, |
| 112419 | 112975 | .{ .@"0:", .vp_d, .movsxb, .tmp1y, .memi(.src0q, .tmp0), ._, ._ }, |
| 112420 | 112976 | .{ ._, .v_ps, .cvtdq2, .tmp1y, .tmp1y, ._, ._ }, |
| 112421 | 112977 | .{ ._, .v_, .cvtps2ph, .memsi(.dst0x, .@"2", .tmp0), .tmp1y, .rm(.{}), ._ }, |
| ... | ... | @@ -112445,7 +113001,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 112445 | 113001 | .dst_temps = .{ .mem, .unused }, |
| 112446 | 113002 | .clobbers = .{ .eflags = true }, |
| 112447 | 113003 | .each = .{ .once = &.{ |
| 112448 | | .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_size), ._, ._ }, |
| 113004 | .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_unaligned_size_up_4), ._, ._ }, |
| 112449 | 113005 | .{ .@"0:", .vp_d, .movsxb, .tmp1x, .memi(.src0d, .tmp0), ._, ._ }, |
| 112450 | 113006 | .{ ._, .v_ps, .cvtdq2, .tmp1x, .tmp1x, ._, ._ }, |
| 112451 | 113007 | .{ ._, .v_, .cvtps2ph, .memsi(.dst0q, .@"2", .tmp0), .tmp1x, .rm(.{}), ._ }, |
| ... | ... | @@ -112475,7 +113031,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 112475 | 113031 | .dst_temps = .{ .mem, .unused }, |
| 112476 | 113032 | .clobbers = .{ .eflags = true }, |
| 112477 | 113033 | .each = .{ .once = &.{ |
| 112478 | | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ }, |
| 113034 | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_unaligned_size_up_8), ._, ._ }, |
| 112479 | 113035 | .{ .@"0:", .vp_d, .movzxb, .tmp1y, .memi(.src0q, .tmp0), ._, ._ }, |
| 112480 | 113036 | .{ ._, .v_ps, .cvtdq2, .tmp1y, .tmp1y, ._, ._ }, |
| 112481 | 113037 | .{ ._, .v_, .cvtps2ph, .memsi(.dst0x, .@"2", .tmp0), .tmp1y, .rm(.{}), ._ }, |
| ... | ... | @@ -112505,7 +113061,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 112505 | 113061 | .dst_temps = .{ .mem, .unused }, |
| 112506 | 113062 | .clobbers = .{ .eflags = true }, |
| 112507 | 113063 | .each = .{ .once = &.{ |
| 112508 | | .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_size), ._, ._ }, |
| 113064 | .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_unaligned_size_up_4), ._, ._ }, |
| 112509 | 113065 | .{ .@"0:", .vp_d, .movzxb, .tmp1x, .memi(.src0d, .tmp0), ._, ._ }, |
| 112510 | 113066 | .{ ._, .v_ps, .cvtdq2, .tmp1x, .tmp1x, ._, ._ }, |
| 112511 | 113067 | .{ ._, .v_, .cvtps2ph, .memsi(.dst0q, .@"2", .tmp0), .tmp1x, .rm(.{}), ._ }, |
| ... | ... | @@ -113099,7 +113655,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 113099 | 113655 | .dst_temps = .{ .mem, .unused }, |
| 113100 | 113656 | .clobbers = .{ .eflags = true }, |
| 113101 | 113657 | .each = .{ .once = &.{ |
| 113102 | | .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ }, |
| 113658 | .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_unaligned_size_up_16), ._, ._ }, |
| 113103 | 113659 | .{ .@"0:", .vp_d, .movsxw, .tmp1y, .memi(.src0x, .tmp0), ._, ._ }, |
| 113104 | 113660 | .{ ._, .v_ps, .cvtdq2, .tmp1y, .tmp1y, ._, ._ }, |
| 113105 | 113661 | .{ ._, .v_, .cvtps2ph, .memi(.dst0x, .tmp0), .tmp1y, .rm(.{}), ._ }, |
| ... | ... | @@ -113129,7 +113685,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 113129 | 113685 | .dst_temps = .{ .mem, .unused }, |
| 113130 | 113686 | .clobbers = .{ .eflags = true }, |
| 113131 | 113687 | .each = .{ .once = &.{ |
| 113132 | | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ }, |
| 113688 | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_unaligned_size_up_8), ._, ._ }, |
| 113133 | 113689 | .{ .@"0:", .vp_d, .movsxw, .tmp1x, .memi(.src0q, .tmp0), ._, ._ }, |
| 113134 | 113690 | .{ ._, .v_ps, .cvtdq2, .tmp1x, .tmp1x, ._, ._ }, |
| 113135 | 113691 | .{ ._, .v_, .cvtps2ph, .memi(.dst0q, .tmp0), .tmp1x, .rm(.{}), ._ }, |
| ... | ... | @@ -113159,7 +113715,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 113159 | 113715 | .dst_temps = .{ .mem, .unused }, |
| 113160 | 113716 | .clobbers = .{ .eflags = true }, |
| 113161 | 113717 | .each = .{ .once = &.{ |
| 113162 | | .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ }, |
| 113718 | .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_unaligned_size_up_16), ._, ._ }, |
| 113163 | 113719 | .{ .@"0:", .vp_d, .movzxw, .tmp1y, .memi(.src0x, .tmp0), ._, ._ }, |
| 113164 | 113720 | .{ ._, .v_ps, .cvtdq2, .tmp1y, .tmp1y, ._, ._ }, |
| 113165 | 113721 | .{ ._, .v_, .cvtps2ph, .memi(.dst0x, .tmp0), .tmp1y, .rm(.{}), ._ }, |
| ... | ... | @@ -113189,7 +113745,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 113189 | 113745 | .dst_temps = .{ .mem, .unused }, |
| 113190 | 113746 | .clobbers = .{ .eflags = true }, |
| 113191 | 113747 | .each = .{ .once = &.{ |
| 113192 | | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ }, |
| 113748 | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_unaligned_size_up_8), ._, ._ }, |
| 113193 | 113749 | .{ .@"0:", .vp_d, .movzxw, .tmp1x, .memi(.src0q, .tmp0), ._, ._ }, |
| 113194 | 113750 | .{ ._, .v_ps, .cvtdq2, .tmp1x, .tmp1x, ._, ._ }, |
| 113195 | 113751 | .{ ._, .v_, .cvtps2ph, .memi(.dst0q, .tmp0), .tmp1x, .rm(.{}), ._ }, |
| ... | ... | @@ -113499,7 +114055,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 113499 | 114055 | .dst_temps = .{ .mem, .unused }, |
| 113500 | 114056 | .clobbers = .{ .eflags = true }, |
| 113501 | 114057 | .each = .{ .once = &.{ |
| 113502 | | .{ ._, ._, .mov, .tmp0d, .sia(-16, .dst0, .add_size), ._, ._ }, |
| 114058 | .{ ._, ._, .mov, .tmp0d, .sia(-16, .dst0, .add_unaligned_size_up_16), ._, ._ }, |
| 113503 | 114059 | .{ .@"0:", .v_ps, .cvtdq2, .tmp1y, .memsi(.src0y, .@"2", .tmp0), ._, ._ }, |
| 113504 | 114060 | .{ ._, .v_, .cvtps2ph, .memi(.dst0x, .tmp0), .tmp1y, .rm(.{}), ._ }, |
| 113505 | 114061 | .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ }, |
| ... | ... | @@ -113528,7 +114084,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 113528 | 114084 | .dst_temps = .{ .mem, .unused }, |
| 113529 | 114085 | .clobbers = .{ .eflags = true }, |
| 113530 | 114086 | .each = .{ .once = &.{ |
| 113531 | | .{ ._, ._, .mov, .tmp0d, .sia(-8, .dst0, .add_size), ._, ._ }, |
| 114087 | .{ ._, ._, .mov, .tmp0d, .sia(-8, .dst0, .add_unaligned_size_up_8), ._, ._ }, |
| 113532 | 114088 | .{ .@"0:", .v_ps, .cvtdq2, .tmp1x, .memsi(.src0x, .@"2", .tmp0), ._, ._ }, |
| 113533 | 114089 | .{ ._, .v_, .cvtps2ph, .memi(.dst0q, .tmp0), .tmp1x, .rm(.{}), ._ }, |
| 113534 | 114090 | .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ }, |
| ... | ... | @@ -115542,7 +116098,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 115542 | 116098 | .dst_temps = .{ .mem, .unused }, |
| 115543 | 116099 | .clobbers = .{ .eflags = true }, |
| 115544 | 116100 | .each = .{ .once = &.{ |
| 115545 | | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ }, |
| 116101 | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_unaligned_size_up_8), ._, ._ }, |
| 115546 | 116102 | .{ .@"0:", .vp_d, .movsxb, .tmp1y, .memi(.src0q, .tmp0), ._, ._ }, |
| 115547 | 116103 | .{ ._, .v_ps, .cvtdq2, .tmp1y, .tmp1y, ._, ._ }, |
| 115548 | 116104 | .{ ._, .v_ps, .mova, .memsi(.dst0y, .@"4", .tmp0), .tmp1y, ._, ._ }, |
| ... | ... | @@ -115572,7 +116128,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 115572 | 116128 | .dst_temps = .{ .mem, .unused }, |
| 115573 | 116129 | .clobbers = .{ .eflags = true }, |
| 115574 | 116130 | .each = .{ .once = &.{ |
| 115575 | | .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_size), ._, ._ }, |
| 116131 | .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_unaligned_size_up_4), ._, ._ }, |
| 115576 | 116132 | .{ .@"0:", .vp_d, .movsxb, .tmp1x, .memi(.src0d, .tmp0), ._, ._ }, |
| 115577 | 116133 | .{ ._, .v_ps, .cvtdq2, .tmp1x, .tmp1x, ._, ._ }, |
| 115578 | 116134 | .{ ._, .v_ps, .mova, .memsi(.dst0x, .@"4", .tmp0), .tmp1x, ._, ._ }, |
| ... | ... | @@ -115602,7 +116158,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 115602 | 116158 | .dst_temps = .{ .mem, .unused }, |
| 115603 | 116159 | .clobbers = .{ .eflags = true }, |
| 115604 | 116160 | .each = .{ .once = &.{ |
| 115605 | | .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_size), ._, ._ }, |
| 116161 | .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_unaligned_size_up_4), ._, ._ }, |
| 115606 | 116162 | .{ .@"0:", .p_d, .movsxb, .tmp1x, .memi(.src0d, .tmp0), ._, ._ }, |
| 115607 | 116163 | .{ ._, ._ps, .cvtdq2, .tmp1x, .tmp1x, ._, ._ }, |
| 115608 | 116164 | .{ ._, ._ps, .mova, .memsi(.dst0x, .@"4", .tmp0), .tmp1x, ._, ._ }, |
| ... | ... | @@ -115632,7 +116188,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 115632 | 116188 | .dst_temps = .{ .mem, .unused }, |
| 115633 | 116189 | .clobbers = .{ .eflags = true }, |
| 115634 | 116190 | .each = .{ .once = &.{ |
| 115635 | | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ }, |
| 116191 | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_unaligned_size_up_8), ._, ._ }, |
| 115636 | 116192 | .{ .@"0:", .vp_d, .movzxb, .tmp1y, .memi(.src0q, .tmp0), ._, ._ }, |
| 115637 | 116193 | .{ ._, .v_ps, .cvtdq2, .tmp1y, .tmp1y, ._, ._ }, |
| 115638 | 116194 | .{ ._, .v_ps, .mova, .memsi(.dst0y, .@"4", .tmp0), .tmp1y, ._, ._ }, |
| ... | ... | @@ -115662,7 +116218,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 115662 | 116218 | .dst_temps = .{ .mem, .unused }, |
| 115663 | 116219 | .clobbers = .{ .eflags = true }, |
| 115664 | 116220 | .each = .{ .once = &.{ |
| 115665 | | .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_size), ._, ._ }, |
| 116221 | .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_unaligned_size_up_4), ._, ._ }, |
| 115666 | 116222 | .{ .@"0:", .vp_d, .movzxb, .tmp1x, .memi(.src0d, .tmp0), ._, ._ }, |
| 115667 | 116223 | .{ ._, .v_ps, .cvtdq2, .tmp1x, .tmp1x, ._, ._ }, |
| 115668 | 116224 | .{ ._, .v_ps, .mova, .memsi(.dst0x, .@"4", .tmp0), .tmp1x, ._, ._ }, |
| ... | ... | @@ -115692,7 +116248,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 115692 | 116248 | .dst_temps = .{ .mem, .unused }, |
| 115693 | 116249 | .clobbers = .{ .eflags = true }, |
| 115694 | 116250 | .each = .{ .once = &.{ |
| 115695 | | .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_size), ._, ._ }, |
| 116251 | .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_unaligned_size_up_4), ._, ._ }, |
| 115696 | 116252 | .{ .@"0:", .p_d, .movzxb, .tmp1x, .memi(.src0d, .tmp0), ._, ._ }, |
| 115697 | 116253 | .{ ._, ._ps, .cvtdq2, .tmp1x, .tmp1x, ._, ._ }, |
| 115698 | 116254 | .{ ._, ._ps, .mova, .memsi(.dst0x, .@"4", .tmp0), .tmp1x, ._, ._ }, |
| ... | ... | @@ -116048,7 +116604,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 116048 | 116604 | .dst_temps = .{ .mem, .unused }, |
| 116049 | 116605 | .clobbers = .{ .eflags = true }, |
| 116050 | 116606 | .each = .{ .once = &.{ |
| 116051 | | .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ }, |
| 116607 | .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_unaligned_size_up_16), ._, ._ }, |
| 116052 | 116608 | .{ .@"0:", .vp_d, .movsxw, .tmp1y, .memi(.src0x, .tmp0), ._, ._ }, |
| 116053 | 116609 | .{ ._, .v_ps, .cvtdq2, .tmp1y, .tmp1y, ._, ._ }, |
| 116054 | 116610 | .{ ._, .v_ps, .mova, .memsi(.dst0y, .@"2", .tmp0), .tmp1y, ._, ._ }, |
| ... | ... | @@ -116078,7 +116634,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 116078 | 116634 | .dst_temps = .{ .mem, .unused }, |
| 116079 | 116635 | .clobbers = .{ .eflags = true }, |
| 116080 | 116636 | .each = .{ .once = &.{ |
| 116081 | | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ }, |
| 116637 | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_unaligned_size_up_8), ._, ._ }, |
| 116082 | 116638 | .{ .@"0:", .vp_d, .movsxw, .tmp1x, .memi(.src0q, .tmp0), ._, ._ }, |
| 116083 | 116639 | .{ ._, .v_ps, .cvtdq2, .tmp1x, .tmp1x, ._, ._ }, |
| 116084 | 116640 | .{ ._, .v_ps, .mova, .memsi(.dst0x, .@"2", .tmp0), .tmp1x, ._, ._ }, |
| ... | ... | @@ -116108,7 +116664,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 116108 | 116664 | .dst_temps = .{ .mem, .unused }, |
| 116109 | 116665 | .clobbers = .{ .eflags = true }, |
| 116110 | 116666 | .each = .{ .once = &.{ |
| 116111 | | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ }, |
| 116667 | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_unaligned_size_up_8), ._, ._ }, |
| 116112 | 116668 | .{ .@"0:", .p_d, .movsxw, .tmp1x, .memi(.src0q, .tmp0), ._, ._ }, |
| 116113 | 116669 | .{ ._, ._ps, .cvtdq2, .tmp1x, .tmp1x, ._, ._ }, |
| 116114 | 116670 | .{ ._, ._ps, .mova, .memsi(.dst0x, .@"2", .tmp0), .tmp1x, ._, ._ }, |
| ... | ... | @@ -116138,7 +116694,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 116138 | 116694 | .dst_temps = .{ .mem, .unused }, |
| 116139 | 116695 | .clobbers = .{ .eflags = true }, |
| 116140 | 116696 | .each = .{ .once = &.{ |
| 116141 | | .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ }, |
| 116697 | .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_unaligned_size_up_16), ._, ._ }, |
| 116142 | 116698 | .{ .@"0:", .vp_d, .movzxw, .tmp1y, .memi(.src0x, .tmp0), ._, ._ }, |
| 116143 | 116699 | .{ ._, .v_ps, .cvtdq2, .tmp1y, .tmp1y, ._, ._ }, |
| 116144 | 116700 | .{ ._, .v_ps, .mova, .memsi(.dst0y, .@"2", .tmp0), .tmp1y, ._, ._ }, |
| ... | ... | @@ -116168,7 +116724,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 116168 | 116724 | .dst_temps = .{ .mem, .unused }, |
| 116169 | 116725 | .clobbers = .{ .eflags = true }, |
| 116170 | 116726 | .each = .{ .once = &.{ |
| 116171 | | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ }, |
| 116727 | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_unaligned_size_up_8), ._, ._ }, |
| 116172 | 116728 | .{ .@"0:", .vp_d, .movzxw, .tmp1x, .memi(.src0q, .tmp0), ._, ._ }, |
| 116173 | 116729 | .{ ._, .v_ps, .cvtdq2, .tmp1x, .tmp1x, ._, ._ }, |
| 116174 | 116730 | .{ ._, .v_ps, .mova, .memsi(.dst0x, .@"2", .tmp0), .tmp1x, ._, ._ }, |
| ... | ... | @@ -116198,7 +116754,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 116198 | 116754 | .dst_temps = .{ .mem, .unused }, |
| 116199 | 116755 | .clobbers = .{ .eflags = true }, |
| 116200 | 116756 | .each = .{ .once = &.{ |
| 116201 | | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ }, |
| 116757 | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_unaligned_size_up_8), ._, ._ }, |
| 116202 | 116758 | .{ .@"0:", .p_d, .movzxw, .tmp1x, .memi(.src0q, .tmp0), ._, ._ }, |
| 116203 | 116759 | .{ ._, ._ps, .cvtdq2, .tmp1x, .tmp1x, ._, ._ }, |
| 116204 | 116760 | .{ ._, ._ps, .mova, .memsi(.dst0x, .@"2", .tmp0), .tmp1x, ._, ._ }, |
| ... | ... | @@ -116388,7 +116944,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 116388 | 116944 | .dst_temps = .{ .mem, .unused }, |
| 116389 | 116945 | .clobbers = .{ .eflags = true }, |
| 116390 | 116946 | .each = .{ .once = &.{ |
| 116391 | | .{ ._, ._, .mov, .tmp0d, .sia(-32, .src0, .add_size), ._, ._ }, |
| 116947 | .{ ._, ._, .mov, .tmp0d, .sia(-32, .src0, .add_unaligned_size_up_32), ._, ._ }, |
| 116392 | 116948 | .{ .@"0:", .v_ps, .cvtdq2, .tmp1y, .memi(.src0y, .tmp0), ._, ._ }, |
| 116393 | 116949 | .{ ._, .v_ps, .mova, .memi(.dst0y, .tmp0), .tmp1y, ._, ._ }, |
| 116394 | 116950 | .{ ._, ._, .sub, .tmp0d, .si(32), ._, ._ }, |
| ... | ... | @@ -116417,7 +116973,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 116417 | 116973 | .dst_temps = .{ .mem, .unused }, |
| 116418 | 116974 | .clobbers = .{ .eflags = true }, |
| 116419 | 116975 | .each = .{ .once = &.{ |
| 116420 | | .{ ._, ._, .mov, .tmp0d, .sia(-16, .dst0, .add_size), ._, ._ }, |
| 116976 | .{ ._, ._, .mov, .tmp0d, .sia(-16, .dst0, .add_unaligned_size_up_16), ._, ._ }, |
| 116421 | 116977 | .{ .@"0:", .v_ps, .cvtdq2, .tmp1x, .memi(.src0x, .tmp0), ._, ._ }, |
| 116422 | 116978 | .{ ._, .v_ps, .mova, .memi(.dst0x, .tmp0), .tmp1x, ._, ._ }, |
| 116423 | 116979 | .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ }, |
| ... | ... | @@ -116446,7 +117002,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 116446 | 117002 | .dst_temps = .{ .mem, .unused }, |
| 116447 | 117003 | .clobbers = .{ .eflags = true }, |
| 116448 | 117004 | .each = .{ .once = &.{ |
| 116449 | | .{ ._, ._, .mov, .tmp0d, .sia(-16, .dst0, .add_size), ._, ._ }, |
| 117005 | .{ ._, ._, .mov, .tmp0d, .sia(-16, .dst0, .add_unaligned_size_up_16), ._, ._ }, |
| 116450 | 117006 | .{ .@"0:", ._ps, .cvtdq2, .tmp1x, .memi(.src0x, .tmp0), ._, ._ }, |
| 116451 | 117007 | .{ ._, ._ps, .mova, .memi(.dst0x, .tmp0), .tmp1x, ._, ._ }, |
| 116452 | 117008 | .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ }, |
| ... | ... | @@ -118062,7 +118618,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 118062 | 118618 | .dst_temps = .{ .mem, .unused }, |
| 118063 | 118619 | .clobbers = .{ .eflags = true }, |
| 118064 | 118620 | .each = .{ .once = &.{ |
| 118065 | | .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_size), ._, ._ }, |
| 118621 | .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_unaligned_size_up_4), ._, ._ }, |
| 118066 | 118622 | .{ .@"0:", .vp_d, .movsxb, .tmp1x, .memi(.src0d, .tmp0), ._, ._ }, |
| 118067 | 118623 | .{ ._, .v_pd, .cvtdq2, .tmp1y, .tmp1x, ._, ._ }, |
| 118068 | 118624 | .{ ._, .v_pd, .mova, .memsi(.dst0y, .@"8", .tmp0), .tmp1y, ._, ._ }, |
| ... | ... | @@ -118092,7 +118648,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 118092 | 118648 | .dst_temps = .{ .mem, .unused }, |
| 118093 | 118649 | .clobbers = .{ .eflags = true }, |
| 118094 | 118650 | .each = .{ .once = &.{ |
| 118095 | | .{ ._, ._, .mov, .tmp0d, .sia(-2, .src0, .add_size), ._, ._ }, |
| 118651 | .{ ._, ._, .mov, .tmp0d, .sia(-2, .src0, .add_unaligned_size_up_2), ._, ._ }, |
| 118096 | 118652 | .{ .@"0:", .vp_, .xor, .tmp1x, .tmp1x, .tmp1x, ._ }, |
| 118097 | 118653 | .{ ._, .vp_w, .insr, .tmp1x, .tmp1x, .memi(.src0w, .tmp0), .ui(0) }, |
| 118098 | 118654 | .{ ._, .vp_d, .movsxb, .tmp1x, .tmp1d, ._, ._ }, |
| ... | ... | @@ -118124,7 +118680,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 118124 | 118680 | .dst_temps = .{ .mem, .unused }, |
| 118125 | 118681 | .clobbers = .{ .eflags = true }, |
| 118126 | 118682 | .each = .{ .once = &.{ |
| 118127 | | .{ ._, ._, .mov, .tmp0d, .sia(-2, .src0, .add_size), ._, ._ }, |
| 118683 | .{ ._, ._, .mov, .tmp0d, .sia(-2, .src0, .add_unaligned_size_up_2), ._, ._ }, |
| 118128 | 118684 | .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ }, |
| 118129 | 118685 | .{ ._, .p_w, .insr, .tmp1x, .memi(.src0w, .tmp0), .ui(0), ._ }, |
| 118130 | 118686 | .{ ._, .p_d, .movsxb, .tmp1x, .tmp1d, ._, ._ }, |
| ... | ... | @@ -118156,7 +118712,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 118156 | 118712 | .dst_temps = .{ .mem, .unused }, |
| 118157 | 118713 | .clobbers = .{ .eflags = true }, |
| 118158 | 118714 | .each = .{ .once = &.{ |
| 118159 | | .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_size), ._, ._ }, |
| 118715 | .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_unaligned_size_up_4), ._, ._ }, |
| 118160 | 118716 | .{ .@"0:", .vp_d, .movzxb, .tmp1x, .memi(.src0d, .tmp0), ._, ._ }, |
| 118161 | 118717 | .{ ._, .v_pd, .cvtdq2, .tmp1y, .tmp1x, ._, ._ }, |
| 118162 | 118718 | .{ ._, .v_pd, .mova, .memsi(.dst0y, .@"8", .tmp0), .tmp1y, ._, ._ }, |
| ... | ... | @@ -118186,7 +118742,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 118186 | 118742 | .dst_temps = .{ .mem, .unused }, |
| 118187 | 118743 | .clobbers = .{ .eflags = true }, |
| 118188 | 118744 | .each = .{ .once = &.{ |
| 118189 | | .{ ._, ._, .mov, .tmp0d, .sia(-2, .src0, .add_size), ._, ._ }, |
| 118745 | .{ ._, ._, .mov, .tmp0d, .sia(-2, .src0, .add_unaligned_size_up_2), ._, ._ }, |
| 118190 | 118746 | .{ .@"0:", .vp_, .xor, .tmp1x, .tmp1x, .tmp1x, ._ }, |
| 118191 | 118747 | .{ ._, .vp_w, .insr, .tmp1x, .tmp1x, .memi(.src0w, .tmp0), .ui(0) }, |
| 118192 | 118748 | .{ ._, .vp_d, .movzxb, .tmp1x, .tmp1d, ._, ._ }, |
| ... | ... | @@ -118218,7 +118774,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 118218 | 118774 | .dst_temps = .{ .mem, .unused }, |
| 118219 | 118775 | .clobbers = .{ .eflags = true }, |
| 118220 | 118776 | .each = .{ .once = &.{ |
| 118221 | | .{ ._, ._, .mov, .tmp0d, .sia(-2, .src0, .add_size), ._, ._ }, |
| 118777 | .{ ._, ._, .mov, .tmp0d, .sia(-2, .src0, .add_unaligned_size_up_2), ._, ._ }, |
| 118222 | 118778 | .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ }, |
| 118223 | 118779 | .{ ._, .p_w, .insr, .tmp1x, .memi(.src0w, .tmp0), .ui(0), ._ }, |
| 118224 | 118780 | .{ ._, .p_d, .movzxb, .tmp1x, .tmp1d, ._, ._ }, |
| ... | ... | @@ -118700,7 +119256,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 118700 | 119256 | .dst_temps = .{ .mem, .unused }, |
| 118701 | 119257 | .clobbers = .{ .eflags = true }, |
| 118702 | 119258 | .each = .{ .once = &.{ |
| 118703 | | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ }, |
| 119259 | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_unaligned_size_up_8), ._, ._ }, |
| 118704 | 119260 | .{ .@"0:", .vp_d, .movsxw, .tmp1x, .memi(.src0q, .tmp0), ._, ._ }, |
| 118705 | 119261 | .{ ._, .v_pd, .cvtdq2, .tmp1y, .tmp1x, ._, ._ }, |
| 118706 | 119262 | .{ ._, .v_pd, .mova, .memsi(.dst0y, .@"4", .tmp0), .tmp1y, ._, ._ }, |
| ... | ... | @@ -118730,7 +119286,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 118730 | 119286 | .dst_temps = .{ .mem, .unused }, |
| 118731 | 119287 | .clobbers = .{ .eflags = true }, |
| 118732 | 119288 | .each = .{ .once = &.{ |
| 118733 | | .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_size), ._, ._ }, |
| 119289 | .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_unaligned_size_up_4), ._, ._ }, |
| 118734 | 119290 | .{ .@"0:", .v_d, .mov, .tmp1x, .memi(.src0d, .tmp0), ._, ._ }, |
| 118735 | 119291 | .{ ._, .vp_d, .movsxw, .tmp1x, .tmp1q, ._, ._ }, |
| 118736 | 119292 | .{ ._, .v_pd, .cvtdq2, .tmp1x, .tmp1q, ._, ._ }, |
| ... | ... | @@ -118761,7 +119317,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 118761 | 119317 | .dst_temps = .{ .mem, .unused }, |
| 118762 | 119318 | .clobbers = .{ .eflags = true }, |
| 118763 | 119319 | .each = .{ .once = &.{ |
| 118764 | | .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_size), ._, ._ }, |
| 119320 | .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_unaligned_size_up_4), ._, ._ }, |
| 118765 | 119321 | .{ .@"0:", ._d, .mov, .tmp1x, .memi(.src0d, .tmp0), ._, ._ }, |
| 118766 | 119322 | .{ ._, .p_d, .movsxw, .tmp1x, .tmp1q, ._, ._ }, |
| 118767 | 119323 | .{ ._, ._pd, .cvtdq2, .tmp1x, .tmp1q, ._, ._ }, |
| ... | ... | @@ -118792,7 +119348,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 118792 | 119348 | .dst_temps = .{ .mem, .unused }, |
| 118793 | 119349 | .clobbers = .{ .eflags = true }, |
| 118794 | 119350 | .each = .{ .once = &.{ |
| 118795 | | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ }, |
| 119351 | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_unaligned_size_up_8), ._, ._ }, |
| 118796 | 119352 | .{ .@"0:", .vp_d, .movzxw, .tmp1x, .memi(.src0q, .tmp0), ._, ._ }, |
| 118797 | 119353 | .{ ._, .v_pd, .cvtdq2, .tmp1y, .tmp1x, ._, ._ }, |
| 118798 | 119354 | .{ ._, .v_pd, .mova, .memsi(.dst0y, .@"4", .tmp0), .tmp1y, ._, ._ }, |
| ... | ... | @@ -118822,7 +119378,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 118822 | 119378 | .dst_temps = .{ .mem, .unused }, |
| 118823 | 119379 | .clobbers = .{ .eflags = true }, |
| 118824 | 119380 | .each = .{ .once = &.{ |
| 118825 | | .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_size), ._, ._ }, |
| 119381 | .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_unaligned_size_up_4), ._, ._ }, |
| 118826 | 119382 | .{ .@"0:", .v_d, .mov, .tmp1x, .memi(.src0d, .tmp0), ._, ._ }, |
| 118827 | 119383 | .{ ._, .vp_d, .movzxw, .tmp1x, .tmp1q, ._, ._ }, |
| 118828 | 119384 | .{ ._, .v_pd, .cvtdq2, .tmp1x, .tmp1q, ._, ._ }, |
| ... | ... | @@ -118853,7 +119409,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 118853 | 119409 | .dst_temps = .{ .mem, .unused }, |
| 118854 | 119410 | .clobbers = .{ .eflags = true }, |
| 118855 | 119411 | .each = .{ .once = &.{ |
| 118856 | | .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_size), ._, ._ }, |
| 119412 | .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_unaligned_size_up_4), ._, ._ }, |
| 118857 | 119413 | .{ .@"0:", ._d, .mov, .tmp1x, .memi(.src0d, .tmp0), ._, ._ }, |
| 118858 | 119414 | .{ ._, .p_d, .movzxw, .tmp1x, .tmp1q, ._, ._ }, |
| 118859 | 119415 | .{ ._, ._pd, .cvtdq2, .tmp1x, .tmp1q, ._, ._ }, |
| ... | ... | @@ -119106,7 +119662,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 119106 | 119662 | .dst_temps = .{ .mem, .unused }, |
| 119107 | 119663 | .clobbers = .{ .eflags = true }, |
| 119108 | 119664 | .each = .{ .once = &.{ |
| 119109 | | .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ }, |
| 119665 | .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_unaligned_size_up_16), ._, ._ }, |
| 119110 | 119666 | .{ .@"0:", .v_pd, .cvtdq2, .tmp1y, .memi(.src0x, .tmp0), ._, ._ }, |
| 119111 | 119667 | .{ ._, .v_pd, .mova, .memsi(.dst0y, .@"2", .tmp0), .tmp1y, ._, ._ }, |
| 119112 | 119668 | .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ }, |
| ... | ... | @@ -119135,7 +119691,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 119135 | 119691 | .dst_temps = .{ .mem, .unused }, |
| 119136 | 119692 | .clobbers = .{ .eflags = true }, |
| 119137 | 119693 | .each = .{ .once = &.{ |
| 119138 | | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ }, |
| 119694 | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_unaligned_size_up_8), ._, ._ }, |
| 119139 | 119695 | .{ .@"0:", .v_pd, .cvtdq2, .tmp1x, .memi(.src0q, .tmp0), ._, ._ }, |
| 119140 | 119696 | .{ ._, .v_pd, .mova, .memsi(.dst0x, .@"2", .tmp0), .tmp1x, ._, ._ }, |
| 119141 | 119697 | .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ }, |
| ... | ... | @@ -119164,7 +119720,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 119164 | 119720 | .dst_temps = .{ .mem, .unused }, |
| 119165 | 119721 | .clobbers = .{ .eflags = true }, |
| 119166 | 119722 | .each = .{ .once = &.{ |
| 119167 | | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ }, |
| 119723 | .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_unaligned_size_up_8), ._, ._ }, |
| 119168 | 119724 | .{ .@"0:", ._pd, .cvtdq2, .tmp1x, .memi(.src0q, .tmp0), ._, ._ }, |
| 119169 | 119725 | .{ ._, ._pd, .mova, .memsi(.dst0x, .@"2", .tmp0), .tmp1x, ._, ._ }, |
| 119170 | 119726 | .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ }, |
| ... | ... | @@ -168582,7 +169138,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 168582 | 169138 | .dst_temps = .{ .mem, .unused }, |
| 168583 | 169139 | .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, |
| 168584 | 169140 | .each = .{ .once = &.{ |
| 168585 | | .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .sub_unaligned_size), ._, ._ }, |
| 169141 | .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_unaligned_size), ._, ._ }, |
| 168586 | 169142 | .{ .@"0:", ._ps, .mova, .tmp1x, .memi(.src0x, .tmp0), ._, ._ }, |
| 168587 | 169143 | .{ ._, ._ps, .mova, .tmp2x, .memi(.src1x, .tmp0), ._, ._ }, |
| 168588 | 169144 | .{ ._, ._ps, .mova, .tmp3x, .memi(.src2x, .tmp0), ._, ._ }, |
| ... | ... | @@ -182106,68 +182662,135 @@ fn genSetMem( |
| 182106 | 182662 | } |
| 182107 | 182663 | } |
| 182108 | 182664 | |
| 182109 | | fn genInlineMemcpy(self: *CodeGen, dst_ptr: MCValue, src_ptr: MCValue, len: MCValue, opts: struct { |
| 182665 | fn genInlineMemcpy(cg: *CodeGen, dst_ptr: MCValue, src_ptr: MCValue, len: MCValue, opts: struct { |
| 182110 | 182666 | no_alias: bool, |
| 182111 | 182667 | }) InnerError!void { |
| 182112 | | if (opts.no_alias and dst_ptr.isAddress() and src_ptr.isAddress()) switch (len) { |
| 182113 | | else => {}, |
| 182114 | | .immediate => |len_imm| switch (len_imm) { |
| 182115 | | else => {}, |
| 182116 | | 1 => if (self.register_manager.tryAllocReg(null, abi.RegisterClass.gp)) |reg| { |
| 182117 | | try self.asmRegisterMemory(.{ ._, .mov }, reg.to8(), try src_ptr.deref().mem(self, .{ .size = .byte })); |
| 182118 | | try self.asmMemoryRegister(.{ ._, .mov }, try dst_ptr.deref().mem(self, .{ .size = .byte }), reg.to8()); |
| 182119 | | return; |
| 182120 | | }, |
| 182121 | | 2 => if (self.register_manager.tryAllocReg(null, abi.RegisterClass.gp)) |reg| { |
| 182122 | | try self.asmRegisterMemory(.{ ._, .mov }, reg.to16(), try src_ptr.deref().mem(self, .{ .size = .word })); |
| 182123 | | try self.asmMemoryRegister(.{ ._, .mov }, try dst_ptr.deref().mem(self, .{ .size = .word }), reg.to16()); |
| 182124 | | return; |
| 182125 | | }, |
| 182126 | | 4 => if (self.register_manager.tryAllocReg(null, abi.RegisterClass.gp)) |reg| { |
| 182127 | | try self.asmRegisterMemory(.{ ._, .mov }, reg.to32(), try src_ptr.deref().mem(self, .{ .size = .dword })); |
| 182128 | | try self.asmMemoryRegister(.{ ._, .mov }, try dst_ptr.deref().mem(self, .{ .size = .dword }), reg.to32()); |
| 182129 | | return; |
| 182130 | | }, |
| 182131 | | 8 => if (self.target.cpu.arch == .x86_64) { |
| 182132 | | if (self.register_manager.tryAllocReg(null, abi.RegisterClass.gp)) |reg| { |
| 182133 | | try self.asmRegisterMemory(.{ ._, .mov }, reg.to64(), try src_ptr.deref().mem(self, .{ .size = .qword })); |
| 182134 | | try self.asmMemoryRegister(.{ ._, .mov }, try dst_ptr.deref().mem(self, .{ .size = .qword }), reg.to64()); |
| 182135 | | return; |
| 182136 | | } |
| 182137 | | }, |
| 182138 | | 16 => if (self.hasFeature(.avx)) { |
| 182139 | | if (self.register_manager.tryAllocReg(null, abi.RegisterClass.sse)) |reg| { |
| 182140 | | try self.asmRegisterMemory(.{ .v_dqu, .mov }, reg.to128(), try src_ptr.deref().mem(self, .{ .size = .xword })); |
| 182141 | | try self.asmMemoryRegister(.{ .v_dqu, .mov }, try dst_ptr.deref().mem(self, .{ .size = .xword }), reg.to128()); |
| 182142 | | return; |
| 182143 | | } |
| 182144 | | } else if (self.hasFeature(.sse2)) { |
| 182145 | | if (self.register_manager.tryAllocReg(null, abi.RegisterClass.sse)) |reg| { |
| 182146 | | try self.asmRegisterMemory(.{ ._dqu, .mov }, reg.to128(), try src_ptr.deref().mem(self, .{ .size = .xword })); |
| 182147 | | try self.asmMemoryRegister(.{ ._dqu, .mov }, try dst_ptr.deref().mem(self, .{ .size = .xword }), reg.to128()); |
| 182148 | | return; |
| 182149 | | } |
| 182150 | | } else if (self.hasFeature(.sse)) { |
| 182151 | | if (self.register_manager.tryAllocReg(null, abi.RegisterClass.sse)) |reg| { |
| 182152 | | try self.asmRegisterMemory(.{ ._ps, .movu }, reg.to128(), try src_ptr.deref().mem(self, .{ .size = .xword })); |
| 182153 | | try self.asmMemoryRegister(.{ ._ps, .movu }, try dst_ptr.deref().mem(self, .{ .size = .xword }), reg.to128()); |
| 182154 | | return; |
| 182155 | | } |
| 182156 | | }, |
| 182157 | | 32 => if (self.hasFeature(.avx)) { |
| 182158 | | if (self.register_manager.tryAllocReg(null, abi.RegisterClass.sse)) |reg| { |
| 182159 | | try self.asmRegisterMemory(.{ .v_dqu, .mov }, reg.to256(), try src_ptr.deref().mem(self, .{ .size = .yword })); |
| 182160 | | try self.asmMemoryRegister(.{ .v_dqu, .mov }, try dst_ptr.deref().mem(self, .{ .size = .yword }), reg.to256()); |
| 182161 | | return; |
| 182162 | | } |
| 182163 | | }, |
| 182164 | | }, |
| 182668 | if (opts.no_alias and len == .immediate and cg.useConstMemcpyForSize(len.immediate)) { |
| 182669 | if (try cg.genConstMemcpy(dst_ptr, src_ptr, len.immediate)) { |
| 182670 | return; |
| 182671 | } |
| 182672 | } |
| 182673 | |
| 182674 | try cg.spillRegisters(&.{ .rsi, .rdi, .rcx }); |
| 182675 | try cg.genSetReg(.rsi, .usize, src_ptr, .{}); |
| 182676 | try cg.genSetReg(.rdi, .usize, dst_ptr, .{}); |
| 182677 | try cg.genSetReg(.rcx, .usize, len, .{}); |
| 182678 | try cg.asmOpOnly(.{ .@"rep _sb", .mov }); |
| 182679 | } |
| 182680 | |
| 182681 | /// Returns `true` iff it would be efficient to use `genConstMemcpy` for a copy |
| 182682 | /// of `len` bytes instead of using `rep movsb`. |
| 182683 | fn useConstMemcpyForSize(cg: *CodeGen, len: u64) bool { |
| 182684 | // LLVM's threshold here is 8 load/store pairs. However, after that threshold, it typically |
| 182685 | // calls through to `memcpy` instead of emitting `rep movsb`; if we don't have the `fsrm` CPU |
| 182686 | // feature, `rep movsb` has a high startup cost, so is inefficient for small copies. Since we |
| 182687 | // don't currently call compiler_rt in the case of longer copies, we use a higher threshold if |
| 182688 | // we don't have the `fsrm` feature. |
| 182689 | return switch (len) { |
| 182690 | 0...128 => true, |
| 182691 | 129...256 => cg.hasFeature(.avx) or !cg.hasFeature(.fsrm), // if we have AVX, each pair is 32 bytes |
| 182692 | 257...512 => !cg.hasFeature(.fsrm), // the threshold should probably be higher, but I'm being cautious |
| 182693 | else => false, |
| 182165 | 182694 | }; |
| 182166 | | try self.spillRegisters(&.{ .rsi, .rdi, .rcx }); |
| 182167 | | try self.genSetReg(.rsi, .usize, src_ptr, .{}); |
| 182168 | | try self.genSetReg(.rdi, .usize, dst_ptr, .{}); |
| 182169 | | try self.genSetReg(.rcx, .usize, len, .{}); |
| 182170 | | try self.asmOpOnly(.{ .@"rep _sb", .mov }); |
| 182695 | } |
| 182696 | /// If we can trivially copy `len` bytes from `orig_src_ptr` to `dst_ptr` using simple loads and |
| 182697 | /// stored through already-free register[s] (i.e. without spilling anything), emits that code and |
| 182698 | /// returns `true`. Otherwise, returns `false`, and the caller must lower the operation themselves, |
| 182699 | /// for instance with `rep movsb`. |
| 182700 | fn genConstMemcpy( |
| 182701 | cg: *CodeGen, |
| 182702 | dst_ptr: MCValue, |
| 182703 | orig_src_ptr: MCValue, |
| 182704 | len: u64, |
| 182705 | ) !bool { |
| 182706 | if (!dst_ptr.isAddress()) return false; |
| 182707 | |
| 182708 | const src_reg: ?Register = r: { |
| 182709 | if (orig_src_ptr.isAddress()) break :r null; |
| 182710 | if (orig_src_ptr == .lea_uav or orig_src_ptr == .lea_nav) { |
| 182711 | // To "hack around linker relocation bugs", a `lea_uav` isn't considered an address, but |
| 182712 | // we want to avoid pessimising that case because it's common (e.g. returning constant |
| 182713 | // values over 8 bytes). So if there's a register free, load the source address into it. |
| 182714 | if (cg.register_manager.tryAllocReg(null, abi.RegisterClass.gp)) |src_reg| { |
| 182715 | // We'll actually do the load a little later, in case another register alloc fails. |
| 182716 | break :r src_reg; |
| 182717 | } |
| 182718 | } |
| 182719 | return false; |
| 182720 | }; |
| 182721 | |
| 182722 | // Prevent `src_reg` from aliasing `gp_reg` below. |
| 182723 | const src_lock: ?RegisterLock = if (src_reg) |r| cg.register_manager.lockReg(r) else null; |
| 182724 | defer if (src_lock) |l| cg.register_manager.unlockReg(l); |
| 182725 | |
| 182726 | const want_sse_reg = len >= 16 and cg.hasFeature(.sse); |
| 182727 | const sse_reg: ?Register = if (want_sse_reg) r: { |
| 182728 | break :r cg.register_manager.tryAllocReg(null, abi.RegisterClass.sse); |
| 182729 | } else null; |
| 182730 | |
| 182731 | const need_gp_reg = len % 16 != 0 or sse_reg == null; |
| 182732 | const gp_reg: Register = if (need_gp_reg) r: { |
| 182733 | break :r cg.register_manager.tryAllocReg(null, abi.RegisterClass.gp) orelse return false; |
| 182734 | } else undefined; |
| 182735 | |
| 182736 | const src_ptr: MCValue = src_ptr: { |
| 182737 | const reg = src_reg orelse break :src_ptr orig_src_ptr; |
| 182738 | try cg.asmRegisterMemory(.{ ._, .lea }, reg.to64(), switch (orig_src_ptr) { |
| 182739 | .lea_uav => |uav| .{ .base = .{ .uav = uav } }, |
| 182740 | .lea_nav => |nav| .{ .base = .{ .nav = nav } }, |
| 182741 | else => unreachable, |
| 182742 | }); |
| 182743 | break :src_ptr .{ .register = reg.to64() }; |
| 182744 | }; |
| 182745 | |
| 182746 | var offset: u64 = 0; |
| 182747 | |
| 182748 | if (sse_reg) |r| { |
| 182749 | if (cg.hasFeature(.avx)) { |
| 182750 | try cg.memcpyPart(dst_ptr, src_ptr, len, &offset, .{ .v_dqu, .mov }, r, .yword); |
| 182751 | try cg.memcpyPart(dst_ptr, src_ptr, len, &offset, .{ .v_dqu, .mov }, r, .xword); |
| 182752 | } else if (cg.hasFeature(.sse2)) { |
| 182753 | try cg.memcpyPart(dst_ptr, src_ptr, len, &offset, .{ ._dqu, .mov }, r, .xword); |
| 182754 | } else if (cg.hasFeature(.sse)) { |
| 182755 | try cg.memcpyPart(dst_ptr, src_ptr, len, &offset, .{ ._ps, .movu }, r, .xword); |
| 182756 | } |
| 182757 | } |
| 182758 | |
| 182759 | if (need_gp_reg) { |
| 182760 | try cg.memcpyPart(dst_ptr, src_ptr, len, &offset, .{ ._, .mov }, gp_reg, .qword); |
| 182761 | try cg.memcpyPart(dst_ptr, src_ptr, len, &offset, .{ ._, .mov }, gp_reg, .dword); |
| 182762 | try cg.memcpyPart(dst_ptr, src_ptr, len, &offset, .{ ._, .mov }, gp_reg, .word); |
| 182763 | try cg.memcpyPart(dst_ptr, src_ptr, len, &offset, .{ ._, .mov }, gp_reg, .byte); |
| 182764 | } |
| 182765 | |
| 182766 | assert(offset == len); |
| 182767 | |
| 182768 | return true; |
| 182769 | } |
| 182770 | fn memcpyPart( |
| 182771 | cg: *CodeGen, |
| 182772 | dst_ptr: MCValue, |
| 182773 | src_ptr: MCValue, |
| 182774 | len: u64, |
| 182775 | offset: *u64, |
| 182776 | tag: Mir.Inst.FixedTag, |
| 182777 | temp_reg: Register, |
| 182778 | size: Memory.Size, |
| 182779 | ) !void { |
| 182780 | const bytes_len = @divExact(size.bitSize(cg.target), 8); |
| 182781 | while (len - offset.* >= bytes_len) { |
| 182782 | try cg.asmRegisterMemory( |
| 182783 | tag, |
| 182784 | temp_reg.toSize(size, cg.target), |
| 182785 | try src_ptr.deref().mem(cg, .{ .size = size, .disp = @intCast(offset.*) }), |
| 182786 | ); |
| 182787 | try cg.asmMemoryRegister( |
| 182788 | tag, |
| 182789 | try dst_ptr.deref().mem(cg, .{ .size = size, .disp = @intCast(offset.*) }), |
| 182790 | temp_reg.toSize(size, cg.target), |
| 182791 | ); |
| 182792 | offset.* += bytes_len; |
| 182793 | } |
| 182171 | 182794 | } |
| 182172 | 182795 | |
| 182173 | 182796 | fn genInlineMemset( |
| ... | ... | @@ -186834,10 +187457,8 @@ const Temp = struct { |
| 186834 | 187457 | }, |
| 186835 | 187458 | .memory, .indirect, .load_frame, .load_nav, .load_uav, .load_lazy_sym => { |
| 186836 | 187459 | var val_ptr = try cg.tempInit(.usize, val_mcv.address()); |
| 186837 | | var len = try cg.tempInit(.usize, .{ .immediate = val_ty.abiSize(cg.pt.zcu) }); |
| 186838 | | try val_ptr.memcpy(ptr, &len, cg); |
| 187460 | try val_ptr.memcpy(ptr, val_ty.abiSize(cg.pt.zcu), cg); |
| 186839 | 187461 | try val_ptr.die(cg); |
| 186840 | | try len.die(cg); |
| 186841 | 187462 | }, |
| 186842 | 187463 | } |
| 186843 | 187464 | return val; |
| ... | ... | @@ -186939,10 +187560,8 @@ const Temp = struct { |
| 186939 | 187560 | .lea_frame, .lea_nav, .lea_uav, .lea_lazy_sym => continue :val_to_gpr, |
| 186940 | 187561 | .memory, .indirect, .load_frame, .load_nav, .load_uav, .load_lazy_sym => { |
| 186941 | 187562 | var val_ptr = try cg.tempInit(.usize, val_mcv.address()); |
| 186942 | | var len = try cg.tempInit(.usize, .{ .immediate = val_ty.abiSize(cg.pt.zcu) }); |
| 186943 | | try ptr.memcpy(&val_ptr, &len, cg); |
| 187563 | try ptr.memcpy(&val_ptr, val_ty.abiSize(cg.pt.zcu), cg); |
| 186944 | 187564 | try val_ptr.die(cg); |
| 186945 | | try len.die(cg); |
| 186946 | 187565 | }, |
| 186947 | 187566 | } |
| 186948 | 187567 | break; |
| ... | ... | @@ -186981,11 +187600,9 @@ const Temp = struct { |
| 186981 | 187600 | var val_ptr = try cg.tempInit(.usize, val_mcv.address()); |
| 186982 | 187601 | var src_ptr = |
| 186983 | 187602 | try cg.tempInit(.usize, src.tracking(cg).short.address().offset(opts.disp)); |
| 186984 | | var len = try cg.tempInit(.usize, .{ .immediate = val_ty.abiSize(cg.pt.zcu) }); |
| 186985 | | try val_ptr.memcpy(&src_ptr, &len, cg); |
| 187603 | try val_ptr.memcpy(&src_ptr, val_ty.abiSize(cg.pt.zcu), cg); |
| 186986 | 187604 | try val_ptr.die(cg); |
| 186987 | 187605 | try src_ptr.die(cg); |
| 186988 | | try len.die(cg); |
| 186989 | 187606 | }, |
| 186990 | 187607 | } |
| 186991 | 187608 | } |
| ... | ... | @@ -187076,11 +187693,9 @@ const Temp = struct { |
| 187076 | 187693 | var dst_ptr = |
| 187077 | 187694 | try cg.tempInit(.usize, dst.tracking(cg).short.address().offset(opts.disp)); |
| 187078 | 187695 | var val_ptr = try cg.tempInit(.usize, val_mcv.address()); |
| 187079 | | var len = try cg.tempInit(.usize, .{ .immediate = val_ty.abiSize(cg.pt.zcu) }); |
| 187080 | | try dst_ptr.memcpy(&val_ptr, &len, cg); |
| 187696 | try dst_ptr.memcpy(&val_ptr, val_ty.abiSize(cg.pt.zcu), cg); |
| 187081 | 187697 | try dst_ptr.die(cg); |
| 187082 | 187698 | try val_ptr.die(cg); |
| 187083 | | try len.die(cg); |
| 187084 | 187699 | }, |
| 187085 | 187700 | } |
| 187086 | 187701 | break; |
| ... | ... | @@ -187182,10 +187797,8 @@ const Temp = struct { |
| 187182 | 187797 | try ptr.toOffset(deferred_disp, cg); |
| 187183 | 187798 | deferred_disp = 0; |
| 187184 | 187799 | var src_ptr = try cg.tempInit(.usize, .{ .lea_frame = .{ .index = frame_index } }); |
| 187185 | | var len = try cg.tempInit(.usize, .{ .immediate = src_abi_size }); |
| 187186 | | try ptr.memcpy(&src_ptr, &len, cg); |
| 187800 | try ptr.memcpy(&src_ptr, src_abi_size, cg); |
| 187187 | 187801 | try src_ptr.die(cg); |
| 187188 | | try len.die(cg); |
| 187189 | 187802 | } |
| 187190 | 187803 | part_disp += part_size; |
| 187191 | 187804 | deferred_disp += part_size; |
| ... | ... | @@ -187224,11 +187837,9 @@ const Temp = struct { |
| 187224 | 187837 | var dst_ptr = try cg.tempInit(.usize, dst.tracking(cg).short.address()); |
| 187225 | 187838 | try dst_ptr.toOffset(disp, cg); |
| 187226 | 187839 | var src_ptr = try cg.tempInit(.usize, .{ .lea_frame = .{ .index = frame_index } }); |
| 187227 | | var len = try cg.tempInit(.usize, .{ .immediate = src_abi_size }); |
| 187228 | | try dst_ptr.memcpy(&src_ptr, &len, cg); |
| 187840 | try dst_ptr.memcpy(&src_ptr, src_abi_size, cg); |
| 187229 | 187841 | try dst_ptr.die(cg); |
| 187230 | 187842 | try src_ptr.die(cg); |
| 187231 | | try len.die(cg); |
| 187232 | 187843 | } |
| 187233 | 187844 | } |
| 187234 | 187845 | |
| ... | ... | @@ -187273,11 +187884,21 @@ const Temp = struct { |
| 187273 | 187884 | assert(next_class_index == classes.len); |
| 187274 | 187885 | } |
| 187275 | 187886 | |
| 187276 | | fn memcpy(dst: *Temp, src: *Temp, len: *Temp, cg: *CodeGen) InnerError!void { |
| 187277 | | while (true) for ([_]*Temp{ dst, src, len }, [_]Register{ .rdi, .rsi, .rcx }) |temp, reg| { |
| 187278 | | if (try temp.toReg(reg, cg)) break; |
| 187279 | | } else break; |
| 187887 | fn memcpy(dst: *Temp, src: *Temp, len: u64, cg: *CodeGen) InnerError!void { |
| 187888 | if (cg.useConstMemcpyForSize(len)) { |
| 187889 | while (try dst.toLea(cg) or try src.toLea(cg)) {} // `genConstMemcpy` wants these values to be address operands |
| 187890 | if (try cg.genConstMemcpy(dst.tracking(cg).short, src.tracking(cg).short, len)) { |
| 187891 | return; |
| 187892 | } |
| 187893 | } |
| 187894 | var temp = try cg.tempAllocReg(.usize, abi.RegisterClass.gp); |
| 187895 | while (try dst.toReg(.rdi, cg) or |
| 187896 | try src.toReg(.rsi, cg) or |
| 187897 | try temp.toReg(.rcx, cg)) |
| 187898 | {} |
| 187899 | try cg.asmRegisterImmediate(.{ ._, .mov }, .rcx, .{ .unsigned = len }); |
| 187280 | 187900 | try cg.asmOpOnly(.{ .@"rep _sb", .mov }); |
| 187901 | try temp.die(cg); |
| 187281 | 187902 | } |
| 187282 | 187903 | |
| 187283 | 187904 | fn memset(dst: *Temp, val: *Temp, len: *Temp, cg: *CodeGen) InnerError!void { |
| ... | ... | @@ -190139,9 +190760,9 @@ const Temp = struct { |
| 190139 | 190760 | .required_features = .{ .sse, .mmx, null, null }, |
| 190140 | 190761 | .src_constraints = .{ .{ .int = .qword }, .{ .int = .qword }, .any }, |
| 190141 | 190762 | .patterns = &.{ |
| 190142 | | .{ .src = .{ .to_mut_mm, .mem, .none } }, |
| 190143 | | .{ .src = .{ .mem, .to_mut_mm, .none }, .commute = .{ 0, 1 } }, |
| 190144 | | .{ .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 } }, |
| 190145 | 190766 | }, |
| 190146 | 190767 | .extra_temps = .{ |
| 190147 | 190768 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| ... | ... | @@ -190169,9 +190790,9 @@ const Temp = struct { |
| 190169 | 190790 | .required_features = .{ .avx, null, null, null }, |
| 190170 | 190791 | .src_constraints = .{ .{ .int = .xword }, .{ .int = .xword }, .any }, |
| 190171 | 190792 | .patterns = &.{ |
| 190172 | | .{ .src = .{ .to_xmm, .mem, .none } }, |
| 190173 | | .{ .src = .{ .mem, .to_xmm, .none }, .commute = .{ 0, 1 } }, |
| 190174 | | .{ .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 } }, |
| 190175 | 190796 | }, |
| 190176 | 190797 | .extra_temps = .{ |
| 190177 | 190798 | .{ .kind = .{ .rc = .sse } }, |
| ... | ... | @@ -190196,9 +190817,9 @@ const Temp = struct { |
| 190196 | 190817 | .required_features = .{ .sse4_1, null, null, null }, |
| 190197 | 190818 | .src_constraints = .{ .{ .int = .xword }, .{ .int = .xword }, .any }, |
| 190198 | 190819 | .patterns = &.{ |
| 190199 | | .{ .src = .{ .to_mut_xmm, .mem, .none } }, |
| 190200 | | .{ .src = .{ .mem, .to_mut_xmm, .none }, .commute = .{ 0, 1 } }, |
| 190201 | | .{ .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 } }, |
| 190202 | 190823 | }, |
| 190203 | 190824 | .dst_temps = .{ .{ .cc = .z }, .unused }, |
| 190204 | 190825 | .clobbers = .{ .eflags = true }, |
| ... | ... | @@ -190210,9 +190831,9 @@ const Temp = struct { |
| 190210 | 190831 | .required_features = .{ .sse2, .fast_imm16, null, null }, |
| 190211 | 190832 | .src_constraints = .{ .{ .int = .xword }, .{ .int = .xword }, .any }, |
| 190212 | 190833 | .patterns = &.{ |
| 190213 | | .{ .src = .{ .to_mut_xmm, .mem, .none } }, |
| 190214 | | .{ .src = .{ .mem, .to_mut_xmm, .none }, .commute = .{ 0, 1 } }, |
| 190215 | | .{ .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 } }, |
| 190216 | 190837 | }, |
| 190217 | 190838 | .extra_temps = .{ |
| 190218 | 190839 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| ... | ... | @@ -190240,9 +190861,9 @@ const Temp = struct { |
| 190240 | 190861 | .required_features = .{ .sse2, null, null, null }, |
| 190241 | 190862 | .src_constraints = .{ .{ .int = .xword }, .{ .int = .xword }, .any }, |
| 190242 | 190863 | .patterns = &.{ |
| 190243 | | .{ .src = .{ .to_mut_xmm, .mem, .none } }, |
| 190244 | | .{ .src = .{ .mem, .to_mut_xmm, .none }, .commute = .{ 0, 1 } }, |
| 190245 | | .{ .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 } }, |
| 190246 | 190867 | }, |
| 190247 | 190868 | .extra_temps = .{ |
| 190248 | 190869 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| ... | ... | @@ -190270,9 +190891,9 @@ const Temp = struct { |
| 190270 | 190891 | .required_features = .{ .avx2, null, null, null }, |
| 190271 | 190892 | .src_constraints = .{ .{ .int = .yword }, .{ .int = .yword }, .any }, |
| 190272 | 190893 | .patterns = &.{ |
| 190273 | | .{ .src = .{ .to_ymm, .mem, .none } }, |
| 190274 | | .{ .src = .{ .mem, .to_ymm, .none }, .commute = .{ 0, 1 } }, |
| 190275 | | .{ .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 } }, |
| 190276 | 190897 | }, |
| 190277 | 190898 | .extra_temps = .{ |
| 190278 | 190899 | .{ .kind = .{ .rc = .sse } }, |
| ... | ... | @@ -190297,9 +190918,9 @@ const Temp = struct { |
| 190297 | 190918 | .required_features = .{ .avx, null, null, null }, |
| 190298 | 190919 | .src_constraints = .{ .{ .int = .yword }, .{ .int = .yword }, .any }, |
| 190299 | 190920 | .patterns = &.{ |
| 190300 | | .{ .src = .{ .to_ymm, .mem, .none } }, |
| 190301 | | .{ .src = .{ .mem, .to_ymm, .none }, .commute = .{ 0, 1 } }, |
| 190302 | | .{ .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 } }, |
| 190303 | 190924 | }, |
| 190304 | 190925 | .extra_temps = .{ |
| 190305 | 190926 | .{ .kind = .{ .rc = .sse } }, |
| ... | ... | @@ -192279,6 +192900,7 @@ const Select = struct { |
| 192279 | 192900 | any_scalar_int, |
| 192280 | 192901 | any_scalar_signed_int, |
| 192281 | 192902 | any_scalar_unsigned_int, |
| 192903 | any_signed_int_or_full_vec, |
| 192282 | 192904 | any_float, |
| 192283 | 192905 | po2_any, |
| 192284 | 192906 | bool, |
| ... | ... | @@ -192375,6 +192997,11 @@ const Select = struct { |
| 192375 | 192997 | .any_scalar_int => cg.intInfo(ty.scalarType(zcu)) != null, |
| 192376 | 192998 | .any_scalar_signed_int => if (cg.intInfo(ty.scalarType(zcu))) |int_info| int_info.signedness == .signed else false, |
| 192377 | 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, |
| 192378 | 193005 | .any_float => ty.isRuntimeFloat(), |
| 192379 | 193006 | .po2_any => std.math.isPowerOfTwo(ty.abiSize(zcu)), |
| 192380 | 193007 | .bool => ty.toIntern() == .bool_type, |
| ... | ... | @@ -192415,7 +193042,7 @@ const Select = struct { |
| 192415 | 193042 | .signed_int_or_full_vec => |size| ty.isVector(zcu) and @divExact(size.bitSize(cg.target), 8) >= ty.abiSize(zcu) and |
| 192416 | 193043 | if (cg.intInfo(ty.childType(zcu))) |int_info| switch (int_info.signedness) { |
| 192417 | 193044 | .signed => true, |
| 192418 | | .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, |
| 192419 | 193046 | } else false, |
| 192420 | 193047 | .unsigned_int_vec => |size| ty.isVector(zcu) and @divExact(size.bitSize(cg.target), 8) >= ty.abiSize(zcu) and |
| 192421 | 193048 | if (cg.intInfo(ty.childType(zcu))) |int_info| int_info.signedness == .unsigned else false, |
| ... | ... | @@ -192664,22 +193291,10 @@ const Select = struct { |
| 192664 | 193291 | to_mmx, |
| 192665 | 193292 | mut_mmx, |
| 192666 | 193293 | to_mut_mmx, |
| 192667 | | mm, |
| 192668 | | to_mm, |
| 192669 | | mut_mm, |
| 192670 | | to_mut_mm, |
| 192671 | 193294 | sse, |
| 192672 | 193295 | to_sse, |
| 192673 | 193296 | mut_sse, |
| 192674 | 193297 | to_mut_sse, |
| 192675 | | xmm, |
| 192676 | | to_xmm, |
| 192677 | | mut_xmm, |
| 192678 | | to_mut_xmm, |
| 192679 | | ymm, |
| 192680 | | to_ymm, |
| 192681 | | mut_ymm, |
| 192682 | | to_mut_ymm, |
| 192683 | 193298 | reg_mask: RegMaskSpec, |
| 192684 | 193299 | all_reg_mask: RegMaskSpec, |
| 192685 | 193300 | |
| ... | ... | @@ -192769,17 +193384,6 @@ const Select = struct { |
| 192769 | 193384 | else => false, |
| 192770 | 193385 | }, |
| 192771 | 193386 | .to_mmx, .to_mut_mmx => true, |
| 192772 | | .mm => temp.typeOf(cg).abiSize(cg.pt.zcu) == 8 and switch (temp.tracking(cg).short) { |
| 192773 | | .register => |reg| reg.isClass(.mmx), |
| 192774 | | .register_offset => |reg_off| reg_off.reg.isClass(.mmx) and reg_off.off == 0, |
| 192775 | | else => false, |
| 192776 | | }, |
| 192777 | | .mut_mm => temp.isMut(cg) and temp.typeOf(cg).abiSize(cg.pt.zcu) == 8 and switch (temp.tracking(cg).short) { |
| 192778 | | .register => |reg| reg.isClass(.mmx), |
| 192779 | | .register_offset => |reg_off| reg_off.reg.isClass(.mmx) and reg_off.off == 0, |
| 192780 | | else => false, |
| 192781 | | }, |
| 192782 | | .to_mm, .to_mut_mm => temp.typeOf(cg).abiSize(cg.pt.zcu) == 8, |
| 192783 | 193387 | .sse => switch (temp.tracking(cg).short) { |
| 192784 | 193388 | .register => |reg| reg.isClass(.sse), |
| 192785 | 193389 | .register_offset => |reg_off| reg_off.reg.isClass(.sse) and reg_off.off == 0, |
| ... | ... | @@ -192791,28 +193395,6 @@ const Select = struct { |
| 192791 | 193395 | else => false, |
| 192792 | 193396 | }, |
| 192793 | 193397 | .to_sse, .to_mut_sse => true, |
| 192794 | | .xmm => temp.typeOf(cg).abiSize(cg.pt.zcu) == 16 and switch (temp.tracking(cg).short) { |
| 192795 | | .register => |reg| reg.isClass(.sse), |
| 192796 | | .register_offset => |reg_off| reg_off.reg.isClass(.sse) and reg_off.off == 0, |
| 192797 | | else => false, |
| 192798 | | }, |
| 192799 | | .mut_xmm => temp.isMut(cg) and temp.typeOf(cg).abiSize(cg.pt.zcu) == 16 and switch (temp.tracking(cg).short) { |
| 192800 | | .register => |reg| reg.isClass(.sse), |
| 192801 | | .register_offset => |reg_off| reg_off.reg.isClass(.sse) and reg_off.off == 0, |
| 192802 | | else => false, |
| 192803 | | }, |
| 192804 | | .to_xmm, .to_mut_xmm => temp.typeOf(cg).abiSize(cg.pt.zcu) == 16, |
| 192805 | | .ymm => temp.typeOf(cg).abiSize(cg.pt.zcu) == 32 and switch (temp.tracking(cg).short) { |
| 192806 | | .register => |reg| reg.isClass(.sse), |
| 192807 | | .register_offset => |reg_off| reg_off.reg.isClass(.sse) and reg_off.off == 0, |
| 192808 | | else => false, |
| 192809 | | }, |
| 192810 | | .mut_ymm => temp.isMut(cg) and temp.typeOf(cg).abiSize(cg.pt.zcu) == 32 and switch (temp.tracking(cg).short) { |
| 192811 | | .register => |reg| reg.isClass(.sse), |
| 192812 | | .register_offset => |reg_off| reg_off.reg.isClass(.sse) and reg_off.off == 0, |
| 192813 | | else => false, |
| 192814 | | }, |
| 192815 | | .to_ymm, .to_mut_ymm => temp.typeOf(cg).abiSize(cg.pt.zcu) == 32, |
| 192816 | 193398 | .reg_mask => |mask_spec| switch (temp.tracking(cg).short) { |
| 192817 | 193399 | .register_mask => |reg_mask| mask_spec.size.bitSize(cg.target) >= |
| 192818 | 193400 | reg_mask.info.scalar.bitSize(cg.target) * temp.typeOf(cg).vectorLen(cg.pt.zcu) and |
| ... | ... | @@ -192846,10 +193428,10 @@ const Select = struct { |
| 192846 | 193428 | .to_mut_gphi => try temp.toRegClass(true, .gphi, cg), |
| 192847 | 193429 | .x87, .to_x87 => try temp.toRegClass(false, .x87, cg), |
| 192848 | 193430 | .mut_x87, .to_mut_x87 => try temp.toRegClass(true, .x87, cg), |
| 192849 | | .mmx, .to_mmx, .mm, .to_mm => try temp.toRegClass(false, .mmx, cg), |
| 192850 | | .mut_mmx, .to_mut_mmx, .mut_mm, .to_mut_mm => try temp.toRegClass(true, .mmx, cg), |
| 192851 | | .sse, .to_sse, .xmm, .to_xmm, .ymm, .to_ymm => try temp.toRegClass(false, .sse, cg), |
| 192852 | | .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), |
| 192853 | 193435 | }; |
| 192854 | 193436 | } |
| 192855 | 193437 | }; |
| ... | ... | @@ -193399,7 +193981,7 @@ const Select = struct { |
| 193399 | 193981 | ref: Ref, |
| 193400 | 193982 | scale: Memory.Scale = .@"1", |
| 193401 | 193983 | } = .{ .ref = .none }, |
| 193402 | | unused: u2 = 0, |
| 193984 | unused: u1 = 0, |
| 193403 | 193985 | }, |
| 193404 | 193986 | imm: i32 = 0, |
| 193405 | 193987 | |
| ... | ... | @@ -193412,7 +193994,7 @@ const Select = struct { |
| 193412 | 193994 | lea, |
| 193413 | 193995 | mem, |
| 193414 | 193996 | }; |
| 193415 | | const Adjust = packed struct(u11) { |
| 193997 | const Adjust = packed struct(u12) { |
| 193416 | 193998 | sign: enum(u1) { neg, pos }, |
| 193417 | 193999 | lhs: enum(u6) { |
| 193418 | 194000 | none, |
| ... | ... | @@ -193449,7 +194031,7 @@ const Select = struct { |
| 193449 | 194031 | umax_shr_src1, |
| 193450 | 194032 | repeat, |
| 193451 | 194033 | }, |
| 193452 | | op: enum(u2) { mul, div, div_8_down, rem_8_mul }, |
| 194034 | op: enum(u3) { mul, div, div_8_down, rem_8_mul, up_2_mul, up_32_mul }, |
| 193453 | 194035 | rhs: Memory.Scale, |
| 193454 | 194036 | |
| 193455 | 194037 | const none: Adjust = .{ .sign = .pos, .lhs = .none, .op = .mul, .rhs = .@"1" }; |
| ... | ... | @@ -193470,6 +194052,11 @@ const Select = struct { |
| 193470 | 194052 | const add_delta_elem_size: Adjust = .{ .sign = .pos, .lhs = .delta_elem_size, .op = .mul, .rhs = .@"1" }; |
| 193471 | 194053 | const add_delta_elem_size_div_8: Adjust = .{ .sign = .pos, .lhs = .delta_elem_size, .op = .div, .rhs = .@"8" }; |
| 193472 | 194054 | const add_unaligned_size: Adjust = .{ .sign = .pos, .lhs = .unaligned_size, .op = .mul, .rhs = .@"1" }; |
| 194055 | const add_unaligned_size_up_2: Adjust = .{ .sign = .pos, .lhs = .unaligned_size, .op = .up_2_mul, .rhs = .@"1" }; |
| 194056 | const add_unaligned_size_up_4: Adjust = .{ .sign = .pos, .lhs = .unaligned_size, .op = .up_2_mul, .rhs = .@"2" }; |
| 194057 | const add_unaligned_size_up_8: Adjust = .{ .sign = .pos, .lhs = .unaligned_size, .op = .up_2_mul, .rhs = .@"4" }; |
| 194058 | const add_unaligned_size_up_16: Adjust = .{ .sign = .pos, .lhs = .unaligned_size, .op = .up_2_mul, .rhs = .@"8" }; |
| 194059 | const add_unaligned_size_up_32: Adjust = .{ .sign = .pos, .lhs = .unaligned_size, .op = .up_32_mul, .rhs = .@"1" }; |
| 193473 | 194060 | const sub_unaligned_size: Adjust = .{ .sign = .neg, .lhs = .unaligned_size, .op = .mul, .rhs = .@"1" }; |
| 193474 | 194061 | const add_unaligned_size_add_elem_size: Adjust = .{ .sign = .pos, .lhs = .unaligned_size_add_elem_size, .op = .mul, .rhs = .@"1" }; |
| 193475 | 194062 | const add_unaligned_size_sub_elem_size: Adjust = .{ .sign = .pos, .lhs = .unaligned_size_sub_elem_size, .op = .mul, .rhs = .@"1" }; |
| ... | ... | @@ -194482,7 +195069,9 @@ const Select = struct { |
| 194482 | 195069 | }, |
| 194483 | 195070 | .div => @shrExact(lhs, rhs), |
| 194484 | 195071 | .div_8_down => lhs >> 3 & @as(SignedImm, -1) << rhs, |
| 194485 | | .rem_8_mul => lhs & (@as(SignedImm, 1) << @intCast(@as(u3, 3) + rhs)) - 1, |
| 195072 | .rem_8_mul => lhs & ((@as(SignedImm, 8) << rhs) - 1), |
| 195073 | .up_2_mul => ((lhs - 1) & @as(SignedImm, -2) << rhs) + (@as(SignedImm, 2) << rhs), |
| 195074 | .up_32_mul => ((lhs - 1) & @as(SignedImm, -32) << rhs) + (@as(SignedImm, 32) << rhs), |
| 194486 | 195075 | }; |
| 194487 | 195076 | const disp: SignedImm = @bitCast(@as(UnsignedImm, @as(u32, @bitCast(op.imm)))); |
| 194488 | 195077 | return switch (op.flags.adjust.sign) { |