301
301
// String Pseudo Instructions
303
303
let Defs = [ECX,EDI,ESI], Uses = [ECX,EDI,ESI], isCodeGenOnly = 1 in {
304
def REP_MOVSB : I<0xA4, RawFrm, (outs), (ins), "{rep;movsb|rep movsb}",
305
[(X86rep_movs i8)], IIC_REP_MOVS>, REP;
306
def REP_MOVSW : I<0xA5, RawFrm, (outs), (ins), "{rep;movsw|rep movsw}",
307
[(X86rep_movs i16)], IIC_REP_MOVS>, REP, OpSize;
308
def REP_MOVSD : I<0xA5, RawFrm, (outs), (ins), "{rep;movsl|rep movsd}",
309
[(X86rep_movs i32)], IIC_REP_MOVS>, REP;
312
let Defs = [RCX,RDI,RSI], Uses = [RCX,RDI,RSI], isCodeGenOnly = 1 in
313
def REP_MOVSQ : RI<0xA5, RawFrm, (outs), (ins), "{rep;movsq|rep movsq}",
314
[(X86rep_movs i64)], IIC_REP_MOVS>, REP;
304
def REP_MOVSB_32 : I<0xA4, RawFrm, (outs), (ins), "{rep;movsb|rep movsb}",
305
[(X86rep_movs i8)], IIC_REP_MOVS>, REP,
306
Requires<[In32BitMode]>;
307
def REP_MOVSW_32 : I<0xA5, RawFrm, (outs), (ins), "{rep;movsw|rep movsw}",
308
[(X86rep_movs i16)], IIC_REP_MOVS>, REP, OpSize,
309
Requires<[In32BitMode]>;
310
def REP_MOVSD_32 : I<0xA5, RawFrm, (outs), (ins), "{rep;movsl|rep movsd}",
311
[(X86rep_movs i32)], IIC_REP_MOVS>, REP,
312
Requires<[In32BitMode]>;
315
let Defs = [RCX,RDI,RSI], Uses = [RCX,RDI,RSI], isCodeGenOnly = 1 in {
316
def REP_MOVSB_64 : I<0xA4, RawFrm, (outs), (ins), "{rep;movsb|rep movsb}",
317
[(X86rep_movs i8)], IIC_REP_MOVS>, REP,
318
Requires<[In64BitMode]>;
319
def REP_MOVSW_64 : I<0xA5, RawFrm, (outs), (ins), "{rep;movsw|rep movsw}",
320
[(X86rep_movs i16)], IIC_REP_MOVS>, REP, OpSize,
321
Requires<[In64BitMode]>;
322
def REP_MOVSD_64 : I<0xA5, RawFrm, (outs), (ins), "{rep;movsl|rep movsd}",
323
[(X86rep_movs i32)], IIC_REP_MOVS>, REP,
324
Requires<[In64BitMode]>;
325
def REP_MOVSQ_64 : RI<0xA5, RawFrm, (outs), (ins), "{rep;movsq|rep movsq}",
326
[(X86rep_movs i64)], IIC_REP_MOVS>, REP,
327
Requires<[In64BitMode]>;
317
330
// FIXME: Should use "(X86rep_stos AL)" as the pattern.
318
let Defs = [ECX,EDI], Uses = [AL,ECX,EDI], isCodeGenOnly = 1 in
319
def REP_STOSB : I<0xAA, RawFrm, (outs), (ins), "{rep;stosb|rep stosb}",
320
[(X86rep_stos i8)], IIC_REP_STOS>, REP;
321
let Defs = [ECX,EDI], Uses = [AX,ECX,EDI], isCodeGenOnly = 1 in
322
def REP_STOSW : I<0xAB, RawFrm, (outs), (ins), "{rep;stosw|rep stosw}",
323
[(X86rep_stos i16)], IIC_REP_STOS>, REP, OpSize;
324
let Defs = [ECX,EDI], Uses = [EAX,ECX,EDI], isCodeGenOnly = 1 in
325
def REP_STOSD : I<0xAB, RawFrm, (outs), (ins), "{rep;stosl|rep stosd}",
326
[(X86rep_stos i32)], IIC_REP_STOS>, REP;
328
let Defs = [RCX,RDI], Uses = [RAX,RCX,RDI], isCodeGenOnly = 1 in
329
def REP_STOSQ : RI<0xAB, RawFrm, (outs), (ins), "{rep;stosq|rep stosq}",
330
[(X86rep_stos i64)], IIC_REP_STOS>, REP;
331
let Defs = [ECX,EDI], isCodeGenOnly = 1 in {
332
let Uses = [AL,ECX,EDI] in
333
def REP_STOSB_32 : I<0xAA, RawFrm, (outs), (ins), "{rep;stosb|rep stosb}",
334
[(X86rep_stos i8)], IIC_REP_STOS>, REP,
335
Requires<[In32BitMode]>;
336
let Uses = [AX,ECX,EDI] in
337
def REP_STOSW_32 : I<0xAB, RawFrm, (outs), (ins), "{rep;stosw|rep stosw}",
338
[(X86rep_stos i16)], IIC_REP_STOS>, REP, OpSize,
339
Requires<[In32BitMode]>;
340
let Uses = [EAX,ECX,EDI] in
341
def REP_STOSD_32 : I<0xAB, RawFrm, (outs), (ins), "{rep;stosl|rep stosd}",
342
[(X86rep_stos i32)], IIC_REP_STOS>, REP,
343
Requires<[In32BitMode]>;
346
let Defs = [RCX,RDI], isCodeGenOnly = 1 in {
347
let Uses = [AL,RCX,RDI] in
348
def REP_STOSB_64 : I<0xAA, RawFrm, (outs), (ins), "{rep;stosb|rep stosb}",
349
[(X86rep_stos i8)], IIC_REP_STOS>, REP,
350
Requires<[In64BitMode]>;
351
let Uses = [AX,RCX,RDI] in
352
def REP_STOSW_64 : I<0xAB, RawFrm, (outs), (ins), "{rep;stosw|rep stosw}",
353
[(X86rep_stos i16)], IIC_REP_STOS>, REP, OpSize,
354
Requires<[In64BitMode]>;
355
let Uses = [RAX,RCX,RDI] in
356
def REP_STOSD_64 : I<0xAB, RawFrm, (outs), (ins), "{rep;stosl|rep stosd}",
357
[(X86rep_stos i32)], IIC_REP_STOS>, REP,
358
Requires<[In64BitMode]>;
360
let Uses = [RAX,RCX,RDI] in
361
def REP_STOSQ_64 : RI<0xAB, RawFrm, (outs), (ins), "{rep;stosq|rep stosq}",
362
[(X86rep_stos i64)], IIC_REP_STOS>, REP,
363
Requires<[In64BitMode]>;
333
366
//===----------------------------------------------------------------------===//
334
367
// Thread Local Storage Instructions