@@ -247,55 +247,55 @@ def BSWAP64r : RI<0xC8, AddRegFrm, (outs GR64:$dst), (ins GR64:$src),
247
247
} // Constraints = "$src = $dst", SchedRW
248
248
249
249
// Bit scan instructions.
250
- let Defs = [EFLAGS] in {
251
- def BSF16rr : I<0xBC, MRMSrcReg, (outs GR16:$dst), (ins GR16:$src),
250
+ let Defs = [EFLAGS], Constraints = "$fallback = $dst" in {
251
+ def BSF16rr : I<0xBC, MRMSrcReg, (outs GR16:$dst), (ins GR16:$fallback, GR16:$ src),
252
252
"bsf{w}\t{$src, $dst|$dst, $src}",
253
- [(set GR16:$dst, EFLAGS, (X86bsf GR16:$src))]>,
253
+ [(set GR16:$dst, EFLAGS, (X86bsf GR16:$fallback, GR16:$ src))]>,
254
254
TB, OpSize16, Sched<[WriteBSF]>;
255
- def BSF16rm : I<0xBC, MRMSrcMem, (outs GR16:$dst), (ins i16mem:$src),
255
+ def BSF16rm : I<0xBC, MRMSrcMem, (outs GR16:$dst), (ins GR16:$fallback, i16mem:$src),
256
256
"bsf{w}\t{$src, $dst|$dst, $src}",
257
- [(set GR16:$dst, EFLAGS, (X86bsf (loadi16 addr:$src)))]>,
257
+ [(set GR16:$dst, EFLAGS, (X86bsf GR16:$fallback, (loadi16 addr:$src)))]>,
258
258
TB, OpSize16, Sched<[WriteBSFLd]>;
259
- def BSF32rr : I<0xBC, MRMSrcReg, (outs GR32:$dst), (ins GR32:$src),
259
+ def BSF32rr : I<0xBC, MRMSrcReg, (outs GR32:$dst), (ins GR32:$fallback, GR32:$ src),
260
260
"bsf{l}\t{$src, $dst|$dst, $src}",
261
- [(set GR32:$dst, EFLAGS, (X86bsf GR32:$src))]>,
261
+ [(set GR32:$dst, EFLAGS, (X86bsf GR32:$fallback, GR32:$ src))]>,
262
262
TB, OpSize32, Sched<[WriteBSF]>;
263
- def BSF32rm : I<0xBC, MRMSrcMem, (outs GR32:$dst), (ins i32mem:$src),
263
+ def BSF32rm : I<0xBC, MRMSrcMem, (outs GR32:$dst), (ins GR32:$fallback, i32mem:$src),
264
264
"bsf{l}\t{$src, $dst|$dst, $src}",
265
- [(set GR32:$dst, EFLAGS, (X86bsf (loadi32 addr:$src)))]>,
265
+ [(set GR32:$dst, EFLAGS, (X86bsf GR32:$fallback, (loadi32 addr:$src)))]>,
266
266
TB, OpSize32, Sched<[WriteBSFLd]>;
267
- def BSF64rr : RI<0xBC, MRMSrcReg, (outs GR64:$dst), (ins GR64:$src),
267
+ def BSF64rr : RI<0xBC, MRMSrcReg, (outs GR64:$dst), (ins GR64:$fallback, GR64:$ src),
268
268
"bsf{q}\t{$src, $dst|$dst, $src}",
269
- [(set GR64:$dst, EFLAGS, (X86bsf GR64:$src))]>,
269
+ [(set GR64:$dst, EFLAGS, (X86bsf GR64:$fallback, GR64:$ src))]>,
270
270
TB, Sched<[WriteBSF]>;
271
- def BSF64rm : RI<0xBC, MRMSrcMem, (outs GR64:$dst), (ins i64mem:$src),
271
+ def BSF64rm : RI<0xBC, MRMSrcMem, (outs GR64:$dst), (ins GR64:$fallback, i64mem:$src),
272
272
"bsf{q}\t{$src, $dst|$dst, $src}",
273
- [(set GR64:$dst, EFLAGS, (X86bsf (loadi64 addr:$src)))]>,
273
+ [(set GR64:$dst, EFLAGS, (X86bsf GR64:$fallback, (loadi64 addr:$src)))]>,
274
274
TB, Sched<[WriteBSFLd]>;
275
275
276
- def BSR16rr : I<0xBD, MRMSrcReg, (outs GR16:$dst), (ins GR16:$src),
276
+ def BSR16rr : I<0xBD, MRMSrcReg, (outs GR16:$dst), (ins GR16:$fallback, GR16:$ src),
277
277
"bsr{w}\t{$src, $dst|$dst, $src}",
278
- [(set GR16:$dst, EFLAGS, (X86bsr GR16:$src))]>,
278
+ [(set GR16:$dst, EFLAGS, (X86bsr GR16:$fallback, GR16:$ src))]>,
279
279
TB, OpSize16, Sched<[WriteBSR]>;
280
- def BSR16rm : I<0xBD, MRMSrcMem, (outs GR16:$dst), (ins i16mem:$src),
280
+ def BSR16rm : I<0xBD, MRMSrcMem, (outs GR16:$dst), (ins GR16:$fallback, i16mem:$src),
281
281
"bsr{w}\t{$src, $dst|$dst, $src}",
282
- [(set GR16:$dst, EFLAGS, (X86bsr (loadi16 addr:$src)))]>,
282
+ [(set GR16:$dst, EFLAGS, (X86bsr GR16:$fallback, (loadi16 addr:$src)))]>,
283
283
TB, OpSize16, Sched<[WriteBSRLd]>;
284
- def BSR32rr : I<0xBD, MRMSrcReg, (outs GR32:$dst), (ins GR32:$src),
284
+ def BSR32rr : I<0xBD, MRMSrcReg, (outs GR32:$dst), (ins GR32:$fallback, GR32:$ src),
285
285
"bsr{l}\t{$src, $dst|$dst, $src}",
286
- [(set GR32:$dst, EFLAGS, (X86bsr GR32:$src))]>,
286
+ [(set GR32:$dst, EFLAGS, (X86bsr GR32:$fallback, GR32:$ src))]>,
287
287
TB, OpSize32, Sched<[WriteBSR]>;
288
- def BSR32rm : I<0xBD, MRMSrcMem, (outs GR32:$dst), (ins i32mem:$src),
288
+ def BSR32rm : I<0xBD, MRMSrcMem, (outs GR32:$dst), (ins GR32:$fallback, i32mem:$src),
289
289
"bsr{l}\t{$src, $dst|$dst, $src}",
290
- [(set GR32:$dst, EFLAGS, (X86bsr (loadi32 addr:$src)))]>,
290
+ [(set GR32:$dst, EFLAGS, (X86bsr GR32:$fallback, (loadi32 addr:$src)))]>,
291
291
TB, OpSize32, Sched<[WriteBSRLd]>;
292
- def BSR64rr : RI<0xBD, MRMSrcReg, (outs GR64:$dst), (ins GR64:$src),
292
+ def BSR64rr : RI<0xBD, MRMSrcReg, (outs GR64:$dst), (ins GR64:$fallback, GR64:$ src),
293
293
"bsr{q}\t{$src, $dst|$dst, $src}",
294
- [(set GR64:$dst, EFLAGS, (X86bsr GR64:$src))]>,
294
+ [(set GR64:$dst, EFLAGS, (X86bsr GR64:$fallback, GR64:$ src))]>,
295
295
TB, Sched<[WriteBSR]>;
296
- def BSR64rm : RI<0xBD, MRMSrcMem, (outs GR64:$dst), (ins i64mem:$src),
296
+ def BSR64rm : RI<0xBD, MRMSrcMem, (outs GR64:$dst), (ins GR64:$fallback, i64mem:$src),
297
297
"bsr{q}\t{$src, $dst|$dst, $src}",
298
- [(set GR64:$dst, EFLAGS, (X86bsr (loadi64 addr:$src)))]>,
298
+ [(set GR64:$dst, EFLAGS, (X86bsr GR64:$fallback, (loadi64 addr:$src)))]>,
299
299
TB, Sched<[WriteBSRLd]>;
300
300
} // Defs = [EFLAGS]
301
301
0 commit comments