mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 03:33:20 +01:00
[mips][mips64r6] Add RINT.fmt instructions
Differential Revision: http://reviews.llvm.org/D3711 llvm-svn: 208892
This commit is contained in:
parent
6de41d285d
commit
f64b55bdcb
@ -81,6 +81,20 @@ class DAUI_FM : AUI_FM {
|
|||||||
let Inst{31-26} = OPGROUP_DAUI.Value;
|
let Inst{31-26} = OPGROUP_DAUI.Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class COP1_2R_FM<bits<6> funct, FIELD_FMT Format> : MipsR6Inst {
|
||||||
|
bits<5> fs;
|
||||||
|
bits<5> fd;
|
||||||
|
|
||||||
|
bits<32> Inst;
|
||||||
|
|
||||||
|
let Inst{31-26} = OPGROUP_COP1.Value;
|
||||||
|
let Inst{25-21} = Format.Value;
|
||||||
|
let Inst{20-16} = 0b00000;
|
||||||
|
let Inst{15-11} = fs;
|
||||||
|
let Inst{10-6} = fd;
|
||||||
|
let Inst{5-0} = funct;
|
||||||
|
}
|
||||||
|
|
||||||
class COP1_3R_FM<bits<6> funct, FIELD_FMT Format> : MipsR6Inst {
|
class COP1_3R_FM<bits<6> funct, FIELD_FMT Format> : MipsR6Inst {
|
||||||
bits<5> ft;
|
bits<5> ft;
|
||||||
bits<5> fs;
|
bits<5> fs;
|
||||||
|
@ -90,6 +90,9 @@ class SELEQZ_D_ENC : COP1_3R_FM<0b010100, FIELD_FMT_D>;
|
|||||||
class SELNEZ_S_ENC : COP1_3R_FM<0b010111, FIELD_FMT_S>;
|
class SELNEZ_S_ENC : COP1_3R_FM<0b010111, FIELD_FMT_S>;
|
||||||
class SELNEZ_D_ENC : COP1_3R_FM<0b010111, FIELD_FMT_D>;
|
class SELNEZ_D_ENC : COP1_3R_FM<0b010111, FIELD_FMT_D>;
|
||||||
|
|
||||||
|
class RINT_S_ENC : COP1_2R_FM<0b011010, FIELD_FMT_S>;
|
||||||
|
class RINT_D_ENC : COP1_2R_FM<0b011010, FIELD_FMT_D>;
|
||||||
|
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
//
|
//
|
||||||
// Instruction Descriptions
|
// Instruction Descriptions
|
||||||
@ -207,6 +210,16 @@ class SELEQZ_D_DESC : SELEQNEZ_DESC_BASE<"seleqz.d", FGR64Opnd>;
|
|||||||
class SELNEZ_S_DESC : SELEQNEZ_DESC_BASE<"selnez.s", FGR32Opnd>;
|
class SELNEZ_S_DESC : SELEQNEZ_DESC_BASE<"selnez.s", FGR32Opnd>;
|
||||||
class SELNEZ_D_DESC : SELEQNEZ_DESC_BASE<"selnez.d", FGR64Opnd>;
|
class SELNEZ_D_DESC : SELEQNEZ_DESC_BASE<"selnez.d", FGR64Opnd>;
|
||||||
|
|
||||||
|
class RINT_DESC_BASE<string instr_asm, RegisterOperand FGROpnd> {
|
||||||
|
dag OutOperandList = (outs FGROpnd:$fd);
|
||||||
|
dag InOperandList = (ins FGROpnd:$fs);
|
||||||
|
string AsmString = !strconcat(instr_asm, "\t$fd, $fs");
|
||||||
|
list<dag> Pattern = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
class RINT_S_DESC : RINT_DESC_BASE<"rint.s", FGR32Opnd>;
|
||||||
|
class RINT_D_DESC : RINT_DESC_BASE<"rint.d", FGR64Opnd>;
|
||||||
|
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
//
|
//
|
||||||
// Instruction Definitions
|
// Instruction Definitions
|
||||||
@ -273,8 +286,8 @@ def MUHU : MUHU_ENC, MUHU_DESC, ISA_MIPS32R6;
|
|||||||
def MUL_R6 : MUL_R6_ENC, MUL_R6_DESC, ISA_MIPS32R6;
|
def MUL_R6 : MUL_R6_ENC, MUL_R6_DESC, ISA_MIPS32R6;
|
||||||
def MULU : MULU_ENC, MULU_DESC, ISA_MIPS32R6;
|
def MULU : MULU_ENC, MULU_DESC, ISA_MIPS32R6;
|
||||||
def NAL; // BAL with rd=0
|
def NAL; // BAL with rd=0
|
||||||
def RINT_D;
|
def RINT_D : RINT_D_ENC, RINT_D_DESC, ISA_MIPS32R6;
|
||||||
def RINT_S;
|
def RINT_S : RINT_S_ENC, RINT_S_DESC, ISA_MIPS32R6;
|
||||||
def SELEQZ;
|
def SELEQZ;
|
||||||
def SELEQZ_D : SELEQZ_D_ENC, SELEQZ_D_DESC, ISA_MIPS32R6;
|
def SELEQZ_D : SELEQZ_D_ENC, SELEQZ_D_DESC, ISA_MIPS32R6;
|
||||||
def SELEQZ_S : SELEQZ_S_ENC, SELEQZ_S_DESC, ISA_MIPS32R6;
|
def SELEQZ_S : SELEQZ_S_ENC, SELEQZ_S_DESC, ISA_MIPS32R6;
|
||||||
|
@ -32,3 +32,5 @@
|
|||||||
seleqz.d $f0, $f2, $f4 # CHECK: seleqz.d $f0, $f2, $f4 # encoding: [0x46,0x24,0x10,0x14]
|
seleqz.d $f0, $f2, $f4 # CHECK: seleqz.d $f0, $f2, $f4 # encoding: [0x46,0x24,0x10,0x14]
|
||||||
selnez.s $f0, $f2, $f4 # CHECK: selnez.s $f0, $f2, $f4 # encoding: [0x46,0x04,0x10,0x17]
|
selnez.s $f0, $f2, $f4 # CHECK: selnez.s $f0, $f2, $f4 # encoding: [0x46,0x04,0x10,0x17]
|
||||||
selnez.d $f0, $f2, $f4 # CHECK: selnez.d $f0, $f2, $f4 # encoding: [0x46,0x24,0x10,0x17]
|
selnez.d $f0, $f2, $f4 # CHECK: selnez.d $f0, $f2, $f4 # encoding: [0x46,0x24,0x10,0x17]
|
||||||
|
rint.s $f2, $f4 # CHECK: rint.s $f2, $f4 # encoding: [0x46,0x00,0x20,0x9a]
|
||||||
|
rint.d $f2, $f4 # CHECK: rint.d $f2, $f4 # encoding: [0x46,0x20,0x20,0x9a]
|
||||||
|
@ -45,3 +45,5 @@
|
|||||||
seleqz.d $f0, $f2, $f4 # CHECK: seleqz.d $f0, $f2, $f4 # encoding: [0x46,0x24,0x10,0x14]
|
seleqz.d $f0, $f2, $f4 # CHECK: seleqz.d $f0, $f2, $f4 # encoding: [0x46,0x24,0x10,0x14]
|
||||||
selnez.s $f0, $f2, $f4 # CHECK: selnez.s $f0, $f2, $f4 # encoding: [0x46,0x04,0x10,0x17]
|
selnez.s $f0, $f2, $f4 # CHECK: selnez.s $f0, $f2, $f4 # encoding: [0x46,0x04,0x10,0x17]
|
||||||
selnez.d $f0, $f2, $f4 # CHECK: selnez.d $f0, $f2, $f4 # encoding: [0x46,0x24,0x10,0x17]
|
selnez.d $f0, $f2, $f4 # CHECK: selnez.d $f0, $f2, $f4 # encoding: [0x46,0x24,0x10,0x17]
|
||||||
|
rint.s $f2, $f4 # CHECK: rint.s $f2, $f4 # encoding: [0x46,0x00,0x20,0x9a]
|
||||||
|
rint.d $f2, $f4 # CHECK: rint.d $f2, $f4 # encoding: [0x46,0x20,0x20,0x9a]
|
||||||
|
Loading…
Reference in New Issue
Block a user