mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-01 13:11:39 +01:00
[Hexagon] Add system instructions for cache manipulation
llvm-svn: 256936
This commit is contained in:
parent
2856f73ed4
commit
787f659237
@ -5807,3 +5807,5 @@ include "HexagonInstrInfoV60.td"
|
||||
include "HexagonInstrInfoVector.td"
|
||||
|
||||
include "HexagonInstrAlias.td"
|
||||
include "HexagonSystemInst.td"
|
||||
|
||||
|
113
lib/Target/Hexagon/HexagonSystemInst.td
Normal file
113
lib/Target/Hexagon/HexagonSystemInst.td
Normal file
@ -0,0 +1,113 @@
|
||||
//==- HexagonSystemInst.td - System Instructions for Hexagon -*- tablegen -*-==//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// This file describes the Hexagon instructions in TableGen format.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Cache manipulation instructions.
|
||||
//===----------------------------------------------------------------------===//
|
||||
let mayStore = 1 in
|
||||
class ST_MISC_CACHEOP<dag outs, dag ins,
|
||||
string asmstr, list<dag> pattern = [],
|
||||
bits<3> amode, bits<3> type, bits<1> un>
|
||||
: ST0Inst<outs, ins, asmstr, pattern, "", ST_tc_ld_SLOT0> {
|
||||
|
||||
bits<5> Rs;
|
||||
bits<5> Rt;
|
||||
bits<5> Rd;
|
||||
let Inst{31-28} = 0b1010;
|
||||
let Inst{27-25} = amode;
|
||||
let Inst{24-22} = type;
|
||||
let Inst{21} = un;
|
||||
let Inst{20-16} = Rs;
|
||||
let Inst{12-8} = Rt;
|
||||
let Inst{4-0} = Rd;
|
||||
}
|
||||
|
||||
let mayStore = 1 in
|
||||
class ST_MISC_CACHEOP_SYS<dag outs, dag ins,
|
||||
string asmstr, list<dag> pattern = [],
|
||||
bits<3> amode, bits<3> type, bits<1> un>
|
||||
: SYSInst<outs, ins, asmstr, pattern, ""> {
|
||||
|
||||
bits<5> Rs;
|
||||
bits<5> Rt;
|
||||
bits<5> Rd;
|
||||
let Inst{31-28} = 0b1010;
|
||||
let Inst{27-25} = amode;
|
||||
let Inst{24-22} = type;
|
||||
let Inst{21} = un;
|
||||
let Inst{20-16} = Rs;
|
||||
let Inst{12-8} = Rt;
|
||||
let Inst{4-0} = Rd;
|
||||
}
|
||||
|
||||
|
||||
let isSolo = 1, Rs = 0, Rt = 0, Rd = 0 in {
|
||||
def Y2_syncht: ST_MISC_CACHEOP <(outs), (ins),
|
||||
"syncht" , [], 0b100, 0b001, 0b0>;
|
||||
}
|
||||
|
||||
let Rt = 0, Rd = 0 in {
|
||||
let isSoloAin1 = 1 in {
|
||||
def Y2_dccleana: ST_MISC_CACHEOP <(outs), (ins IntRegs:$Rs),
|
||||
"dccleana($Rs)", [], 0b000, 0b000, 0b0>;
|
||||
def Y2_dcinva: ST_MISC_CACHEOP <(outs), (ins IntRegs:$Rs),
|
||||
"dcinva($Rs)", [], 0b000, 0b000, 0b1>;
|
||||
def Y2_dccleaninva: ST_MISC_CACHEOP <(outs), (ins IntRegs:$Rs),
|
||||
"dccleaninva($Rs)", [], 0b000, 0b001, 0b0>;
|
||||
}
|
||||
}
|
||||
|
||||
let isSoloAX = 1, hasSideEffects = 1, Rd = 0 in {
|
||||
def Y4_l2fetch: ST_MISC_CACHEOP_SYS<(outs), (ins IntRegs:$Rs, IntRegs:$Rt),
|
||||
"l2fetch($Rs, $Rt)", [], 0b011, 0b000, 0b0>;
|
||||
def Y5_l2fetch: ST_MISC_CACHEOP_SYS<(outs), (ins IntRegs:$Rs, DoubleRegs:$Rt),
|
||||
"l2fetch($Rs, $Rt)", [], 0b011, 0b010, 0b0>;
|
||||
}
|
||||
|
||||
let hasSideEffects = 0, isSolo = 1 in
|
||||
class Y2_INVALIDATE_CACHE<string mnemonic, bit MajOp>
|
||||
: JRInst <
|
||||
(outs), (ins IntRegs:$Rs),
|
||||
#mnemonic#"($Rs)" > {
|
||||
bits<5> Rs;
|
||||
|
||||
let IClass = 0b0101;
|
||||
let Inst{27-21} = 0b0110110;
|
||||
let Inst{20-16} = Rs;
|
||||
let Inst{13-12} = 0b00;
|
||||
let Inst{11} = MajOp;
|
||||
}
|
||||
// Instruction cache invalidate
|
||||
def Y2_icinva : Y2_INVALIDATE_CACHE<"icinva", 0b0>;
|
||||
|
||||
// Zero an aligned 32-byte cacheline.
|
||||
let isSoloAin1 = 1 in
|
||||
def Y2_dczeroa: ST0Inst <(outs), (ins IntRegs:$Rs),
|
||||
"dczeroa($Rs)"> {
|
||||
bits<5> Rs;
|
||||
let IClass = 0b1010;
|
||||
let Inst{27-21} = 0b0000110;
|
||||
let Inst{13} = 0b0;
|
||||
let Inst{20-16} = Rs;
|
||||
}
|
||||
|
||||
// Memory synchronization.
|
||||
let hasSideEffects = 0, isSolo = 1 in
|
||||
def Y2_isync: JRInst <(outs), (ins),
|
||||
"isync"> {
|
||||
let IClass = 0b0101;
|
||||
let Inst{27-16} = 0b011111000000;
|
||||
let Inst{13} = 0b0;
|
||||
let Inst{9-0} = 0b0000000010;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user