mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-21 03:32:21 +00:00
Added ADC, SUB, SBB, and OR instructions that operate
on rAX and an immediate. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@81551 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
ae77a20148
commit
d00025a6c8
@ -458,6 +458,10 @@ def ADD64mi32 : RIi32<0x81, MRM0m, (outs), (ins i64mem:$dst, i64i32imm :$src2),
|
||||
(implicit EFLAGS)]>;
|
||||
|
||||
let Uses = [EFLAGS] in {
|
||||
|
||||
def ADC64i32 : RI<0x15, RawFrm, (outs), (ins i32imm:$src),
|
||||
"adc{q}\t{$src, %rax|%rax, $src}", []>;
|
||||
|
||||
let isTwoAddress = 1 in {
|
||||
let isCommutable = 1 in
|
||||
def ADC64rr : RI<0x11, MRMDestReg, (outs GR64:$dst), (ins GR64:$src1, GR64:$src2),
|
||||
@ -513,6 +517,9 @@ def SUB64ri32 : RIi32<0x81, MRM5r, (outs GR64:$dst),
|
||||
(implicit EFLAGS)]>;
|
||||
} // isTwoAddress
|
||||
|
||||
def SUB64i32 : RI<0x2D, RawFrm, (outs), (ins i32imm:$src),
|
||||
"sub{q}\t{$src, %rax|%rax, $src}", []>;
|
||||
|
||||
// Memory-Register Subtraction
|
||||
def SUB64mr : RI<0x29, MRMDestMem, (outs), (ins i64mem:$dst, GR64:$src2),
|
||||
"sub{q}\t{$src2, $dst|$dst, $src2}",
|
||||
@ -549,6 +556,9 @@ def SBB64ri32 : RIi32<0x81, MRM3r, (outs GR64:$dst), (ins GR64:$src1, i64i32imm:
|
||||
[(set GR64:$dst, (sube GR64:$src1, i64immSExt32:$src2))]>;
|
||||
} // isTwoAddress
|
||||
|
||||
def SBB64i32 : RI<0x1D, RawFrm, (outs), (ins i32imm:$src),
|
||||
"sbb{q}\t{$src, %rax|%rax, $src}", []>;
|
||||
|
||||
def SBB64mr : RI<0x19, MRMDestMem, (outs), (ins i64mem:$dst, GR64:$src2),
|
||||
"sbb{q}\t{$src2, $dst|$dst, $src2}",
|
||||
[(store (sube (load addr:$dst), GR64:$src2), addr:$dst)]>;
|
||||
@ -970,6 +980,9 @@ def OR64mi32 : RIi32<0x81, MRM1m, (outs), (ins i64mem:$dst, i64i32imm:$src),
|
||||
[(store (or (loadi64 addr:$dst), i64immSExt32:$src), addr:$dst),
|
||||
(implicit EFLAGS)]>;
|
||||
|
||||
def OR64i32 : RIi32<0x0D, RawFrm, (outs), (ins i32imm:$src),
|
||||
"or{q}\t{$src, %rax|%rax, $src}", []>;
|
||||
|
||||
let isTwoAddress = 1 in {
|
||||
let isCommutable = 1 in
|
||||
def XOR64rr : RI<0x31, MRMDestReg, (outs GR64:$dst), (ins GR64:$src1, GR64:$src2),
|
||||
|
@ -1786,6 +1786,13 @@ let isTwoAddress = 0 in {
|
||||
"or{l}\t{$src, $dst|$dst, $src}",
|
||||
[(store (or (load addr:$dst), i32immSExt8:$src), addr:$dst),
|
||||
(implicit EFLAGS)]>;
|
||||
|
||||
def OR8i8 : Ii8 <0x0C, RawFrm, (outs), (ins i8imm:$src),
|
||||
"or{b}\t{$src, %al|%al, $src}", []>;
|
||||
def OR16i16 : Ii16 <0x0D, RawFrm, (outs), (ins i16imm:$src),
|
||||
"or{w}\t{$src, %ax|%ax, $src}", []>, OpSize;
|
||||
def OR32i32 : Ii32 <0x0D, RawFrm, (outs), (ins i32imm:$src),
|
||||
"or{l}\t{$src, %eax|%eax, $src}", []>;
|
||||
} // isTwoAddress = 0
|
||||
|
||||
|
||||
@ -2539,6 +2546,13 @@ let isTwoAddress = 0 in {
|
||||
def ADC32mi8 : Ii8<0x83, MRM2m, (outs), (ins i32mem:$dst, i32i8imm :$src2),
|
||||
"adc{l}\t{$src2, $dst|$dst, $src2}",
|
||||
[(store (adde (load addr:$dst), i32immSExt8:$src2), addr:$dst)]>;
|
||||
|
||||
def ADC8i8 : Ii8<0x14, RawFrm, (outs), (ins i8imm:$src),
|
||||
"adc{b}\t{$src, %al|%al, $src}", []>;
|
||||
def ADC16i16 : Ii16<0x15, RawFrm, (outs), (ins i16imm:$src),
|
||||
"adc{w}\t{$src, %ax|%ax, $src}", []>, OpSize;
|
||||
def ADC32i32 : Ii32<0x15, RawFrm, (outs), (ins i32imm:$src),
|
||||
"adc{l}\t{$src, %eax|%eax, $src}", []>;
|
||||
}
|
||||
} // Uses = [EFLAGS]
|
||||
|
||||
@ -2638,6 +2652,13 @@ let isTwoAddress = 0 in {
|
||||
[(store (sub (load addr:$dst), i32immSExt8:$src2),
|
||||
addr:$dst),
|
||||
(implicit EFLAGS)]>;
|
||||
|
||||
def SUB8i8 : Ii8<0x2C, RawFrm, (outs), (ins i8imm:$src),
|
||||
"sub{b}\t{$src, %al|%al, $src}", []>;
|
||||
def SUB16i16 : Ii16<0x2D, RawFrm, (outs), (ins i16imm:$src),
|
||||
"sub{w}\t{$src, %ax|%ax, $src}", []>, OpSize;
|
||||
def SUB32i32 : Ii32<0x2D, RawFrm, (outs), (ins i32imm:$src),
|
||||
"sub{l}\t{$src, %eax|%eax, $src}", []>;
|
||||
}
|
||||
|
||||
let Uses = [EFLAGS] in {
|
||||
@ -2682,6 +2703,13 @@ let isTwoAddress = 0 in {
|
||||
def SBB32mi8 : Ii8<0x83, MRM3m, (outs), (ins i32mem:$dst, i32i8imm :$src2),
|
||||
"sbb{l}\t{$src2, $dst|$dst, $src2}",
|
||||
[(store (sube (load addr:$dst), i32immSExt8:$src2), addr:$dst)]>;
|
||||
|
||||
def SBB8i8 : Ii8<0x1C, RawFrm, (outs), (ins i8imm:$src),
|
||||
"sbb{b}\t{$src, %al|%al, $src}", []>;
|
||||
def SBB16i16 : Ii16<0x1D, RawFrm, (outs), (ins i16imm:$src),
|
||||
"sbb{w}\t{$src, %ax|%ax, $src}", []>, OpSize;
|
||||
def SBB32i32 : Ii32<0x1D, RawFrm, (outs), (ins i32imm:$src),
|
||||
"sbb{l}\t{$src, %eax|%eax, $src}", []>;
|
||||
}
|
||||
def SBB8rm : I<0x1A, MRMSrcMem, (outs GR8:$dst), (ins GR8:$src1, i8mem:$src2),
|
||||
"sbb{b}\t{$src2, $dst|$dst, $src2}",
|
||||
|
Loading…
x
Reference in New Issue
Block a user