aboutsummaryrefslogtreecommitdiff
path: root/ABC/Assembler.dcl
blob: 6b0a585d98d8d591958645b88d29cacf3a3647dd (plain) (blame)
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
definition module ABC.Assembler

from ABC.Machine.Def import ::Arity, ::Name, ::NrArgs, ::ArgNr, ::Instruction, ::State
from ABC.Machine.AStack import ::ASrc, ::ADst
from ABC.Machine.BStack import ::BSrc, ::BDst
from ABC.Machine.GraphStore import ::Desc

:: Label     :== String
:: RedLabel  :== Label
:: DescLabel :== Label
:: NrInstr   :== Int

:: Assembler :== [Statement]

:: Statement
	= Label        Label
	| Descriptor   DescLabel RedLabel Arity Name
	| Br           NrInstr
	| BrFalse      NrInstr
	| BrTrue       NrInstr
	| Dump         String
	| AddArgs      ASrc NrArgs ADst
	| Create
	| DelArgs      ASrc NrArgs ADst
	| EqDesc       DescLabel ASrc
	| EqDescArity  DescLabel Arity ASrc
	| EqB
	| EqB_a        Bool ASrc
	| EqB_b        Bool BSrc
	| EqI
	| EqI_a        Int ASrc
	| EqI_b        Int BSrc
	| Fill         DescLabel NrArgs Label ADst
	| Fill_a       ASrc ADst
	| FillB        Bool ADst
	| FillB_b      BSrc ADst
	| FillI        Int ADst
	| FillI_b      BSrc ADst
	| GetDescArity ASrc
	| GetNodeArity ASrc
	| Halt
	| Jmp          Label
	| JmpEval
	| JmpFalse     Label
	| JmpTrue      Label
	| Jsr          Label
	| JsrEval
	| NoOp
	| Pop_a        Int
	| Pop_b        Int
	| Print        String
	| PrintSymbol  ASrc
	| Push_a       ASrc
	| PushAPEntry  ASrc
	| PushArg      ASrc Arity ArgNr
	| PushArg_b    ASrc
	| PushArgs     ASrc Arity ArgNr
	| PushArgs_b   ASrc
	| Push_b       Int
	| PushB        Bool
	| PushB_a      ASrc
	| PushI        Int
	| PushI_a      ASrc
	| ReplArgs     Arity NrArgs
	| ReplArgs_b
	| Rtn
	| SetEntry     Label ADst
	| Update_a     ASrc ADst
	| Update_b     BSrc BDst
	| AddI
	| DecI
	| GtI 
	| IncI
	| LtI
	| MulI
	| SubI

assemble :: Assembler -> ([Instruction], [Desc])