| ... | ... | @@ -2418,7 +2418,7 @@ fn genBodyBlock(self: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 2418 | 2418 | } |
| 2419 | 2419 | |
| 2420 | 2420 | fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 2421 | | @setEvalBranchQuota(12_600); |
| 2421 | @setEvalBranchQuota(12_700); |
| 2422 | 2422 | const pt = cg.pt; |
| 2423 | 2423 | const zcu = pt.zcu; |
| 2424 | 2424 | const ip = &zcu.intern_pool; |
| ... | ... | @@ -2475,7 +2475,6 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 2475 | 2475 | |
| 2476 | 2476 | .bitcast => try cg.airBitCast(inst), |
| 2477 | 2477 | |
| 2478 | | .ctz => try cg.airCtz(inst), |
| 2479 | 2478 | .popcount => try cg.airPopCount(inst), |
| 2480 | 2479 | .bit_reverse => try cg.airBitReverse(inst), |
| 2481 | 2480 | .splat => try cg.airSplat(inst), |
| ... | ... | @@ -26978,7 +26977,6 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 26978 | 26977 | .call_always_tail => try cg.airCall(inst, .always_tail, .{ .safety = true }), |
| 26979 | 26978 | .call_never_tail => try cg.airCall(inst, .never_tail, .{ .safety = true }), |
| 26980 | 26979 | .call_never_inline => try cg.airCall(inst, .never_inline, .{ .safety = true }), |
| 26981 | | |
| 26982 | 26980 | .clz => |air_tag| if (use_old) try cg.airClz(inst) else { |
| 26983 | 26981 | const ty_op = air_datas[@intFromEnum(inst)].ty_op; |
| 26984 | 26982 | var ops = try cg.tempsFromOperands(inst, .{ty_op.operand}); |
| ... | ... | @@ -30084,6 +30082,404 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { |
| 30084 | 30082 | }; |
| 30085 | 30083 | try res[0].finish(inst, &.{ty_op.operand}, &ops, cg); |
| 30086 | 30084 | }, |
| 30085 | .ctz => |air_tag| if (use_old) try cg.airCtz(inst) else fallback: { |
| 30086 | const ty_op = air_datas[@intFromEnum(inst)].ty_op; |
| 30087 | if (ty_op.ty.toType().isVector(zcu)) break :fallback try cg.airCtz(inst); |
| 30088 | var ops = try cg.tempsFromOperands(inst, .{ty_op.operand}); |
| 30089 | var res: [1]Temp = undefined; |
| 30090 | cg.select(&res, &.{ty_op.ty.toType()}, &ops, comptime &.{ .{ |
| 30091 | .required_features = .{ .slow_incdec, null, null, null }, |
| 30092 | .src_constraints = .{ .{ .exact_signed_int = 1 }, .any, .any }, |
| 30093 | .patterns = &.{ |
| 30094 | .{ .src = .{ .mut_mem, .none, .none } }, |
| 30095 | .{ .src = .{ .to_mut_gpr, .none, .none } }, |
| 30096 | }, |
| 30097 | .dst_temps = .{ .{ .ref = .src0 }, .unused }, |
| 30098 | .clobbers = .{ .eflags = true }, |
| 30099 | .each = .{ .once = &.{ |
| 30100 | .{ ._, ._, .add, .dst0b, .si(1), ._, ._ }, |
| 30101 | } }, |
| 30102 | }, .{ |
| 30103 | .src_constraints = .{ .{ .exact_signed_int = 1 }, .any, .any }, |
| 30104 | .patterns = &.{ |
| 30105 | .{ .src = .{ .mut_mem, .none, .none } }, |
| 30106 | .{ .src = .{ .to_mut_gpr, .none, .none } }, |
| 30107 | }, |
| 30108 | .dst_temps = .{ .{ .ref = .src0 }, .unused }, |
| 30109 | .clobbers = .{ .eflags = true }, |
| 30110 | .each = .{ .once = &.{ |
| 30111 | .{ ._, ._c, .in, .dst0b, ._, ._, ._ }, |
| 30112 | } }, |
| 30113 | }, .{ |
| 30114 | .src_constraints = .{ .{ .exact_unsigned_int = 1 }, .any, .any }, |
| 30115 | .patterns = &.{ |
| 30116 | .{ .src = .{ .mut_mem, .none, .none } }, |
| 30117 | .{ .src = .{ .to_mut_gpr, .none, .none } }, |
| 30118 | }, |
| 30119 | .dst_temps = .{ .{ .ref = .src0 }, .unused }, |
| 30120 | .clobbers = .{ .eflags = true }, |
| 30121 | .each = .{ .once = &.{ |
| 30122 | .{ ._, ._, .xor, .dst0b, .si(1), ._, ._ }, |
| 30123 | } }, |
| 30124 | }, .{ |
| 30125 | .required_features = .{ .bmi, null, null, null }, |
| 30126 | .src_constraints = .{ .{ .exact_int = 16 }, .any, .any }, |
| 30127 | .patterns = &.{ |
| 30128 | .{ .src = .{ .mem, .none, .none } }, |
| 30129 | .{ .src = .{ .to_gpr, .none, .none } }, |
| 30130 | }, |
| 30131 | .dst_temps = .{ .{ .rc = .general_purpose }, .unused }, |
| 30132 | .clobbers = .{ .eflags = true }, |
| 30133 | .each = .{ .once = &.{ |
| 30134 | .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ }, |
| 30135 | .{ ._, ._, .tzcnt, .dst0w, .src0w, ._, ._ }, |
| 30136 | } }, |
| 30137 | }, .{ |
| 30138 | .required_features = .{ .bmi, .false_deps_lzcnt_tzcnt, null, null }, |
| 30139 | .src_constraints = .{ .{ .exact_int = 32 }, .any, .any }, |
| 30140 | .patterns = &.{ |
| 30141 | .{ .src = .{ .mem, .none, .none } }, |
| 30142 | .{ .src = .{ .to_gpr, .none, .none } }, |
| 30143 | }, |
| 30144 | .dst_temps = .{ .{ .rc = .general_purpose }, .unused }, |
| 30145 | .clobbers = .{ .eflags = true }, |
| 30146 | .each = .{ .once = &.{ |
| 30147 | .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ }, |
| 30148 | .{ ._, ._, .tzcnt, .dst0d, .src0d, ._, ._ }, |
| 30149 | } }, |
| 30150 | }, .{ |
| 30151 | .required_features = .{ .bmi, null, null, null }, |
| 30152 | .src_constraints = .{ .{ .exact_int = 32 }, .any, .any }, |
| 30153 | .patterns = &.{ |
| 30154 | .{ .src = .{ .mem, .none, .none } }, |
| 30155 | .{ .src = .{ .to_gpr, .none, .none } }, |
| 30156 | }, |
| 30157 | .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } }, .unused }, |
| 30158 | .clobbers = .{ .eflags = true }, |
| 30159 | .each = .{ .once = &.{ |
| 30160 | .{ ._, ._, .tzcnt, .dst0d, .src0d, ._, ._ }, |
| 30161 | } }, |
| 30162 | }, .{ |
| 30163 | .required_features = .{ .bmi, null, null, null }, |
| 30164 | .src_constraints = .{ .{ .int = .dword }, .any, .any }, |
| 30165 | .patterns = &.{ |
| 30166 | .{ .src = .{ .to_mut_gpr, .none, .none } }, |
| 30167 | }, |
| 30168 | .dst_temps = .{ .{ .ref = .src0 }, .unused }, |
| 30169 | .clobbers = .{ .eflags = true }, |
| 30170 | .each = .{ .once = &.{ |
| 30171 | .{ ._, ._, .@"or", .src0d, .uia(1, .src0, .add_umax), ._, ._ }, |
| 30172 | .{ ._, ._, .tzcnt, .dst0d, .src0d, ._, ._ }, |
| 30173 | } }, |
| 30174 | }, .{ |
| 30175 | .required_features = .{ .@"64bit", .bmi, .false_deps_lzcnt_tzcnt, null }, |
| 30176 | .src_constraints = .{ .{ .exact_int = 64 }, .any, .any }, |
| 30177 | .patterns = &.{ |
| 30178 | .{ .src = .{ .mem, .none, .none } }, |
| 30179 | .{ .src = .{ .to_gpr, .none, .none } }, |
| 30180 | }, |
| 30181 | .dst_temps = .{ .{ .rc = .general_purpose }, .unused }, |
| 30182 | .clobbers = .{ .eflags = true }, |
| 30183 | .each = .{ .once = &.{ |
| 30184 | .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ }, |
| 30185 | .{ ._, ._, .tzcnt, .dst0q, .src0q, ._, ._ }, |
| 30186 | } }, |
| 30187 | }, .{ |
| 30188 | .required_features = .{ .@"64bit", .bmi, null, null }, |
| 30189 | .src_constraints = .{ .{ .exact_int = 64 }, .any, .any }, |
| 30190 | .patterns = &.{ |
| 30191 | .{ .src = .{ .mem, .none, .none } }, |
| 30192 | .{ .src = .{ .to_gpr, .none, .none } }, |
| 30193 | }, |
| 30194 | .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } }, .unused }, |
| 30195 | .clobbers = .{ .eflags = true }, |
| 30196 | .each = .{ .once = &.{ |
| 30197 | .{ ._, ._, .tzcnt, .dst0q, .src0q, ._, ._ }, |
| 30198 | } }, |
| 30199 | }, .{ |
| 30200 | .required_features = .{ .@"64bit", .bmi, null, null }, |
| 30201 | .src_constraints = .{ .{ .int = .qword }, .any, .any }, |
| 30202 | .patterns = &.{ |
| 30203 | .{ .src = .{ .to_mut_gpr, .none, .none } }, |
| 30204 | }, |
| 30205 | .dst_temps = .{ .{ .ref = .src0 }, .unused }, |
| 30206 | .clobbers = .{ .eflags = true }, |
| 30207 | .each = .{ .once = &.{ |
| 30208 | .{ ._, ._s, .bt, .src0q, .ua(.src0, .add_bit_size), ._, ._ }, |
| 30209 | .{ ._, ._, .tzcnt, .dst0q, .src0q, ._, ._ }, |
| 30210 | } }, |
| 30211 | }, .{ |
| 30212 | .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, null, null }, |
| 30213 | .src_constraints = .{ .{ .exact_int = 32 }, .any, .any }, |
| 30214 | .patterns = &.{ |
| 30215 | .{ .src = .{ .mem, .none, .none } }, |
| 30216 | .{ .src = .{ .to_gpr, .none, .none } }, |
| 30217 | }, |
| 30218 | .extra_temps = .{ |
| 30219 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 30220 | .unused, |
| 30221 | .unused, |
| 30222 | .unused, |
| 30223 | .unused, |
| 30224 | .unused, |
| 30225 | .unused, |
| 30226 | .unused, |
| 30227 | .unused, |
| 30228 | .unused, |
| 30229 | .unused, |
| 30230 | }, |
| 30231 | .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } }, .unused }, |
| 30232 | .clobbers = .{ .eflags = true }, |
| 30233 | .each = .{ .once = &.{ |
| 30234 | .{ ._, ._, .mov, .tmp0d, .si(32), ._, ._ }, |
| 30235 | .{ ._, ._f, .bs, .dst0d, .src0d, ._, ._ }, |
| 30236 | .{ ._, ._z, .cmov, .dst0d, .tmp0d, ._, ._ }, |
| 30237 | } }, |
| 30238 | }, .{ |
| 30239 | .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null }, |
| 30240 | .src_constraints = .{ .{ .exact_int = 32 }, .any, .any }, |
| 30241 | .patterns = &.{ |
| 30242 | .{ .src = .{ .mem, .none, .none } }, |
| 30243 | .{ .src = .{ .to_gpr, .none, .none } }, |
| 30244 | }, |
| 30245 | .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } }, .unused }, |
| 30246 | .clobbers = .{ .eflags = true }, |
| 30247 | .each = .{ .once = &.{ |
| 30248 | .{ ._, ._f, .bs, .dst0d, .src0d, ._, ._ }, |
| 30249 | .{ ._, ._nz, .j, .@"0f", ._, ._, ._ }, |
| 30250 | .{ ._, ._, .mov, .dst0d, .si(32), ._, ._ }, |
| 30251 | } }, |
| 30252 | }, .{ |
| 30253 | .src_constraints = .{ .{ .exact_int = 16 }, .any, .any }, |
| 30254 | .patterns = &.{ |
| 30255 | .{ .src = .{ .mem, .none, .none } }, |
| 30256 | .{ .src = .{ .to_gpr, .none, .none } }, |
| 30257 | }, |
| 30258 | .dst_temps = .{ .{ .rc = .general_purpose }, .unused }, |
| 30259 | .clobbers = .{ .eflags = true }, |
| 30260 | .each = .{ .once = &.{ |
| 30261 | .{ ._, ._, .mov, .dst0d, .si(16), ._, ._ }, |
| 30262 | .{ ._, ._f, .bs, .dst0w, .src0w, ._, ._ }, |
| 30263 | } }, |
| 30264 | }, .{ |
| 30265 | .src_constraints = .{ .{ .exact_int = 32 }, .any, .any }, |
| 30266 | .patterns = &.{ |
| 30267 | .{ .src = .{ .mem, .none, .none } }, |
| 30268 | .{ .src = .{ .to_gpr, .none, .none } }, |
| 30269 | }, |
| 30270 | .dst_temps = .{ .{ .rc = .general_purpose }, .unused }, |
| 30271 | .clobbers = .{ .eflags = true }, |
| 30272 | .each = .{ .once = &.{ |
| 30273 | .{ ._, ._, .mov, .dst0d, .si(32), ._, ._ }, |
| 30274 | .{ ._, ._f, .bs, .dst0d, .src0d, ._, ._ }, |
| 30275 | } }, |
| 30276 | }, .{ |
| 30277 | .src_constraints = .{ .{ .int = .dword }, .any, .any }, |
| 30278 | .patterns = &.{ |
| 30279 | .{ .src = .{ .to_mut_gpr, .none, .none } }, |
| 30280 | }, |
| 30281 | .dst_temps = .{ .{ .ref = .src0 }, .unused }, |
| 30282 | .clobbers = .{ .eflags = true }, |
| 30283 | .each = .{ .once = &.{ |
| 30284 | .{ ._, ._, .@"or", .src0d, .uia(1, .src0, .add_umax), ._, ._ }, |
| 30285 | .{ ._, ._f, .bs, .dst0d, .src0d, ._, ._ }, |
| 30286 | } }, |
| 30287 | }, .{ |
| 30288 | .required_features = .{ .@"64bit", .cmov, .bsf_bsr_0_clobbers_result, null }, |
| 30289 | .src_constraints = .{ .{ .exact_int = 64 }, .any, .any }, |
| 30290 | .patterns = &.{ |
| 30291 | .{ .src = .{ .mem, .none, .none } }, |
| 30292 | .{ .src = .{ .to_gpr, .none, .none } }, |
| 30293 | }, |
| 30294 | .extra_temps = .{ |
| 30295 | .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, |
| 30296 | .unused, |
| 30297 | .unused, |
| 30298 | .unused, |
| 30299 | .unused, |
| 30300 | .unused, |
| 30301 | .unused, |
| 30302 | .unused, |
| 30303 | .unused, |
| 30304 | .unused, |
| 30305 | .unused, |
| 30306 | }, |
| 30307 | .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } }, .unused }, |
| 30308 | .clobbers = .{ .eflags = true }, |
| 30309 | .each = .{ .once = &.{ |
| 30310 | .{ ._, ._, .mov, .tmp0d, .si(64), ._, ._ }, |
| 30311 | .{ ._, ._f, .bs, .dst0q, .src0q, ._, ._ }, |
| 30312 | .{ ._, ._z, .cmov, .dst0d, .tmp0d, ._, ._ }, |
| 30313 | } }, |
| 30314 | }, .{ |
| 30315 | .required_features = .{ .@"64bit", .bsf_bsr_0_clobbers_result, null, null }, |
| 30316 | .src_constraints = .{ .{ .exact_int = 64 }, .any, .any }, |
| 30317 | .patterns = &.{ |
| 30318 | .{ .src = .{ .mem, .none, .none } }, |
| 30319 | .{ .src = .{ .to_gpr, .none, .none } }, |
| 30320 | }, |
| 30321 | .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } }, .unused }, |
| 30322 | .clobbers = .{ .eflags = true }, |
| 30323 | .each = .{ .once = &.{ |
| 30324 | .{ ._, ._f, .bs, .dst0q, .src0q, ._, ._ }, |
| 30325 | .{ ._, ._nz, .j, .@"0f", ._, ._, ._ }, |
| 30326 | .{ ._, ._, .mov, .dst0d, .si(64), ._, ._ }, |
| 30327 | } }, |
| 30328 | }, .{ |
| 30329 | .src_constraints = .{ .{ .exact_int = 64 }, .any, .any }, |
| 30330 | .patterns = &.{ |
| 30331 | .{ .src = .{ .mem, .none, .none } }, |
| 30332 | .{ .src = .{ .to_gpr, .none, .none } }, |
| 30333 | }, |
| 30334 | .dst_temps = .{ .{ .rc = .general_purpose }, .unused }, |
| 30335 | .clobbers = .{ .eflags = true }, |
| 30336 | .each = .{ .once = &.{ |
| 30337 | .{ ._, ._, .mov, .dst0d, .si(64), ._, ._ }, |
| 30338 | .{ ._, ._f, .bs, .dst0q, .src0q, ._, ._ }, |
| 30339 | } }, |
| 30340 | }, .{ |
| 30341 | .src_constraints = .{ .{ .int = .qword }, .any, .any }, |
| 30342 | .patterns = &.{ |
| 30343 | .{ .src = .{ .to_mut_gpr, .none, .none } }, |
| 30344 | }, |
| 30345 | .dst_temps = .{ .{ .ref = .src0 }, .unused }, |
| 30346 | .clobbers = .{ .eflags = true }, |
| 30347 | .each = .{ .once = &.{ |
| 30348 | .{ ._, ._s, .bt, .src0q, .ua(.src0, .add_bit_size), ._, ._ }, |
| 30349 | .{ ._, ._f, .bs, .dst0q, .src0q, ._, ._ }, |
| 30350 | } }, |
| 30351 | }, .{ |
| 30352 | .required_features = .{ .@"64bit", .bmi, .false_deps_lzcnt_tzcnt, null }, |
| 30353 | .src_constraints = .{ .{ .remainder_int = .{ .of = .qword, .is = .qword } }, .any, .any }, |
| 30354 | .patterns = &.{ |
| 30355 | .{ .src = .{ .to_mem, .none, .none } }, |
| 30356 | }, |
| 30357 | .extra_temps = .{ |
| 30358 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 30359 | .unused, |
| 30360 | .unused, |
| 30361 | .unused, |
| 30362 | .unused, |
| 30363 | .unused, |
| 30364 | .unused, |
| 30365 | .unused, |
| 30366 | .unused, |
| 30367 | .unused, |
| 30368 | .unused, |
| 30369 | }, |
| 30370 | .dst_temps = .{ .{ .rc = .general_purpose }, .unused }, |
| 30371 | .clobbers = .{ .eflags = true }, |
| 30372 | .each = .{ .once = &.{ |
| 30373 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 30374 | .{ .@"0:", ._, .xor, .dst0d, .dst0d, ._, ._ }, |
| 30375 | .{ ._, ._, .tzcnt, .dst0q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 30376 | .{ ._, ._nc, .j, .@"0f", ._, ._, ._ }, |
| 30377 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| 30378 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 30379 | .{ ._, ._, .mov, .dst0d, .sa(.src0, .add_bit_size_sub_8_size), ._, ._ }, |
| 30380 | .{ .@"0:", ._, .lea, .dst0d, .leasia(.dst0, .@"8", .tmp0, .add_8_src0_size), ._, ._ }, |
| 30381 | } }, |
| 30382 | }, .{ |
| 30383 | .required_features = .{ .@"64bit", .bmi, null, null }, |
| 30384 | .src_constraints = .{ .{ .remainder_int = .{ .of = .qword, .is = .qword } }, .any, .any }, |
| 30385 | .patterns = &.{ |
| 30386 | .{ .src = .{ .to_mem, .none, .none } }, |
| 30387 | }, |
| 30388 | .extra_temps = .{ |
| 30389 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 30390 | .unused, |
| 30391 | .unused, |
| 30392 | .unused, |
| 30393 | .unused, |
| 30394 | .unused, |
| 30395 | .unused, |
| 30396 | .unused, |
| 30397 | .unused, |
| 30398 | .unused, |
| 30399 | .unused, |
| 30400 | }, |
| 30401 | .dst_temps = .{ .{ .rc = .general_purpose }, .unused }, |
| 30402 | .clobbers = .{ .eflags = true }, |
| 30403 | .each = .{ .once = &.{ |
| 30404 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 30405 | .{ .@"0:", ._, .tzcnt, .dst0q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 30406 | .{ ._, ._nc, .j, .@"0f", ._, ._, ._ }, |
| 30407 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| 30408 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 30409 | .{ ._, ._, .mov, .dst0d, .sa(.src0, .add_bit_size_sub_8_size), ._, ._ }, |
| 30410 | .{ .@"0:", ._, .lea, .dst0d, .leasia(.dst0, .@"8", .tmp0, .add_8_src0_size), ._, ._ }, |
| 30411 | } }, |
| 30412 | }, .{ |
| 30413 | .required_features = .{ .@"64bit", .bsf_bsr_0_clobbers_result, null, null }, |
| 30414 | .src_constraints = .{ .{ .remainder_int = .{ .of = .qword, .is = .qword } }, .any, .any }, |
| 30415 | .patterns = &.{ |
| 30416 | .{ .src = .{ .to_mem, .none, .none } }, |
| 30417 | }, |
| 30418 | .extra_temps = .{ |
| 30419 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 30420 | .unused, |
| 30421 | .unused, |
| 30422 | .unused, |
| 30423 | .unused, |
| 30424 | .unused, |
| 30425 | .unused, |
| 30426 | .unused, |
| 30427 | .unused, |
| 30428 | .unused, |
| 30429 | .unused, |
| 30430 | }, |
| 30431 | .dst_temps = .{ .{ .rc = .general_purpose }, .unused }, |
| 30432 | .clobbers = .{ .eflags = true }, |
| 30433 | .each = .{ .once = &.{ |
| 30434 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 30435 | .{ .@"0:", ._f, .bs, .dst0q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 30436 | .{ ._, ._nz, .j, .@"0f", ._, ._, ._ }, |
| 30437 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| 30438 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 30439 | .{ ._, ._, .mov, .dst0d, .sa(.src0, .add_bit_size_sub_8_size), ._, ._ }, |
| 30440 | .{ .@"0:", ._, .lea, .dst0d, .leasia(.dst0, .@"8", .tmp0, .add_8_src0_size), ._, ._ }, |
| 30441 | } }, |
| 30442 | }, .{ |
| 30443 | .required_features = .{ .@"64bit", null, null, null }, |
| 30444 | .src_constraints = .{ .{ .remainder_int = .{ .of = .qword, .is = .qword } }, .any, .any }, |
| 30445 | .patterns = &.{ |
| 30446 | .{ .src = .{ .to_mem, .none, .none } }, |
| 30447 | }, |
| 30448 | .extra_temps = .{ |
| 30449 | .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, |
| 30450 | .unused, |
| 30451 | .unused, |
| 30452 | .unused, |
| 30453 | .unused, |
| 30454 | .unused, |
| 30455 | .unused, |
| 30456 | .unused, |
| 30457 | .unused, |
| 30458 | .unused, |
| 30459 | .unused, |
| 30460 | }, |
| 30461 | .dst_temps = .{ .{ .rc = .general_purpose }, .unused }, |
| 30462 | .clobbers = .{ .eflags = true }, |
| 30463 | .each = .{ .once = &.{ |
| 30464 | .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, |
| 30465 | .{ .@"0:", ._, .xor, .dst0d, .dst0d, ._, ._ }, |
| 30466 | .{ ._, ._f, .bs, .dst0q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, |
| 30467 | .{ ._, ._nz, .j, .@"0f", ._, ._, ._ }, |
| 30468 | .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, |
| 30469 | .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, |
| 30470 | .{ ._, ._, .mov, .dst0d, .sa(.src0, .add_bit_size_sub_8_size), ._, ._ }, |
| 30471 | .{ .@"0:", ._, .lea, .dst0d, .leasia(.dst0, .@"8", .tmp0, .add_8_src0_size), ._, ._ }, |
| 30472 | } }, |
| 30473 | } }) catch |err| switch (err) { |
| 30474 | error.SelectFailed => return cg.fail("failed to select {s} {} {}", .{ |
| 30475 | @tagName(air_tag), |
| 30476 | cg.typeOf(ty_op.operand).fmt(pt), |
| 30477 | ops[0].tracking(cg), |
| 30478 | }), |
| 30479 | else => |e| return e, |
| 30480 | }; |
| 30481 | try res[0].finish(inst, &.{ty_op.operand}, &ops, cg); |
| 30482 | }, |
| 30087 | 30483 | .byte_swap => |air_tag| if (use_old) try cg.airByteSwap(inst) else fallback: { |
| 30088 | 30484 | const ty_op = air_datas[@intFromEnum(inst)].ty_op; |
| 30089 | 30485 | if (ty_op.ty.toType().isVector(zcu)) break :fallback try cg.airByteSwap(inst); |
| ... | ... | @@ -99931,6 +100327,7 @@ const Select = struct { |
| 99931 | 100327 | unaligned_size, |
| 99932 | 100328 | bit_size, |
| 99933 | 100329 | src0_bit_size, |
| 100330 | @"8_size_sub_bit_size", |
| 99934 | 100331 | len, |
| 99935 | 100332 | elem_limbs, |
| 99936 | 100333 | elem_size, |
| ... | ... | @@ -99958,6 +100355,7 @@ const Select = struct { |
| 99958 | 100355 | const sub_size: Adjust = .{ .sign = .neg, .lhs = .size, .op = .mul, .rhs = .@"1" }; |
| 99959 | 100356 | const sub_src0_size_div_8: Adjust = .{ .sign = .neg, .lhs = .src0_size, .op = .div, .rhs = .@"8" }; |
| 99960 | 100357 | const sub_src0_size: Adjust = .{ .sign = .neg, .lhs = .src0_size, .op = .mul, .rhs = .@"1" }; |
| 100358 | const add_8_src0_size: Adjust = .{ .sign = .pos, .lhs = .src0_size, .op = .mul, .rhs = .@"8" }; |
| 99961 | 100359 | const add_delta_size_div_8: Adjust = .{ .sign = .pos, .lhs = .delta_size, .op = .div, .rhs = .@"8" }; |
| 99962 | 100360 | const add_delta_elem_size: Adjust = .{ .sign = .pos, .lhs = .delta_elem_size, .op = .mul, .rhs = .@"1" }; |
| 99963 | 100361 | const add_delta_elem_size_div_8: Adjust = .{ .sign = .pos, .lhs = .delta_elem_size, .op = .div, .rhs = .@"8" }; |
| ... | ... | @@ -99972,6 +100370,7 @@ const Select = struct { |
| 99972 | 100370 | const sub_bit_size: Adjust = .{ .sign = .neg, .lhs = .bit_size, .op = .mul, .rhs = .@"1" }; |
| 99973 | 100371 | const add_src0_bit_size: Adjust = .{ .sign = .pos, .lhs = .src0_bit_size, .op = .mul, .rhs = .@"1" }; |
| 99974 | 100372 | const sub_src0_bit_size: Adjust = .{ .sign = .neg, .lhs = .src0_bit_size, .op = .mul, .rhs = .@"1" }; |
| 100373 | const add_bit_size_sub_8_size: Adjust = .{ .sign = .neg, .lhs = .@"8_size_sub_bit_size", .op = .mul, .rhs = .@"1" }; |
| 99975 | 100374 | const add_8_len: Adjust = .{ .sign = .pos, .lhs = .len, .op = .mul, .rhs = .@"8" }; |
| 99976 | 100375 | const add_4_len: Adjust = .{ .sign = .pos, .lhs = .len, .op = .mul, .rhs = .@"4" }; |
| 99977 | 100376 | const add_3_len: Adjust = .{ .sign = .pos, .lhs = .len, .op = .mul, .rhs = .@"3" }; |
| ... | ... | @@ -100683,6 +101082,10 @@ const Select = struct { |
| 100683 | 101082 | .unaligned_size => @intCast(s.cg.unalignedSize(op.flags.base.ref.typeOf(s))), |
| 100684 | 101083 | .bit_size => @intCast(op.flags.base.ref.typeOf(s).scalarType(s.cg.pt.zcu).bitSize(s.cg.pt.zcu)), |
| 100685 | 101084 | .src0_bit_size => @intCast(Select.Operand.Ref.src0.typeOf(s).scalarType(s.cg.pt.zcu).bitSize(s.cg.pt.zcu)), |
| 101085 | .@"8_size_sub_bit_size" => { |
| 101086 | const ty = op.flags.base.ref.typeOf(s); |
| 101087 | break :lhs @intCast(8 * ty.abiSize(s.cg.pt.zcu) - ty.bitSize(s.cg.pt.zcu)); |
| 101088 | }, |
| 100686 | 101089 | .len => @intCast(op.flags.base.ref.typeOf(s).vectorLen(s.cg.pt.zcu)), |
| 100687 | 101090 | .elem_limbs => @intCast(@divExact( |
| 100688 | 101091 | op.flags.base.ref.typeOf(s).scalarType(s.cg.pt.zcu).abiSize(s.cg.pt.zcu), |