mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-23 05:29:23 +00:00
[mips][microMIPSr6] Implement BEQZALC, BGEZALC, BGTZALC, BLEZALC, BLTZALC and BNEZALC instructions
This patch implements microMIPS32r6 BEQZALC, BGEZALC, BGTZALC, BLEZALC, BLTZALC and BNEZALC instructions using mapping. Differential Revision: http://reviews.llvm.org/D10031 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@238325 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
d56dcc4243
commit
b8124ac882
@ -183,3 +183,27 @@ class POOL32A_LSA_FM<bits<6> funct> : MipsR6Inst {
|
||||
let Inst{8-6} = 0b000;
|
||||
let Inst{5-0} = funct;
|
||||
}
|
||||
|
||||
class CMP_BRANCH_1R_RT_OFF16_FM_MMR6<bits<6> funct> : MipsR6Inst {
|
||||
bits<5> rt;
|
||||
bits<16> offset;
|
||||
|
||||
bits<32> Inst;
|
||||
|
||||
let Inst{31-26} = funct;
|
||||
let Inst{25-21} = rt;
|
||||
let Inst{20-16} = 0b00000;
|
||||
let Inst{15-0} = offset;
|
||||
}
|
||||
|
||||
class CMP_BRANCH_1R_BOTH_OFF16_FM_MMR6<bits<6> funct> : MipsR6Inst {
|
||||
bits<5> rt;
|
||||
bits<16> offset;
|
||||
|
||||
bits<32> Inst;
|
||||
|
||||
let Inst{31-26} = funct;
|
||||
let Inst{25-21} = rt;
|
||||
let Inst{20-16} = rt;
|
||||
let Inst{15-0} = offset;
|
||||
}
|
||||
|
@ -29,6 +29,12 @@ class AUI_MMR6_ENC : AUI_FM_MMR6;
|
||||
class BALC_MMR6_ENC : BRANCH_OFF26_FM<0b101101>;
|
||||
class BC_MMR6_ENC : BRANCH_OFF26_FM<0b100101>;
|
||||
class BITSWAP_MMR6_ENC : POOL32A_BITSWAP_FM_MMR6<0b101100>;
|
||||
class BEQZALC_MMR6_ENC : CMP_BRANCH_1R_RT_OFF16_FM_MMR6<0b011101>;
|
||||
class BNEZALC_MMR6_ENC : CMP_BRANCH_1R_RT_OFF16_FM_MMR6<0b011111>;
|
||||
class BGTZALC_MMR6_ENC : CMP_BRANCH_1R_RT_OFF16_FM_MMR6<0b111000>;
|
||||
class BLTZALC_MMR6_ENC : CMP_BRANCH_1R_BOTH_OFF16_FM_MMR6<0b111000>;
|
||||
class BGEZALC_MMR6_ENC : CMP_BRANCH_1R_BOTH_OFF16_FM_MMR6<0b110000>;
|
||||
class BLEZALC_MMR6_ENC : CMP_BRANCH_1R_RT_OFF16_FM_MMR6<0b110000>;
|
||||
class CACHE_MMR6_ENC : CACHE_PREF_FM_MMR6<0b001000, 0b0110>;
|
||||
class CLO_MMR6_ENC : POOL32A_2R_FM_MMR6<0b0100101100>;
|
||||
class CLZ_MMR6_ENC : SPECIAL_2R_FM_MMR6<0b010000>;
|
||||
@ -55,6 +61,45 @@ class SUBU_MMR6_ENC : ARITH_FM_MMR6<"subu", 0x1d0>;
|
||||
class XOR_MMR6_ENC : ARITH_FM_MMR6<"xor", 0x310>;
|
||||
class XORI_MMR6_ENC : ADDI_FM_MMR6<"xori", 0x1c>;
|
||||
|
||||
class CMP_CBR_RT_Z_MMR6_DESC_BASE<string instr_asm, DAGOperand opnd,
|
||||
RegisterOperand GPROpnd>
|
||||
: BRANCH_DESC_BASE, MMR6Arch<instr_asm> {
|
||||
dag InOperandList = (ins GPROpnd:$rt, opnd:$offset);
|
||||
dag OutOperandList = (outs);
|
||||
string AsmString = !strconcat(instr_asm, "\t$rt, $offset");
|
||||
list<Register> Defs = [AT];
|
||||
}
|
||||
|
||||
class BEQZALC_MMR6_DESC : CMP_CBR_RT_Z_MMR6_DESC_BASE<"beqzalc", brtarget_mm,
|
||||
GPR32Opnd> {
|
||||
list<Register> Defs = [RA];
|
||||
}
|
||||
|
||||
class BGEZALC_MMR6_DESC : CMP_CBR_RT_Z_MMR6_DESC_BASE<"bgezalc", brtarget_mm,
|
||||
GPR32Opnd> {
|
||||
list<Register> Defs = [RA];
|
||||
}
|
||||
|
||||
class BGTZALC_MMR6_DESC : CMP_CBR_RT_Z_MMR6_DESC_BASE<"bgtzalc", brtarget_mm,
|
||||
GPR32Opnd> {
|
||||
list<Register> Defs = [RA];
|
||||
}
|
||||
|
||||
class BLEZALC_MMR6_DESC : CMP_CBR_RT_Z_MMR6_DESC_BASE<"blezalc", brtarget_mm,
|
||||
GPR32Opnd> {
|
||||
list<Register> Defs = [RA];
|
||||
}
|
||||
|
||||
class BLTZALC_MMR6_DESC : CMP_CBR_RT_Z_MMR6_DESC_BASE<"bltzalc", brtarget_mm,
|
||||
GPR32Opnd> {
|
||||
list<Register> Defs = [RA];
|
||||
}
|
||||
|
||||
class BNEZALC_MMR6_DESC : CMP_CBR_RT_Z_MMR6_DESC_BASE<"bnezalc", brtarget_mm,
|
||||
GPR32Opnd> {
|
||||
list<Register> Defs = [RA];
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Instruction Descriptions
|
||||
@ -236,6 +281,18 @@ def BALC_MMR6 : R6MMR6Rel, BALC_MMR6_ENC, BALC_MMR6_DESC, ISA_MICROMIPS32R6;
|
||||
def BC_MMR6 : R6MMR6Rel, BC_MMR6_ENC, BC_MMR6_DESC, ISA_MICROMIPS32R6;
|
||||
def BITSWAP_MMR6 : R6MMR6Rel, BITSWAP_MMR6_ENC, BITSWAP_MMR6_DESC,
|
||||
ISA_MICROMIPS32R6;
|
||||
def BEQZALC_MMR6 : R6MMR6Rel, BEQZALC_MMR6_ENC, BEQZALC_MMR6_DESC,
|
||||
ISA_MICROMIPS32R6;
|
||||
def BGEZALC_MMR6 : R6MMR6Rel, BGEZALC_MMR6_ENC, BGEZALC_MMR6_DESC,
|
||||
ISA_MICROMIPS32R6;
|
||||
def BGTZALC_MMR6 : R6MMR6Rel, BGTZALC_MMR6_ENC, BGTZALC_MMR6_DESC,
|
||||
ISA_MICROMIPS32R6;
|
||||
def BLEZALC_MMR6 : R6MMR6Rel, BLEZALC_MMR6_ENC, BLEZALC_MMR6_DESC,
|
||||
ISA_MICROMIPS32R6;
|
||||
def BLTZALC_MMR6 : R6MMR6Rel, BLTZALC_MMR6_ENC, BLTZALC_MMR6_DESC,
|
||||
ISA_MICROMIPS32R6;
|
||||
def BNEZALC_MMR6 : R6MMR6Rel, BNEZALC_MMR6_ENC, BNEZALC_MMR6_DESC,
|
||||
ISA_MICROMIPS32R6;
|
||||
def CACHE_MMR6 : R6MMR6Rel, CACHE_MMR6_ENC, CACHE_MMR6_DESC, ISA_MICROMIPS32R6;
|
||||
def CLO_MMR6 : R6MMR6Rel, CLO_MMR6_ENC, CLO_MMR6_DESC, ISA_MICROMIPS32R6;
|
||||
def CLZ_MMR6 : R6MMR6Rel, CLZ_MMR6_ENC, CLZ_MMR6_DESC, ISA_MICROMIPS32R6;
|
||||
|
@ -316,7 +316,8 @@ class CMP_CBR_EQNE_Z_DESC_BASE<string instr_asm, DAGOperand opnd,
|
||||
}
|
||||
|
||||
class CMP_CBR_RT_Z_DESC_BASE<string instr_asm, DAGOperand opnd,
|
||||
RegisterOperand GPROpnd> : BRANCH_DESC_BASE {
|
||||
RegisterOperand GPROpnd>
|
||||
: BRANCH_DESC_BASE, MipsR6Arch<instr_asm> {
|
||||
dag InOperandList = (ins GPROpnd:$rt, opnd:$offset);
|
||||
dag OutOperandList = (outs);
|
||||
string AsmString = !strconcat(instr_asm, "\t$rt, $offset");
|
||||
@ -663,23 +664,23 @@ def BC2EQZ : BC2EQZ_ENC, BC2EQZ_DESC, ISA_MIPS32R6;
|
||||
def BC2NEZ : BC2NEZ_ENC, BC2NEZ_DESC, ISA_MIPS32R6;
|
||||
def BC : R6MMR6Rel, BC_ENC, BC_DESC, ISA_MIPS32R6;
|
||||
def BEQC : BEQC_ENC, BEQC_DESC, ISA_MIPS32R6;
|
||||
def BEQZALC : BEQZALC_ENC, BEQZALC_DESC, ISA_MIPS32R6;
|
||||
def BEQZALC : R6MMR6Rel, BEQZALC_ENC, BEQZALC_DESC, ISA_MIPS32R6;
|
||||
def BEQZC : BEQZC_ENC, BEQZC_DESC, ISA_MIPS32R6;
|
||||
def BGEC : BGEC_ENC, BGEC_DESC, ISA_MIPS32R6;
|
||||
def BGEUC : BGEUC_ENC, BGEUC_DESC, ISA_MIPS32R6;
|
||||
def BGEZALC : BGEZALC_ENC, BGEZALC_DESC, ISA_MIPS32R6;
|
||||
def BGEZALC : R6MMR6Rel, BGEZALC_ENC, BGEZALC_DESC, ISA_MIPS32R6;
|
||||
def BGEZC : BGEZC_ENC, BGEZC_DESC, ISA_MIPS32R6;
|
||||
def BGTZALC : BGTZALC_ENC, BGTZALC_DESC, ISA_MIPS32R6;
|
||||
def BGTZALC : R6MMR6Rel, BGTZALC_ENC, BGTZALC_DESC, ISA_MIPS32R6;
|
||||
def BGTZC : BGTZC_ENC, BGTZC_DESC, ISA_MIPS32R6;
|
||||
def BITSWAP : R6MMR6Rel, BITSWAP_ENC, BITSWAP_DESC, ISA_MIPS32R6;
|
||||
def BLEZALC : BLEZALC_ENC, BLEZALC_DESC, ISA_MIPS32R6;
|
||||
def BLEZALC : R6MMR6Rel, BLEZALC_ENC, BLEZALC_DESC, ISA_MIPS32R6;
|
||||
def BLEZC : BLEZC_ENC, BLEZC_DESC, ISA_MIPS32R6;
|
||||
def BLTC : BLTC_ENC, BLTC_DESC, ISA_MIPS32R6;
|
||||
def BLTUC : BLTUC_ENC, BLTUC_DESC, ISA_MIPS32R6;
|
||||
def BLTZALC : BLTZALC_ENC, BLTZALC_DESC, ISA_MIPS32R6;
|
||||
def BLTZALC : R6MMR6Rel, BLTZALC_ENC, BLTZALC_DESC, ISA_MIPS32R6;
|
||||
def BLTZC : BLTZC_ENC, BLTZC_DESC, ISA_MIPS32R6;
|
||||
def BNEC : BNEC_ENC, BNEC_DESC, ISA_MIPS32R6;
|
||||
def BNEZALC : BNEZALC_ENC, BNEZALC_DESC, ISA_MIPS32R6;
|
||||
def BNEZALC : R6MMR6Rel, BNEZALC_ENC, BNEZALC_DESC, ISA_MIPS32R6;
|
||||
def BNEZC : BNEZC_ENC, BNEZC_DESC, ISA_MIPS32R6;
|
||||
def BNVC : BNVC_ENC, BNVC_DESC, ISA_MIPS32R6;
|
||||
def BOVC : BOVC_ENC, BOVC_DESC, ISA_MIPS32R6;
|
||||
|
@ -20,6 +20,18 @@
|
||||
|
||||
0x10 0x62 0xff 0xe9 # CHECK: aui $3, $2, -23
|
||||
|
||||
0x74 0x40 0x02 0x9a # CHECK: beqzalc $2, 1332
|
||||
|
||||
0x7c 0x40 0x02 0x9a # CHECK: bnezalc $2, 1332
|
||||
|
||||
0xc0 0x42 0x02 0x9a # CHECK: bgezalc $2, 1332
|
||||
|
||||
0xe0 0x40 0x02 0x9a # CHECK: bgtzalc $2, 1332
|
||||
|
||||
0xe0 0x42 0x02 0x9a # CHECK: bltzalc $2, 1332
|
||||
|
||||
0xc0 0x40 0x02 0x9a # CHECK: blezalc $2, 1332
|
||||
|
||||
# CHECK: balc 14572256
|
||||
0xb4 0x37 0x96 0xb8
|
||||
|
||||
|
@ -11,6 +11,12 @@
|
||||
auipc $3, -1 # CHECK: auipc $3, -1 # encoding: [0x78,0x7e,0xff,0xff]
|
||||
align $4, $2, $3, 2 # CHECK: align $4, $2, $3, 2 # encoding: [0x00,0x43,0x24,0x1f]
|
||||
aui $3,$2,-23 # CHECK: aui $3, $2, -23 # encoding: [0x10,0x62,0xff,0xe9]
|
||||
beqzalc $2, 1332 # CHECK: beqzalc $2, 1332 # encoding: [0x74,0x40,0x02,0x9a]
|
||||
bnezalc $2, 1332 # CHECK: bnezalc $2, 1332 # encoding: [0x7c,0x40,0x02,0x9a]
|
||||
bgezalc $2, 1332 # CHECK: bgezalc $2, 1332 # encoding: [0xc0,0x42,0x02,0x9a]
|
||||
bgtzalc $2, 1332 # CHECK: bgtzalc $2, 1332 # encoding: [0xe0,0x40,0x02,0x9a]
|
||||
bltzalc $2, 1332 # CHECK: bltzalc $2, 1332 # encoding: [0xe0,0x42,0x02,0x9a]
|
||||
blezalc $2, 1332 # CHECK: blezalc $2, 1332 # encoding: [0xc0,0x40,0x02,0x9a]
|
||||
balc 14572256 # CHECK: balc 14572256 # encoding: [0xb4,0x37,0x96,0xb8]
|
||||
bc 14572256 # CHECK: bc 14572256 # encoding: [0x94,0x37,0x96,0xb8]
|
||||
bitswap $4, $2 # CHECK: bitswap $4, $2 # encoding: [0x00,0x44,0x0b,0x3c]
|
||||
|
Loading…
x
Reference in New Issue
Block a user