Put out* into the allocation order, allowing the register allocator to
[oota-llvm.git] / lib / Target / IA64 / IA64InstrFormats.td
1 //===- IA64InstrFormats.td - IA64 Instruction Formats --*- tablegen -*-=//
2 // 
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file was developed by Duraid Madina and is distributed under the
6 // University of Illinois Open Source License. See LICENSE.TXT for details.
7 // 
8 //===----------------------------------------------------------------------===//
9 //
10 //  - Warning: the stuff in here isn't really being used, so is mostly
11 //             junk. It'll get fixed as the JIT gets built.
12 //
13 //===----------------------------------------------------------------------===//
14
15 //===----------------------------------------------------------------------===//
16 // Instruction format superclass
17 //===----------------------------------------------------------------------===//
18
19 class InstIA64<bits<4> op, dag OL, string asmstr> : Instruction { 
20   // IA64 instruction baseline
21   field bits<41> Inst;
22   let Namespace = "IA64";
23   let OperandList = OL;
24   let AsmString = asmstr;
25
26   let Inst{40-37} = op;
27 }
28
29 //"Each Itanium instruction is categorized into one of six types."
30 //We should have:
31 // A, I, M, F, B, L+X
32
33 class AForm<bits<4> opcode, bits<6> qpReg, dag OL, string asmstr> : 
34   InstIA64<opcode, OL, asmstr> {
35
36   let Inst{5-0} = qpReg;
37 }
38
39 let isBranch = 1, isTerminator = 1 in
40 class BForm<bits<4> opcode, bits<6> x6, bits<3> btype, dag OL, string asmstr> :
41   InstIA64<opcode, OL, asmstr> {
42
43   let Inst{32-27} = x6;
44   let Inst{8-6} = btype;
45 }
46
47 class MForm<bits<4> opcode, bits<6> x6, dag OL, string asmstr> :
48   InstIA64<opcode, OL, asmstr> {
49     bits<7> Ra;
50     bits<7> Rb;
51     bits<16> disp;
52
53     let Inst{35-30} = x6;
54 //  let Inst{20-16} = Rb;
55     let Inst{15-0} = disp;
56 }
57
58 class RawForm<bits<4> opcode, bits<26> rest, dag OL, string asmstr> :
59   InstIA64<opcode, OL, asmstr> {
60     let Inst{25-0} = rest;
61 }
62
63 // Pseudo instructions.
64 class PseudoInstIA64<dag OL, string nm> : InstIA64<0, OL, nm>  {
65 }
66
67