mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-11-01 15:11:24 +00:00
[mips][microMIPSr6] Implement LSA instruction
This patch implements LSA instruction using mapping. Differential Revision: http://reviews.llvm.org/D8919 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@237634 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
4f5829ac4d
commit
1193b61df0
@ -166,3 +166,20 @@ class AUI_FM_MMR6 : MipsR6Inst {
|
||||
let Inst{20-16} = rs;
|
||||
let Inst{15-0} = imm;
|
||||
}
|
||||
|
||||
class POOL32A_LSA_FM<bits<6> funct> : MipsR6Inst {
|
||||
bits<5> rd;
|
||||
bits<5> rs;
|
||||
bits<5> rt;
|
||||
bits<2> imm2;
|
||||
|
||||
bits<32> Inst;
|
||||
|
||||
let Inst{31-26} = 0b000000;
|
||||
let Inst{25-21} = rt;
|
||||
let Inst{20-16} = rs;
|
||||
let Inst{15-11} = rd;
|
||||
let Inst{10-9} = imm2;
|
||||
let Inst{8-6} = 0b000;
|
||||
let Inst{5-0} = funct;
|
||||
}
|
||||
|
@ -32,6 +32,7 @@ class CLO_MMR6_ENC : POOL32A_2R_FM_MMR6<0b0100101100>;
|
||||
class CLZ_MMR6_ENC : SPECIAL_2R_FM_MMR6<0b010000>;
|
||||
class JIALC_MMR6_ENC : JMP_IDX_COMPACT_FM<0b100000>;
|
||||
class JIC_MMR6_ENC : JMP_IDX_COMPACT_FM<0b101000>;
|
||||
class LSA_MMR6_ENC : POOL32A_LSA_FM<0b001111>;
|
||||
class LWPC_MMR6_ENC : PCREL19_FM_MMR6<0b01>;
|
||||
class MUL_MMR6_ENC : ARITH_FM_MMR6<"mul", 0x18>;
|
||||
class MUH_MMR6_ENC : ARITH_FM_MMR6<"muh", 0x58>;
|
||||
@ -158,6 +159,16 @@ class ALUIPC_MMR6_DESC_BASE<string instr_asm, RegisterOperand GPROpnd>
|
||||
class ALUIPC_MMR6_DESC : ALUIPC_MMR6_DESC_BASE<"aluipc", GPR32Opnd>;
|
||||
class AUIPC_MMR6_DESC : ALUIPC_MMR6_DESC_BASE<"auipc", GPR32Opnd>;
|
||||
|
||||
class LSA_MMR6_DESC_BASE<string instr_asm, RegisterOperand GPROpnd,
|
||||
Operand ImmOpnd> : MMR6Arch<instr_asm> {
|
||||
dag OutOperandList = (outs GPROpnd:$rd);
|
||||
dag InOperandList = (ins GPROpnd:$rs, GPROpnd:$rt, ImmOpnd:$imm2);
|
||||
string AsmString = !strconcat(instr_asm, "\t$rt, $rs, $rd, $imm2");
|
||||
list<dag> Pattern = [];
|
||||
}
|
||||
|
||||
class LSA_MMR6_DESC : LSA_MMR6_DESC_BASE<"lsa", GPR32Opnd, uimm2>;
|
||||
|
||||
class PCREL_MMR6_DESC_BASE<string instr_asm, RegisterOperand GPROpnd,
|
||||
Operand ImmOpnd> : MMR6Arch<instr_asm> {
|
||||
dag OutOperandList = (outs GPROpnd:$rt);
|
||||
@ -206,6 +217,7 @@ def CLO_MMR6 : R6MMR6Rel, CLO_MMR6_ENC, CLO_MMR6_DESC, ISA_MICROMIPS32R6;
|
||||
def CLZ_MMR6 : R6MMR6Rel, CLZ_MMR6_ENC, CLZ_MMR6_DESC, ISA_MICROMIPS32R6;
|
||||
def JIALC_MMR6 : R6MMR6Rel, JIALC_MMR6_ENC, JIALC_MMR6_DESC, ISA_MICROMIPS32R6;
|
||||
def JIC_MMR6 : R6MMR6Rel, JIC_MMR6_ENC, JIC_MMR6_DESC, ISA_MICROMIPS32R6;
|
||||
def LSA_MMR6 : R6MMR6Rel, LSA_MMR6_ENC, LSA_MMR6_DESC, ISA_MICROMIPS32R6;
|
||||
def LWPC_MMR6 : R6MMR6Rel, LWPC_MMR6_ENC, LWPC_MMR6_DESC, ISA_MICROMIPS32R6;
|
||||
def MUL_MMR6 : R6MMR6Rel, MUL_MMR6_DESC, MUL_MMR6_ENC, ISA_MICROMIPS32R6;
|
||||
def MUH_MMR6 : R6MMR6Rel, MUH_MMR6_DESC, MUH_MMR6_ENC, ISA_MICROMIPS32R6;
|
||||
|
@ -586,7 +586,7 @@ class SDC2_R6_DESC : COP2ST_DESC_BASE<"sdc2", COP2Opnd>;
|
||||
class SWC2_R6_DESC : COP2ST_DESC_BASE<"swc2", COP2Opnd>;
|
||||
|
||||
class LSA_R6_DESC_BASE<string instr_asm, RegisterOperand GPROpnd,
|
||||
Operand ImmOpnd> {
|
||||
Operand ImmOpnd> : MipsR6Arch<instr_asm> {
|
||||
dag OutOperandList = (outs GPROpnd:$rd);
|
||||
dag InOperandList = (ins GPROpnd:$rs, GPROpnd:$rt, ImmOpnd:$imm2);
|
||||
string AsmString = !strconcat(instr_asm, "\t$rd, $rs, $rt, $imm2");
|
||||
@ -696,7 +696,7 @@ def JIC : R6MMR6Rel, JIC_ENC, JIC_DESC, ISA_MIPS32R6;
|
||||
def JR_HB_R6 : JR_HB_R6_ENC, JR_HB_R6_DESC, ISA_MIPS32R6;
|
||||
def LDC2_R6 : LDC2_R6_ENC, LDC2_R6_DESC, ISA_MIPS32R6;
|
||||
def LL_R6 : LL_R6_ENC, LL_R6_DESC, ISA_MIPS32R6;
|
||||
def LSA_R6 : LSA_R6_ENC, LSA_R6_DESC, ISA_MIPS32R6;
|
||||
def LSA_R6 : R6MMR6Rel, LSA_R6_ENC, LSA_R6_DESC, ISA_MIPS32R6;
|
||||
def LWC2_R6 : LWC2_R6_ENC, LWC2_R6_DESC, ISA_MIPS32R6;
|
||||
def LWPC : R6MMR6Rel, LWPC_ENC, LWPC_DESC, ISA_MIPS32R6;
|
||||
def LWUPC : LWUPC_ENC, LWUPC_DESC, ISA_MIPS32R6;
|
||||
|
@ -38,6 +38,8 @@
|
||||
|
||||
0x78 0x48 0x00 0x43 # CHECK: lwpc $2, 268
|
||||
|
||||
0x00 0x43 0x26 0x0f # CHECK: lsa $2, $3, $4, 3
|
||||
|
||||
0x00 0xa4 0x18 0x18 # CHECK: mul $3, $4, $5
|
||||
|
||||
0x00 0xa4 0x18 0x58 # CHECK: muh $3, $4, $5
|
||||
|
@ -17,6 +17,7 @@
|
||||
clz $sp, $gp # CHECK: clz $sp, $gp # encoding: [0x03,0x80,0xe8,0x50]
|
||||
jialc $5, 256 # CHECK: jialc $5, 256 # encoding: [0x80,0x05,0x01,0x00]
|
||||
jic $5, 256 # CHECK: jic $5, 256 # encoding: [0xa0,0x05,0x01,0x00]
|
||||
lsa $2, $3, $4, 3 # CHECK: lsa $2, $3, $4, 3 # encoding: [0x00,0x43,0x26,0x0f]
|
||||
lwpc $2,268 # CHECK: lwpc $2, 268 # encoding: [0x78,0x48,0x00,0x43]
|
||||
mul $3, $4, $5 # CHECK mul $3, $4, $5 # encoding: [0x00,0xa4,0x18,0x18]
|
||||
muh $3, $4, $5 # CHECK muh $3, $4, $5 # encoding: [0x00,0xa4,0x18,0x58]
|
||||
|
Loading…
Reference in New Issue
Block a user