this is failing on linux hosts, force a triple.
[llvm/avr.git] / lib / Target / PIC16 / PIC16InstrFormats.td
blobe213ea847fc826833f3943704aca46b90a25f1c1
1 //===- PIC16InstrFormats.td - PIC16 Instruction Formats-------*- tblgen -*-===//
2 //
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 //===----------------------------------------------------------------------===//
10 //===----------------------------------------------------------------------===//
11 //  Describe PIC16 instructions format
13 //  All the possible PIC16 fields are:
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
21 //===----------------------------------------------------------------------===//
23 // Generic PIC16 Format
24 // PIC16 Instructions are 14-bit wide.
26 // FIXME: Add Cooper Specific Formats if any.
28 class PIC16Inst<dag outs, dag ins, string asmstr, list<dag> pattern>
29   : Instruction {
30   field bits<14> Inst;
32   let Namespace = "PIC16";
33   dag OutOperandList = outs;
34   dag InOperandList = ins;
35   let AsmString = asmstr;
36   let Pattern = pattern;
40 //===----------------------------------------------------------------------===//
41 // Byte Oriented instruction class in PIC16 : <|opcode|d|f|>
42 // opcode = 6 bits.
43 // d = direction = 1 bit.
44 // f = file register address = 7 bits.
45 //===----------------------------------------------------------------------===//
47 class ByteFormat<bits<6> opcode, dag outs, dag ins, string asmstr,
48                  list<dag> pattern>
49   :PIC16Inst<outs, ins, asmstr, pattern> {
50   bits<1>  d;
51   bits<7>  f;
53   let Inst{13-8} = opcode;
55   let Inst{7} = d;
56   let Inst{6-0} = f; 
59 //===----------------------------------------------------------------------===//
60 // Bit Oriented instruction class in PIC16 : <|opcode|b|f|>
61 // opcode = 4 bits.
62 // b = bit specifier = 3 bits.
63 // f = file register address = 7 bits.
64 //===----------------------------------------------------------------------===//
66 class BitFormat<bits<4> opcode, dag outs, dag ins, string asmstr, 
67                 list<dag> pattern>
68   : PIC16Inst<outs, ins, asmstr, pattern> {
69   bits<3>  b;
70   bits<7>  f;
72   let Inst{13-10} = opcode;
74   let Inst{9-7} = b;
75   let Inst{6-0} = f; 
78 //===----------------------------------------------------------------------===//
79 // Literal Format instruction class in PIC16 : <|opcode|k|>
80 // opcode = 6 bits
81 // k = literal = 8 bits
82 //===----------------------------------------------------------------------===//
84 class LiteralFormat<bits<6> opcode, dag outs, dag ins, string asmstr, 
85                     list<dag> pattern>
86   : PIC16Inst<outs, ins, asmstr, pattern> {
87   bits<8> k;
88   
89   let Inst{13-8} = opcode;
91   let Inst{7-0} = k; 
94 //===----------------------------------------------------------------------===//
95 // Control Format instruction class in PIC16 : <|opcode|k|>
96 // opcode = 3 bits.
97 // k = jump address = 11 bits.
98 //===----------------------------------------------------------------------===//
100 class ControlFormat<bits<3> opcode, dag outs, dag ins, string asmstr, 
101                     list<dag> pattern>
102   : PIC16Inst<outs, ins, asmstr, pattern> {
103   bits<11> k;
105   let Inst{13-11} = opcode;
107   let Inst{10-0} = k; 
110 //===----------------------------------------------------------------------===//
111 // Pseudo instruction class in PIC16
112 //===----------------------------------------------------------------------===//
114 class Pseudo<dag outs, dag ins, string asmstr, list<dag> pattern>
115   : PIC16Inst<outs, ins, asmstr, pattern> {
116    let Inst{13-6} = 0;