blob: e213ea847fc826833f3943704aca46b90a25f1c1 [file] [log] [blame]
Sanjiv Gupta085ae4f2008-11-19 11:00:54 +00001//===- PIC16InstrFormats.td - PIC16 Instruction Formats-------*- tblgen -*-===//
Sanjiv Gupta09bb4202008-05-13 09:02:57 +00002//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10//===----------------------------------------------------------------------===//
11// Describe PIC16 instructions format
12//
13// All the possible PIC16 fields are:
14//
15// opcode - operation code.
16// f - 7-bit register file address.
17// d - 1-bit direction specifier
18// k - 8/11 bit literals
19// b - 3 bits bit num specifier
20//
21//===----------------------------------------------------------------------===//
22
23// Generic PIC16 Format
Sanjiv Gupta085ae4f2008-11-19 11:00:54 +000024// PIC16 Instructions are 14-bit wide.
25
26// FIXME: Add Cooper Specific Formats if any.
27
Sanjiv Gupta09bb4202008-05-13 09:02:57 +000028class PIC16Inst<dag outs, dag ins, string asmstr, list<dag> pattern>
Sanjiv Gupta085ae4f2008-11-19 11:00:54 +000029 : Instruction {
Sanjiv Gupta09bb4202008-05-13 09:02:57 +000030 field bits<14> Inst;
31
32 let Namespace = "PIC16";
Sanjiv Gupta09bb4202008-05-13 09:02:57 +000033 dag OutOperandList = outs;
Sanjiv Gupta1f7b12b2008-05-14 11:31:39 +000034 dag InOperandList = ins;
Sanjiv Gupta1f7b12b2008-05-14 11:31:39 +000035 let AsmString = asmstr;
36 let Pattern = pattern;
Sanjiv Gupta09bb4202008-05-13 09:02:57 +000037}
38
39
40//===----------------------------------------------------------------------===//
41// Byte Oriented instruction class in PIC16 : <|opcode|d|f|>
Sanjiv Gupta085ae4f2008-11-19 11:00:54 +000042// opcode = 6 bits.
43// d = direction = 1 bit.
44// f = file register address = 7 bits.
Sanjiv Gupta09bb4202008-05-13 09:02:57 +000045//===----------------------------------------------------------------------===//
46
Sanjiv Gupta085ae4f2008-11-19 11:00:54 +000047class ByteFormat<bits<6> opcode, dag outs, dag ins, string asmstr,
48 list<dag> pattern>
49 :PIC16Inst<outs, ins, asmstr, pattern> {
Sanjiv Gupta09bb4202008-05-13 09:02:57 +000050 bits<1> d;
51 bits<7> f;
52
Sanjiv Gupta085ae4f2008-11-19 11:00:54 +000053 let Inst{13-8} = opcode;
Sanjiv Gupta09bb4202008-05-13 09:02:57 +000054
55 let Inst{7} = d;
56 let Inst{6-0} = f;
57}
58
59//===----------------------------------------------------------------------===//
60// Bit Oriented instruction class in PIC16 : <|opcode|b|f|>
Sanjiv Gupta085ae4f2008-11-19 11:00:54 +000061// opcode = 4 bits.
62// b = bit specifier = 3 bits.
63// f = file register address = 7 bits.
Sanjiv Gupta09bb4202008-05-13 09:02:57 +000064//===----------------------------------------------------------------------===//
65
Sanjiv Gupta085ae4f2008-11-19 11:00:54 +000066class BitFormat<bits<4> opcode, dag outs, dag ins, string asmstr,
67 list<dag> pattern>
68 : PIC16Inst<outs, ins, asmstr, pattern> {
Sanjiv Gupta09bb4202008-05-13 09:02:57 +000069 bits<3> b;
70 bits<7> f;
71
Sanjiv Gupta085ae4f2008-11-19 11:00:54 +000072 let Inst{13-10} = opcode;
Sanjiv Gupta09bb4202008-05-13 09:02:57 +000073
74 let Inst{9-7} = b;
75 let Inst{6-0} = f;
76}
77
78//===----------------------------------------------------------------------===//
79// Literal Format instruction class in PIC16 : <|opcode|k|>
Sanjiv Gupta085ae4f2008-11-19 11:00:54 +000080// opcode = 6 bits
81// k = literal = 8 bits
Sanjiv Gupta09bb4202008-05-13 09:02:57 +000082//===----------------------------------------------------------------------===//
83
Sanjiv Gupta085ae4f2008-11-19 11:00:54 +000084class LiteralFormat<bits<6> opcode, dag outs, dag ins, string asmstr,
Sanjiv Gupta1f7b12b2008-05-14 11:31:39 +000085 list<dag> pattern>
Sanjiv Gupta085ae4f2008-11-19 11:00:54 +000086 : PIC16Inst<outs, ins, asmstr, pattern> {
Sanjiv Gupta09bb4202008-05-13 09:02:57 +000087 bits<8> k;
Sanjiv Gupta09bb4202008-05-13 09:02:57 +000088
Sanjiv Gupta085ae4f2008-11-19 11:00:54 +000089 let Inst{13-8} = opcode;
Sanjiv Gupta09bb4202008-05-13 09:02:57 +000090
91 let Inst{7-0} = k;
92}
93
94//===----------------------------------------------------------------------===//
95// Control Format instruction class in PIC16 : <|opcode|k|>
Sanjiv Gupta085ae4f2008-11-19 11:00:54 +000096// opcode = 3 bits.
97// k = jump address = 11 bits.
Sanjiv Gupta09bb4202008-05-13 09:02:57 +000098//===----------------------------------------------------------------------===//
99
Sanjiv Gupta085ae4f2008-11-19 11:00:54 +0000100class ControlFormat<bits<3> opcode, dag outs, dag ins, string asmstr,
Sanjiv Gupta1f7b12b2008-05-14 11:31:39 +0000101 list<dag> pattern>
Sanjiv Gupta085ae4f2008-11-19 11:00:54 +0000102 : PIC16Inst<outs, ins, asmstr, pattern> {
Sanjiv Gupta09bb4202008-05-13 09:02:57 +0000103 bits<11> k;
104
Sanjiv Gupta085ae4f2008-11-19 11:00:54 +0000105 let Inst{13-11} = opcode;
Sanjiv Gupta09bb4202008-05-13 09:02:57 +0000106
107 let Inst{10-0} = k;
108}
109
110//===----------------------------------------------------------------------===//
111// Pseudo instruction class in PIC16
112//===----------------------------------------------------------------------===//
113
Sanjiv Gupta085ae4f2008-11-19 11:00:54 +0000114class Pseudo<dag outs, dag ins, string asmstr, list<dag> pattern>
115 : PIC16Inst<outs, ins, asmstr, pattern> {
116 let Inst{13-6} = 0;
Sanjiv Gupta09bb4202008-05-13 09:02:57 +0000117}