[project @ 1996-02-06 14:32:22 by dnt]
[ghc-hetmet.git] / ghc / compiler / nativeGen / AlphaCode.hi
1 {-# GHC_PRAGMA INTERFACE VERSION 5 #-}
2 interface AlphaCode where
3 import AbsCSyn(MagicId)
4 import AsmRegAlloc(MachineCode, MachineRegisters, Reg)
5 import BitSet(BitSet)
6 import CLabelInfo(CLabel)
7 import CharSeq(CSeq)
8 import FiniteMap(FiniteMap)
9 import Maybes(Labda)
10 import OrdList(OrdList)
11 import PreludePS(_PackedString)
12 import Pretty(PprStyle)
13 import PrimKind(PrimKind)
14 import Stix(CodeSegment)
15 import UniqFM(UniqFM)
16 import UniqSet(UniqSet(..))
17 import Unique(Unique)
18 data Addr   = AddrImm Imm | AddrReg Reg | AddrRegImm Reg Imm
19 type AlphaCode = OrdList AlphaInstr
20 data AlphaInstr
21   = LD Size Reg Addr | LDA Reg Addr | LDAH Reg Addr | LDGP Reg Addr | LDI Size Reg Imm | ST Size Reg Addr | CLR Reg | ABS Size RI Reg | NEG Size Bool RI Reg | ADD Size Bool Reg RI Reg | SADD Size Size Reg RI Reg | SUB Size Bool Reg RI Reg | SSUB Size Size Reg RI Reg | MUL Size Bool Reg RI Reg | DIV Size Bool Reg RI Reg | REM Size Bool Reg RI Reg | NOT RI Reg | AND Reg RI Reg | ANDNOT Reg RI Reg | OR Reg RI Reg | ORNOT Reg RI Reg | XOR Reg RI Reg | XORNOT Reg RI Reg | SLL Reg RI Reg | SRL Reg RI Reg | SRA Reg RI Reg | ZAP Reg RI Reg | ZAPNOT Reg RI Reg | NOP | CMP Cond Reg RI Reg | FCLR Reg | FABS Reg Reg | FNEG Size Reg Reg | FADD Size Reg Reg Reg | FDIV Size Reg Reg Reg | FMUL Size Reg Reg Reg | FSUB Size Reg Reg Reg | CVTxy Size Size Reg Reg | FCMP Size Cond Reg Reg Reg | FMOV Reg Reg | BI Cond Reg Imm | BF Cond Reg Imm | BR Imm | JMP Reg Addr Int | BSR Imm Int | JSR Reg Addr Int | LABEL CLabel | FUNBEGIN CLabel | FUNEND CLabel | COMMENT _PackedString | SEGMENT CodeSegment | ASCII Bool [Char] | DATA Size [Imm]
22 data AlphaRegs 
23 data MagicId 
24 data Reg 
25 data BitSet 
26 data CLabel 
27 data CSeq 
28 data Cond   = EQ | LT | LE | ULT | ULE | NE | GT | GE | ALWAYS | NEVER
29 data FiniteMap a b 
30 data Imm   = ImmInt Int | ImmInteger Integer | ImmCLbl CLabel | ImmLab CSeq
31 data OrdList a 
32 data PrimKind 
33 data CodeSegment 
34 data RI   = RIReg Reg | RIImm Imm
35 data Size   = B | BU | W | WU | L | Q | FF | DF | GF | SF | TF
36 data UniqFM a 
37 type UniqSet a = UniqFM a
38 data Unique 
39 argRegs :: [(Reg, Reg)]
40 baseRegOffset :: MagicId -> Int
41 callerSaves :: MagicId -> Bool
42 f0 :: Reg
43 freeRegs :: [Reg]
44 gp :: Reg
45 kindToSize :: PrimKind -> Size
46 printLabeledCodes :: PprStyle -> [AlphaInstr] -> CSeq
47 pv :: Reg
48 ra :: Reg
49 reservedRegs :: [Int]
50 sp :: Reg
51 stgRegMap :: MagicId -> Labda Reg
52 strImmLab :: [Char] -> Imm
53 v0 :: Reg
54 zero :: Reg
55 instance MachineCode AlphaInstr
56 instance MachineRegisters AlphaRegs
57