aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Target/PIC16/PIC16InstrFormats.td
blob: d4b3ee7328e57aad7864866d91799f23e3070475 (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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
//===- PIC16RegisterInfo.td - PIC16 Register defs ------------*- tblgen -*-===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source 
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//

//===----------------------------------------------------------------------===//
//  Describe PIC16 instructions format
//
//  All the possible PIC16 fields are:
//
//  opcode  - operation code.
//  f       - 7-bit register file address.
//  d       - 1-bit direction specifier
//  k       - 8/11 bit literals
//  b       - 3 bits bit num specifier
//
//===----------------------------------------------------------------------===//

// Generic PIC16 Format
class PIC16Inst<dag outs, dag ins, string asmstr, list<dag> pattern>
	: Instruction 
{
  field bits<14> Inst;

  let Namespace = "PIC16";

  dag OutOperandList = outs;
  dag InOperandList  = ins;

  let AsmString   = asmstr;
  let Pattern     = pattern;
}


//===----------------------------------------------------------------------===//
// Byte Oriented instruction class in PIC16 : <|opcode|d|f|>
//===----------------------------------------------------------------------===//

class ByteFormat<bits<6> op, dag outs, dag ins, string asmstr,
         	 list<dag> pattern>
	:PIC16Inst<outs, ins, asmstr, pattern> 
{
  bits<1>  d;
  bits<7>  f;

  let Inst{13-8} = op;

  let Inst{7} = d;
  let Inst{6-0} = f; 
}

//===----------------------------------------------------------------------===//
// Bit Oriented instruction class in PIC16 : <|opcode|b|f|>
//===----------------------------------------------------------------------===//

class BitFormat<bits<4> op, dag outs, dag ins, string asmstr, list<dag> pattern>
         : PIC16Inst<outs, ins, asmstr, pattern> 
{
  bits<3>  b;
  bits<7>  f;

  let Inst{13-10} = op;

  let Inst{9-7} = b;
  let Inst{6-0} = f; 
}

//===----------------------------------------------------------------------===//
// Literal Format instruction class in PIC16 : <|opcode|k|>
//===----------------------------------------------------------------------===//

class LiteralFormat<bits<6> op, dag outs, dag ins, string asmstr, 
		    list<dag> pattern>
	: PIC16Inst<outs, ins, asmstr, pattern> 
{
  bits<8> k;

  
  let Inst{13-8} = op;

  let Inst{7-0} = k; 
}

//===----------------------------------------------------------------------===//
// Control Format instruction class in PIC16 : <|opcode|k|>
//===----------------------------------------------------------------------===//

class ControlFormat<bits<3> op, dag outs, dag ins, string asmstr, 
		    list<dag> pattern>
	:PIC16Inst<outs, ins, asmstr, pattern> 
{
  bits<11> k;

  
  let Inst{13-11} = op;

  let Inst{10-0} = k; 
}

//===----------------------------------------------------------------------===//
// Pseudo instruction class in PIC16
//===----------------------------------------------------------------------===//

class Pseudo<bits<8> op, dag outs, dag ins, string asmstr, list<dag> pattern>:
      PIC16Inst<outs, ins, asmstr, pattern>
{
   let Inst{13-6} = op;
}