mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-01 05:01:59 +01:00
[X86] Change the immediate for IN/OUT instructions to u8imm so the assembly parser will check the size.
llvm-svn: 250012
This commit is contained in:
parent
52829a95cf
commit
18c728de25
@ -2850,9 +2850,9 @@ def : InstAlias<"imul{q} {$imm, $r|$r, $imm}", (IMUL64rri8 GR64:$r, GR64:$r, i64
|
||||
def : InstAlias<"inb\t{%dx|dx}", (IN8rr), 0>;
|
||||
def : InstAlias<"inw\t{%dx|dx}", (IN16rr), 0>;
|
||||
def : InstAlias<"inl\t{%dx|dx}", (IN32rr), 0>;
|
||||
def : InstAlias<"inb\t$port", (IN8ri i8imm:$port), 0>;
|
||||
def : InstAlias<"inw\t$port", (IN16ri i8imm:$port), 0>;
|
||||
def : InstAlias<"inl\t$port", (IN32ri i8imm:$port), 0>;
|
||||
def : InstAlias<"inb\t$port", (IN8ri u8imm:$port), 0>;
|
||||
def : InstAlias<"inw\t$port", (IN16ri u8imm:$port), 0>;
|
||||
def : InstAlias<"inl\t$port", (IN32ri u8imm:$port), 0>;
|
||||
|
||||
|
||||
// jmp and call aliases for lcall and ljmp. jmp $42,$5 -> ljmp
|
||||
@ -2902,9 +2902,9 @@ def : InstAlias<"movzx {$src, $dst|$dst, $src}", (MOVZX64rr16_Q GR64:$dst, GR16:
|
||||
def : InstAlias<"outb\t{%dx|dx}", (OUT8rr), 0>;
|
||||
def : InstAlias<"outw\t{%dx|dx}", (OUT16rr), 0>;
|
||||
def : InstAlias<"outl\t{%dx|dx}", (OUT32rr), 0>;
|
||||
def : InstAlias<"outb\t$port", (OUT8ir i8imm:$port), 0>;
|
||||
def : InstAlias<"outw\t$port", (OUT16ir i8imm:$port), 0>;
|
||||
def : InstAlias<"outl\t$port", (OUT32ir i8imm:$port), 0>;
|
||||
def : InstAlias<"outb\t$port", (OUT8ir u8imm:$port), 0>;
|
||||
def : InstAlias<"outw\t$port", (OUT16ir u8imm:$port), 0>;
|
||||
def : InstAlias<"outl\t$port", (OUT32ir u8imm:$port), 0>;
|
||||
|
||||
// 'sldt <mem>' can be encoded with either sldtw or sldtq with the same
|
||||
// effect (both store to a 16-bit mem). Force to sldtw to avoid ambiguity
|
||||
|
@ -88,13 +88,13 @@ def IN32rr : I<0xED, RawFrm, (outs), (ins),
|
||||
"in{l}\t{%dx, %eax|eax, dx}", [], IIC_IN_RR>, OpSize32;
|
||||
|
||||
let Defs = [AL] in
|
||||
def IN8ri : Ii8<0xE4, RawFrm, (outs), (ins i8imm:$port),
|
||||
def IN8ri : Ii8<0xE4, RawFrm, (outs), (ins u8imm:$port),
|
||||
"in{b}\t{$port, %al|al, $port}", [], IIC_IN_RI>;
|
||||
let Defs = [AX] in
|
||||
def IN16ri : Ii8<0xE5, RawFrm, (outs), (ins i8imm:$port),
|
||||
def IN16ri : Ii8<0xE5, RawFrm, (outs), (ins u8imm:$port),
|
||||
"in{w}\t{$port, %ax|ax, $port}", [], IIC_IN_RI>, OpSize16;
|
||||
let Defs = [EAX] in
|
||||
def IN32ri : Ii8<0xE5, RawFrm, (outs), (ins i8imm:$port),
|
||||
def IN32ri : Ii8<0xE5, RawFrm, (outs), (ins u8imm:$port),
|
||||
"in{l}\t{$port, %eax|eax, $port}", [], IIC_IN_RI>, OpSize32;
|
||||
|
||||
let Uses = [DX, AL] in
|
||||
@ -108,13 +108,13 @@ def OUT32rr : I<0xEF, RawFrm, (outs), (ins),
|
||||
"out{l}\t{%eax, %dx|dx, eax}", [], IIC_OUT_RR>, OpSize32;
|
||||
|
||||
let Uses = [AL] in
|
||||
def OUT8ir : Ii8<0xE6, RawFrm, (outs), (ins i8imm:$port),
|
||||
def OUT8ir : Ii8<0xE6, RawFrm, (outs), (ins u8imm:$port),
|
||||
"out{b}\t{%al, $port|$port, al}", [], IIC_OUT_IR>;
|
||||
let Uses = [AX] in
|
||||
def OUT16ir : Ii8<0xE7, RawFrm, (outs), (ins i8imm:$port),
|
||||
def OUT16ir : Ii8<0xE7, RawFrm, (outs), (ins u8imm:$port),
|
||||
"out{w}\t{%ax, $port|$port, ax}", [], IIC_OUT_IR>, OpSize16;
|
||||
let Uses = [EAX] in
|
||||
def OUT32ir : Ii8<0xE7, RawFrm, (outs), (ins i8imm:$port),
|
||||
def OUT32ir : Ii8<0xE7, RawFrm, (outs), (ins u8imm:$port),
|
||||
"out{l}\t{%eax, $port|$port, eax}", [], IIC_OUT_IR>, OpSize32;
|
||||
|
||||
} // SchedRW
|
||||
|
@ -9,4 +9,14 @@
|
||||
int $-129
|
||||
# CHECK: error: invalid operand for instruction
|
||||
# CHECK: int $-129
|
||||
# CHECK: ^
|
||||
|
||||
inb $65535, %al
|
||||
# CHECK: error: invalid operand for instruction
|
||||
# CHECK: inb $65535, %al
|
||||
# CHECK: ^
|
||||
|
||||
outb %al, $65535
|
||||
# CHECK: error: invalid operand for instruction
|
||||
# CHECK: outb %al, $65535
|
||||
# CHECK: ^
|
||||
|
Loading…
x
Reference in New Issue
Block a user