Add Def/Use of CPSR for Thumb-1 instructions.
llvm-svn: 74219
This commit is contained in:
parent
4a5a561a24
commit
e85169cd1b
|
|
@ -294,103 +294,134 @@ def tPUSH : TI<(outs), (ins reglist:$src1, variable_ops),
|
||||||
// Arithmetic Instructions.
|
// Arithmetic Instructions.
|
||||||
//
|
//
|
||||||
|
|
||||||
// Add with carry
|
// Add with carry register
|
||||||
let isCommutable = 1 in
|
let isCommutable = 1, Defs = [CPSR], Uses = [CPSR] in
|
||||||
def tADC : T1It<(outs tGPR:$dst), (ins tGPR:$lhs, tGPR:$rhs),
|
def tADCS : T1It<(outs tGPR:$dst), (ins tGPR:$lhs, tGPR:$rhs),
|
||||||
"adc $dst, $rhs",
|
"adc $dst, $rhs",
|
||||||
[(set tGPR:$dst, (adde tGPR:$lhs, tGPR:$rhs))]>;
|
[(set tGPR:$dst, (adde tGPR:$lhs, tGPR:$rhs))]>;
|
||||||
|
|
||||||
def tADDS : T1I<(outs tGPR:$dst), (ins tGPR:$lhs, tGPR:$rhs),
|
|
||||||
"add $dst, $lhs, $rhs",
|
|
||||||
[(set tGPR:$dst, (addc tGPR:$lhs, tGPR:$rhs))]>;
|
|
||||||
|
|
||||||
|
|
||||||
|
// Add immediate
|
||||||
|
let Defs = [CPSR] in {
|
||||||
def tADDi3 : T1I<(outs tGPR:$dst), (ins tGPR:$lhs, i32imm:$rhs),
|
def tADDi3 : T1I<(outs tGPR:$dst), (ins tGPR:$lhs, i32imm:$rhs),
|
||||||
"add $dst, $lhs, $rhs",
|
"add $dst, $lhs, $rhs",
|
||||||
[(set tGPR:$dst, (add tGPR:$lhs, imm0_7:$rhs))]>;
|
[(set tGPR:$dst, (add tGPR:$lhs, imm0_7:$rhs))]>;
|
||||||
|
def tADDSi3 : T1I<(outs tGPR:$dst), (ins tGPR:$lhs, i32imm:$rhs),
|
||||||
|
"add $dst, $lhs, $rhs",
|
||||||
|
[(set tGPR:$dst, (addc tGPR:$lhs, imm0_7:$rhs))]>;
|
||||||
|
}
|
||||||
|
|
||||||
|
let Defs = [CPSR] in {
|
||||||
def tADDi8 : T1It<(outs tGPR:$dst), (ins tGPR:$lhs, i32imm:$rhs),
|
def tADDi8 : T1It<(outs tGPR:$dst), (ins tGPR:$lhs, i32imm:$rhs),
|
||||||
"add $dst, $rhs",
|
"add $dst, $rhs",
|
||||||
[(set tGPR:$dst, (add tGPR:$lhs, imm8_255:$rhs))]>;
|
[(set tGPR:$dst, (add tGPR:$lhs, imm8_255:$rhs))]>;
|
||||||
|
def tADDSi8 : T1It<(outs tGPR:$dst), (ins tGPR:$lhs, i32imm:$rhs),
|
||||||
|
"add $dst, $rhs",
|
||||||
|
[(set tGPR:$dst, (addc tGPR:$lhs, imm8_255:$rhs))]>;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add register
|
||||||
|
let isCommutable = 1, Defs = [CPSR] in {
|
||||||
def tADDrr : T1I<(outs tGPR:$dst), (ins tGPR:$lhs, tGPR:$rhs),
|
def tADDrr : T1I<(outs tGPR:$dst), (ins tGPR:$lhs, tGPR:$rhs),
|
||||||
"add $dst, $lhs, $rhs",
|
"add $dst, $lhs, $rhs",
|
||||||
[(set tGPR:$dst, (add tGPR:$lhs, tGPR:$rhs))]>;
|
[(set tGPR:$dst, (add tGPR:$lhs, tGPR:$rhs))]>;
|
||||||
|
def tADDSrr : T1I<(outs tGPR:$dst), (ins tGPR:$lhs, tGPR:$rhs),
|
||||||
|
"add $dst, $lhs, $rhs",
|
||||||
|
[(set tGPR:$dst, (addc tGPR:$lhs, tGPR:$rhs))]>;
|
||||||
|
}
|
||||||
|
|
||||||
let neverHasSideEffects = 1 in
|
let neverHasSideEffects = 1 in
|
||||||
def tADDhirr : T1It<(outs tGPR:$dst), (ins GPR:$lhs, GPR:$rhs),
|
def tADDhirr : T1It<(outs tGPR:$dst), (ins GPR:$lhs, GPR:$rhs),
|
||||||
"add $dst, $rhs @ addhirr", []>;
|
"add $dst, $rhs @ addhirr", []>;
|
||||||
|
|
||||||
let isCommutable = 1 in
|
// And register
|
||||||
|
let isCommutable = 1, Defs = [CPSR] in
|
||||||
def tAND : T1It<(outs tGPR:$dst), (ins tGPR:$lhs, tGPR:$rhs),
|
def tAND : T1It<(outs tGPR:$dst), (ins tGPR:$lhs, tGPR:$rhs),
|
||||||
"and $dst, $rhs",
|
"and $dst, $rhs",
|
||||||
[(set tGPR:$dst, (and tGPR:$lhs, tGPR:$rhs))]>;
|
[(set tGPR:$dst, (and tGPR:$lhs, tGPR:$rhs))]>;
|
||||||
|
|
||||||
|
// ASR immediate
|
||||||
|
let Defs = [CPSR] in
|
||||||
def tASRri : T1I<(outs tGPR:$dst), (ins tGPR:$lhs, i32imm:$rhs),
|
def tASRri : T1I<(outs tGPR:$dst), (ins tGPR:$lhs, i32imm:$rhs),
|
||||||
"asr $dst, $lhs, $rhs",
|
"asr $dst, $lhs, $rhs",
|
||||||
[(set tGPR:$dst, (sra tGPR:$lhs, (i32 imm:$rhs)))]>;
|
[(set tGPR:$dst, (sra tGPR:$lhs, (i32 imm:$rhs)))]>;
|
||||||
|
|
||||||
|
// ASR register
|
||||||
|
let Defs = [CPSR] in
|
||||||
def tASRrr : T1It<(outs tGPR:$dst), (ins tGPR:$lhs, tGPR:$rhs),
|
def tASRrr : T1It<(outs tGPR:$dst), (ins tGPR:$lhs, tGPR:$rhs),
|
||||||
"asr $dst, $rhs",
|
"asr $dst, $rhs",
|
||||||
[(set tGPR:$dst, (sra tGPR:$lhs, tGPR:$rhs))]>;
|
[(set tGPR:$dst, (sra tGPR:$lhs, tGPR:$rhs))]>;
|
||||||
|
|
||||||
|
// BIC register
|
||||||
|
let Defs = [CPSR] in
|
||||||
def tBIC : T1It<(outs tGPR:$dst), (ins tGPR:$lhs, tGPR:$rhs),
|
def tBIC : T1It<(outs tGPR:$dst), (ins tGPR:$lhs, tGPR:$rhs),
|
||||||
"bic $dst, $rhs",
|
"bic $dst, $rhs",
|
||||||
[(set tGPR:$dst, (and tGPR:$lhs, (not tGPR:$rhs)))]>;
|
[(set tGPR:$dst, (and tGPR:$lhs, (not tGPR:$rhs)))]>;
|
||||||
|
|
||||||
|
// CMN register
|
||||||
|
let Defs = [CPSR] in {
|
||||||
def tCMN : T1I<(outs), (ins tGPR:$lhs, tGPR:$rhs),
|
def tCMN : T1I<(outs), (ins tGPR:$lhs, tGPR:$rhs),
|
||||||
"cmn $lhs, $rhs",
|
"cmn $lhs, $rhs",
|
||||||
[(ARMcmp tGPR:$lhs, (ineg tGPR:$rhs))]>;
|
[(ARMcmp tGPR:$lhs, (ineg tGPR:$rhs))]>;
|
||||||
|
|
||||||
def tCMPi8 : T1I<(outs), (ins tGPR:$lhs, i32imm:$rhs),
|
|
||||||
"cmp $lhs, $rhs",
|
|
||||||
[(ARMcmp tGPR:$lhs, imm0_255:$rhs)]>;
|
|
||||||
|
|
||||||
def tCMPr : T1I<(outs), (ins tGPR:$lhs, tGPR:$rhs),
|
|
||||||
"cmp $lhs, $rhs",
|
|
||||||
[(ARMcmp tGPR:$lhs, tGPR:$rhs)]>;
|
|
||||||
|
|
||||||
def tTST : T1I<(outs), (ins tGPR:$lhs, tGPR:$rhs),
|
|
||||||
"tst $lhs, $rhs",
|
|
||||||
[(ARMcmpNZ (and tGPR:$lhs, tGPR:$rhs), 0)]>;
|
|
||||||
|
|
||||||
def tCMNNZ : T1I<(outs), (ins tGPR:$lhs, tGPR:$rhs),
|
def tCMNNZ : T1I<(outs), (ins tGPR:$lhs, tGPR:$rhs),
|
||||||
"cmn $lhs, $rhs",
|
"cmn $lhs, $rhs",
|
||||||
[(ARMcmpNZ tGPR:$lhs, (ineg tGPR:$rhs))]>;
|
[(ARMcmpNZ tGPR:$lhs, (ineg tGPR:$rhs))]>;
|
||||||
|
}
|
||||||
|
|
||||||
|
// CMP immediate
|
||||||
|
let Defs = [CPSR] in {
|
||||||
|
def tCMPi8 : T1I<(outs), (ins tGPR:$lhs, i32imm:$rhs),
|
||||||
|
"cmp $lhs, $rhs",
|
||||||
|
[(ARMcmp tGPR:$lhs, imm0_255:$rhs)]>;
|
||||||
def tCMPNZi8 : T1I<(outs), (ins tGPR:$lhs, i32imm:$rhs),
|
def tCMPNZi8 : T1I<(outs), (ins tGPR:$lhs, i32imm:$rhs),
|
||||||
"cmp $lhs, $rhs",
|
"cmp $lhs, $rhs",
|
||||||
[(ARMcmpNZ tGPR:$lhs, imm0_255:$rhs)]>;
|
[(ARMcmpNZ tGPR:$lhs, imm0_255:$rhs)]>;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// CMP register
|
||||||
|
let Defs = [CPSR] in {
|
||||||
|
def tCMPr : T1I<(outs), (ins tGPR:$lhs, tGPR:$rhs),
|
||||||
|
"cmp $lhs, $rhs",
|
||||||
|
[(ARMcmp tGPR:$lhs, tGPR:$rhs)]>;
|
||||||
def tCMPNZr : T1I<(outs), (ins tGPR:$lhs, tGPR:$rhs),
|
def tCMPNZr : T1I<(outs), (ins tGPR:$lhs, tGPR:$rhs),
|
||||||
"cmp $lhs, $rhs",
|
"cmp $lhs, $rhs",
|
||||||
[(ARMcmpNZ tGPR:$lhs, tGPR:$rhs)]>;
|
[(ARMcmpNZ tGPR:$lhs, tGPR:$rhs)]>;
|
||||||
|
}
|
||||||
|
|
||||||
// TODO: A7-37: CMP(3) - cmp hi regs
|
// TODO: A7-37: CMP(3) - cmp hi regs
|
||||||
|
|
||||||
let isCommutable = 1 in
|
// XOR register
|
||||||
|
let isCommutable = 1, Defs = [CPSR] in
|
||||||
def tEOR : T1It<(outs tGPR:$dst), (ins tGPR:$lhs, tGPR:$rhs),
|
def tEOR : T1It<(outs tGPR:$dst), (ins tGPR:$lhs, tGPR:$rhs),
|
||||||
"eor $dst, $rhs",
|
"eor $dst, $rhs",
|
||||||
[(set tGPR:$dst, (xor tGPR:$lhs, tGPR:$rhs))]>;
|
[(set tGPR:$dst, (xor tGPR:$lhs, tGPR:$rhs))]>;
|
||||||
|
|
||||||
|
// LSL immediate
|
||||||
|
let Defs = [CPSR] in
|
||||||
def tLSLri : T1I<(outs tGPR:$dst), (ins tGPR:$lhs, i32imm:$rhs),
|
def tLSLri : T1I<(outs tGPR:$dst), (ins tGPR:$lhs, i32imm:$rhs),
|
||||||
"lsl $dst, $lhs, $rhs",
|
"lsl $dst, $lhs, $rhs",
|
||||||
[(set tGPR:$dst, (shl tGPR:$lhs, (i32 imm:$rhs)))]>;
|
[(set tGPR:$dst, (shl tGPR:$lhs, (i32 imm:$rhs)))]>;
|
||||||
|
|
||||||
|
// LSL register
|
||||||
|
let Defs = [CPSR] in
|
||||||
def tLSLrr : T1It<(outs tGPR:$dst), (ins tGPR:$lhs, tGPR:$rhs),
|
def tLSLrr : T1It<(outs tGPR:$dst), (ins tGPR:$lhs, tGPR:$rhs),
|
||||||
"lsl $dst, $rhs",
|
"lsl $dst, $rhs",
|
||||||
[(set tGPR:$dst, (shl tGPR:$lhs, tGPR:$rhs))]>;
|
[(set tGPR:$dst, (shl tGPR:$lhs, tGPR:$rhs))]>;
|
||||||
|
|
||||||
|
// LSR immediate
|
||||||
|
let Defs = [CPSR] in
|
||||||
def tLSRri : T1I<(outs tGPR:$dst), (ins tGPR:$lhs, i32imm:$rhs),
|
def tLSRri : T1I<(outs tGPR:$dst), (ins tGPR:$lhs, i32imm:$rhs),
|
||||||
"lsr $dst, $lhs, $rhs",
|
"lsr $dst, $lhs, $rhs",
|
||||||
[(set tGPR:$dst, (srl tGPR:$lhs, (i32 imm:$rhs)))]>;
|
[(set tGPR:$dst, (srl tGPR:$lhs, (i32 imm:$rhs)))]>;
|
||||||
|
|
||||||
|
// LSR register
|
||||||
|
let Defs = [CPSR] in
|
||||||
def tLSRrr : T1It<(outs tGPR:$dst), (ins tGPR:$lhs, tGPR:$rhs),
|
def tLSRrr : T1It<(outs tGPR:$dst), (ins tGPR:$lhs, tGPR:$rhs),
|
||||||
"lsr $dst, $rhs",
|
"lsr $dst, $rhs",
|
||||||
[(set tGPR:$dst, (srl tGPR:$lhs, tGPR:$rhs))]>;
|
[(set tGPR:$dst, (srl tGPR:$lhs, tGPR:$rhs))]>;
|
||||||
|
|
||||||
// FIXME: This is not rematerializable because mov changes the condition code.
|
// move register
|
||||||
|
let Defs = [CPSR] in
|
||||||
def tMOVi8 : T1I<(outs tGPR:$dst), (ins i32imm:$src),
|
def tMOVi8 : T1I<(outs tGPR:$dst), (ins i32imm:$src),
|
||||||
"mov $dst, $src",
|
"mov $dst, $src",
|
||||||
[(set tGPR:$dst, imm0_255:$src)]>;
|
[(set tGPR:$dst, imm0_255:$src)]>;
|
||||||
|
|
@ -411,25 +442,31 @@ def tMOVhir2hir : T1I<(outs GPR:$dst), (ins GPR:$src),
|
||||||
"cpy $dst, $src\t@ hir2hir", []>;
|
"cpy $dst, $src\t@ hir2hir", []>;
|
||||||
} // neverHasSideEffects
|
} // neverHasSideEffects
|
||||||
|
|
||||||
let isCommutable = 1 in
|
// multiply register
|
||||||
|
let isCommutable = 1, Defs = [CPSR] in
|
||||||
def tMUL : T1It<(outs tGPR:$dst), (ins tGPR:$lhs, tGPR:$rhs),
|
def tMUL : T1It<(outs tGPR:$dst), (ins tGPR:$lhs, tGPR:$rhs),
|
||||||
"mul $dst, $rhs",
|
"mul $dst, $rhs",
|
||||||
[(set tGPR:$dst, (mul tGPR:$lhs, tGPR:$rhs))]>;
|
[(set tGPR:$dst, (mul tGPR:$lhs, tGPR:$rhs))]>;
|
||||||
|
|
||||||
|
// move inverse register
|
||||||
|
let Defs = [CPSR] in
|
||||||
def tMVN : T1I<(outs tGPR:$dst), (ins tGPR:$src),
|
def tMVN : T1I<(outs tGPR:$dst), (ins tGPR:$src),
|
||||||
"mvn $dst, $src",
|
"mvn $dst, $src",
|
||||||
[(set tGPR:$dst, (not tGPR:$src))]>;
|
[(set tGPR:$dst, (not tGPR:$src))]>;
|
||||||
|
|
||||||
|
// negate register
|
||||||
|
let Defs = [CPSR] in
|
||||||
def tNEG : T1I<(outs tGPR:$dst), (ins tGPR:$src),
|
def tNEG : T1I<(outs tGPR:$dst), (ins tGPR:$src),
|
||||||
"neg $dst, $src",
|
"neg $dst, $src",
|
||||||
[(set tGPR:$dst, (ineg tGPR:$src))]>;
|
[(set tGPR:$dst, (ineg tGPR:$src))]>;
|
||||||
|
|
||||||
let isCommutable = 1 in
|
// bitwise or register
|
||||||
|
let isCommutable = 1, Defs = [CPSR] in
|
||||||
def tORR : T1It<(outs tGPR:$dst), (ins tGPR:$lhs, tGPR:$rhs),
|
def tORR : T1It<(outs tGPR:$dst), (ins tGPR:$lhs, tGPR:$rhs),
|
||||||
"orr $dst, $rhs",
|
"orr $dst, $rhs",
|
||||||
[(set tGPR:$dst, (or tGPR:$lhs, tGPR:$rhs))]>;
|
[(set tGPR:$dst, (or tGPR:$lhs, tGPR:$rhs))]>;
|
||||||
|
|
||||||
|
// swaps
|
||||||
def tREV : T1I<(outs tGPR:$dst), (ins tGPR:$src),
|
def tREV : T1I<(outs tGPR:$dst), (ins tGPR:$src),
|
||||||
"rev $dst, $src",
|
"rev $dst, $src",
|
||||||
[(set tGPR:$dst, (bswap tGPR:$src))]>,
|
[(set tGPR:$dst, (bswap tGPR:$src))]>,
|
||||||
|
|
@ -452,52 +489,77 @@ def tREVSH : T1I<(outs tGPR:$dst), (ins tGPR:$src),
|
||||||
(shl tGPR:$src, (i32 8))), i16))]>,
|
(shl tGPR:$src, (i32 8))), i16))]>,
|
||||||
Requires<[IsThumb, HasV6]>;
|
Requires<[IsThumb, HasV6]>;
|
||||||
|
|
||||||
|
// rotate right register
|
||||||
|
let Defs = [CPSR] in
|
||||||
def tROR : T1It<(outs tGPR:$dst), (ins tGPR:$lhs, tGPR:$rhs),
|
def tROR : T1It<(outs tGPR:$dst), (ins tGPR:$lhs, tGPR:$rhs),
|
||||||
"ror $dst, $rhs",
|
"ror $dst, $rhs",
|
||||||
[(set tGPR:$dst, (rotr tGPR:$lhs, tGPR:$rhs))]>;
|
[(set tGPR:$dst, (rotr tGPR:$lhs, tGPR:$rhs))]>;
|
||||||
|
|
||||||
|
// Subtract with carry register
|
||||||
// Subtract with carry
|
let Defs = [CPSR], Uses = [CPSR] in
|
||||||
def tSBC : T1It<(outs tGPR:$dst), (ins tGPR:$lhs, tGPR:$rhs),
|
def tSBCS : T1It<(outs tGPR:$dst), (ins tGPR:$lhs, tGPR:$rhs),
|
||||||
"sbc $dst, $rhs",
|
"sbc $dst, $rhs",
|
||||||
[(set tGPR:$dst, (sube tGPR:$lhs, tGPR:$rhs))]>;
|
[(set tGPR:$dst, (sube tGPR:$lhs, tGPR:$rhs))]>;
|
||||||
|
|
||||||
def tSUBS : T1I<(outs tGPR:$dst), (ins tGPR:$lhs, tGPR:$rhs),
|
// Subtract immediate
|
||||||
"sub $dst, $lhs, $rhs",
|
let Defs = [CPSR] in {
|
||||||
[(set tGPR:$dst, (subc tGPR:$lhs, tGPR:$rhs))]>;
|
|
||||||
|
|
||||||
|
|
||||||
// TODO: A7-96: STMIA - store multiple.
|
|
||||||
|
|
||||||
def tSUBi3 : T1I<(outs tGPR:$dst), (ins tGPR:$lhs, i32imm:$rhs),
|
def tSUBi3 : T1I<(outs tGPR:$dst), (ins tGPR:$lhs, i32imm:$rhs),
|
||||||
"sub $dst, $lhs, $rhs",
|
"sub $dst, $lhs, $rhs",
|
||||||
[(set tGPR:$dst, (add tGPR:$lhs, imm0_7_neg:$rhs))]>;
|
[(set tGPR:$dst, (add tGPR:$lhs, imm0_7_neg:$rhs))]>;
|
||||||
|
def tSUBSi3 : T1I<(outs tGPR:$dst), (ins tGPR:$lhs, i32imm:$rhs),
|
||||||
|
"sub $dst, $lhs, $rhs",
|
||||||
|
[(set tGPR:$dst, (addc tGPR:$lhs, imm0_7_neg:$rhs))]>;
|
||||||
|
}
|
||||||
|
|
||||||
|
let Defs = [CPSR] in {
|
||||||
def tSUBi8 : T1It<(outs tGPR:$dst), (ins tGPR:$lhs, i32imm:$rhs),
|
def tSUBi8 : T1It<(outs tGPR:$dst), (ins tGPR:$lhs, i32imm:$rhs),
|
||||||
"sub $dst, $rhs",
|
"sub $dst, $rhs",
|
||||||
[(set tGPR:$dst, (add tGPR:$lhs, imm8_255_neg:$rhs))]>;
|
[(set tGPR:$dst, (add tGPR:$lhs, imm8_255_neg:$rhs))]>;
|
||||||
|
def tSUBSi8 : T1It<(outs tGPR:$dst), (ins tGPR:$lhs, i32imm:$rhs),
|
||||||
|
"sub $dst, $rhs",
|
||||||
|
[(set tGPR:$dst, (addc tGPR:$lhs, imm8_255_neg:$rhs))]>;
|
||||||
|
}
|
||||||
|
|
||||||
|
// subtract register
|
||||||
|
let Defs = [CPSR] in {
|
||||||
def tSUBrr : T1I<(outs tGPR:$dst), (ins tGPR:$lhs, tGPR:$rhs),
|
def tSUBrr : T1I<(outs tGPR:$dst), (ins tGPR:$lhs, tGPR:$rhs),
|
||||||
"sub $dst, $lhs, $rhs",
|
"sub $dst, $lhs, $rhs",
|
||||||
[(set tGPR:$dst, (sub tGPR:$lhs, tGPR:$rhs))]>;
|
[(set tGPR:$dst, (sub tGPR:$lhs, tGPR:$rhs))]>;
|
||||||
|
def tSUBSrr : T1I<(outs tGPR:$dst), (ins tGPR:$lhs, tGPR:$rhs),
|
||||||
|
"sub $dst, $lhs, $rhs",
|
||||||
|
[(set tGPR:$dst, (subc tGPR:$lhs, tGPR:$rhs))]>;
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: A7-96: STMIA - store multiple.
|
||||||
|
|
||||||
def tSUBspi : T1It<(outs tGPR:$dst), (ins tGPR:$lhs, i32imm:$rhs),
|
def tSUBspi : T1It<(outs tGPR:$dst), (ins tGPR:$lhs, i32imm:$rhs),
|
||||||
"sub $dst, $rhs * 4", []>;
|
"sub $dst, $rhs * 4", []>;
|
||||||
|
|
||||||
|
// sign-extend byte
|
||||||
def tSXTB : T1I<(outs tGPR:$dst), (ins tGPR:$src),
|
def tSXTB : T1I<(outs tGPR:$dst), (ins tGPR:$src),
|
||||||
"sxtb $dst, $src",
|
"sxtb $dst, $src",
|
||||||
[(set tGPR:$dst, (sext_inreg tGPR:$src, i8))]>,
|
[(set tGPR:$dst, (sext_inreg tGPR:$src, i8))]>,
|
||||||
Requires<[IsThumb, HasV6]>;
|
Requires<[IsThumb, HasV6]>;
|
||||||
|
|
||||||
|
// sign-extend short
|
||||||
def tSXTH : T1I<(outs tGPR:$dst), (ins tGPR:$src),
|
def tSXTH : T1I<(outs tGPR:$dst), (ins tGPR:$src),
|
||||||
"sxth $dst, $src",
|
"sxth $dst, $src",
|
||||||
[(set tGPR:$dst, (sext_inreg tGPR:$src, i16))]>,
|
[(set tGPR:$dst, (sext_inreg tGPR:$src, i16))]>,
|
||||||
Requires<[IsThumb, HasV6]>;
|
Requires<[IsThumb, HasV6]>;
|
||||||
|
|
||||||
|
// test
|
||||||
|
let Defs = [CPSR] in
|
||||||
|
def tTST : T1I<(outs), (ins tGPR:$lhs, tGPR:$rhs),
|
||||||
|
"tst $lhs, $rhs",
|
||||||
|
[(ARMcmpNZ (and tGPR:$lhs, tGPR:$rhs), 0)]>;
|
||||||
|
|
||||||
|
// zero-extend byte
|
||||||
def tUXTB : T1I<(outs tGPR:$dst), (ins tGPR:$src),
|
def tUXTB : T1I<(outs tGPR:$dst), (ins tGPR:$src),
|
||||||
"uxtb $dst, $src",
|
"uxtb $dst, $src",
|
||||||
[(set tGPR:$dst, (and tGPR:$src, 0xFF))]>,
|
[(set tGPR:$dst, (and tGPR:$src, 0xFF))]>,
|
||||||
Requires<[IsThumb, HasV6]>;
|
Requires<[IsThumb, HasV6]>;
|
||||||
|
|
||||||
|
// zero-extend short
|
||||||
def tUXTH : T1I<(outs tGPR:$dst), (ins tGPR:$src),
|
def tUXTH : T1I<(outs tGPR:$dst), (ins tGPR:$src),
|
||||||
"uxth $dst, $src",
|
"uxth $dst, $src",
|
||||||
[(set tGPR:$dst, (and tGPR:$src, 0xFFFF))]>,
|
[(set tGPR:$dst, (and tGPR:$src, 0xFFFF))]>,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue