aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Target/Sparc/SparcV8InstrInfo_F3.td
blob: f1bf6a05f8f945616fe4dad394433d94e7c5f7b4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
//===- SparcV8Instrs_F3.td - Format 3 Instructions: SparcV8 Target --------===//
//
//                     The LLVM Compiler Infrastructure
//
// This file was developed by the LLVM research group and is distributed under
// the University of Illinois Open Source License. See LICENSE.TXT for details.
// 
//===----------------------------------------------------------------------===//
//
// Format #3 instruction classes in the SparcV8
//
//===----------------------------------------------------------------------===//

class F3 : InstV8 {
  bits<5> rd;
  bits<6> op3;
  bits<5> rs1;
  let op{1} = 1;   // Op = 2 or 3
  let Inst{29-25} = rd;
  let Inst{24-19} = op3;
  let Inst{18-14} = rs1;
}

// Specific F3 classes: SparcV8 manual, page 44
//
class F3_1<bits<2> opVal, bits<6> op3val, string name> : F3 {
  bits<8> asi;
  bits<5> rs2;

  let op         = opVal;
  let op3        = op3val;
  let Name       = name;

  let Inst{13}   = 0;     // i field = 0
  let Inst{12-5} = asi;   // address space identifier
  let Inst{4-0}  = rs2;
}

class F3_2<bits<2> opVal, bits<6> op3val, string name> : F3 {
  bits<13> simm13;

  let op         = opVal;
  let op3        = op3val;
  let Name       = name;

  let Inst{13}   = 1;     // i field = 1
  let Inst{12-0} = simm13;
}

/*
class F3_3<bits<2> opVal, bits<6> op3val, bits<9> opfVal, string name> 
  : F3_rs1rs2 {
  bits<5> rs2;

  let op         = opVal;
  let op3        = op3val;
  let Name       = name;

  let Inst{13-5} = opfVal;
  let Inst{4-0}  = rs2;
}
*/