forked from OSchip/llvm-project
[X86] Change 32 and 64 bit versions of LSL instruction have a 16-bit memory operand.
This matches the Intel and AMD documentation and is consistent with the LAR instruction. llvm-svn: 325197
This commit is contained in:
parent
b4c83a0bff
commit
386cfa08a8
|
@ -213,13 +213,14 @@ def LAR32rm : I<0x02, MRMSrcMem, (outs GR32:$dst), (ins i16mem:$src),
|
|||
def LAR32rr : I<0x02, MRMSrcReg, (outs GR32:$dst), (ins GR32:$src),
|
||||
"lar{l}\t{$src, $dst|$dst, $src}", [], IIC_LAR_RR>, TB,
|
||||
OpSize32;
|
||||
// i16mem operand in LAR64rm and GR32 operand in LAR32rr is not a typo.
|
||||
// i16mem operand in LAR64rm and GR32 operand in LAR64rr is not a typo.
|
||||
let mayLoad = 1 in
|
||||
def LAR64rm : RI<0x02, MRMSrcMem, (outs GR64:$dst), (ins i16mem:$src),
|
||||
"lar{q}\t{$src, $dst|$dst, $src}", [], IIC_LAR_RM>, TB;
|
||||
def LAR64rr : RI<0x02, MRMSrcReg, (outs GR64:$dst), (ins GR32:$src),
|
||||
"lar{q}\t{$src, $dst|$dst, $src}", [], IIC_LAR_RR>, TB;
|
||||
|
||||
// i16mem operand in LSL32rm and GR32 operand in LSL32rr is not a typo.
|
||||
let mayLoad = 1 in
|
||||
def LSL16rm : I<0x03, MRMSrcMem, (outs GR16:$dst), (ins i16mem:$src),
|
||||
"lsl{w}\t{$src, $dst|$dst, $src}", [], IIC_LSL_RM>, TB,
|
||||
|
@ -227,17 +228,18 @@ def LSL16rm : I<0x03, MRMSrcMem, (outs GR16:$dst), (ins i16mem:$src),
|
|||
def LSL16rr : I<0x03, MRMSrcReg, (outs GR16:$dst), (ins GR16:$src),
|
||||
"lsl{w}\t{$src, $dst|$dst, $src}", [], IIC_LSL_RR>, TB,
|
||||
OpSize16;
|
||||
// i16mem operand in LSL64rm and GR32 operand in LSL64rr is not a typo.
|
||||
let mayLoad = 1 in
|
||||
def LSL32rm : I<0x03, MRMSrcMem, (outs GR32:$dst), (ins i32mem:$src),
|
||||
def LSL32rm : I<0x03, MRMSrcMem, (outs GR32:$dst), (ins i16mem:$src),
|
||||
"lsl{l}\t{$src, $dst|$dst, $src}", [], IIC_LSL_RM>, TB,
|
||||
OpSize32;
|
||||
def LSL32rr : I<0x03, MRMSrcReg, (outs GR32:$dst), (ins GR32:$src),
|
||||
"lsl{l}\t{$src, $dst|$dst, $src}", [], IIC_LSL_RR>, TB,
|
||||
OpSize32;
|
||||
let mayLoad = 1 in
|
||||
def LSL64rm : RI<0x03, MRMSrcMem, (outs GR64:$dst), (ins i64mem:$src),
|
||||
def LSL64rm : RI<0x03, MRMSrcMem, (outs GR64:$dst), (ins i16mem:$src),
|
||||
"lsl{q}\t{$src, $dst|$dst, $src}", [], IIC_LSL_RM>, TB;
|
||||
def LSL64rr : RI<0x03, MRMSrcReg, (outs GR64:$dst), (ins GR64:$src),
|
||||
def LSL64rr : RI<0x03, MRMSrcReg, (outs GR64:$dst), (ins GR32:$src),
|
||||
"lsl{q}\t{$src, $dst|$dst, $src}", [], IIC_LSL_RR>, TB;
|
||||
|
||||
def INVLPG : I<0x01, MRM7m, (outs), (ins i8mem:$addr), "invlpg\t$addr",
|
||||
|
|
|
@ -875,3 +875,11 @@ punpcklwd mm0, dword ptr [rsp]
|
|||
// CHECK: punpckldq
|
||||
punpckldq mm0, dword ptr [rsp]
|
||||
|
||||
// CHECK: lslq (%eax), %rbx
|
||||
lsl rbx, word ptr [eax]
|
||||
|
||||
// CHECK: lsll (%eax), %ebx
|
||||
lsl ebx, word ptr [eax]
|
||||
|
||||
// CHECK: lslw (%eax), %bx
|
||||
lsl bx, word ptr [eax]
|
||||
|
|
Loading…
Reference in New Issue