1 code generation (cont’d.). 2 save to register a 1. 2 already in register a, or 2. already in...
Post on 20-Dec-2015
222 views
TRANSCRIPT
1
Code Generation (cont’d.)
2
Code Generation (cont’d.)
Save to Register A 1. <term>2 already in Register A, or2. <factor> already in Register A, or3. <term>2 and <factor>both are not in Register A
3
Code Generation (cont’d.)
Node Specifier S(<term>1)save to rA
4
5
Code Generation (cont’d.)
6
Code Generation (cont’d.)
7
Code Generation (cont’d.) 9 and 10
S(<exp>) := S(<term>) = S(SUMSQ)
REGA = <exp>
S(<exp>) <> rA =S(MEAN)
8
Code Generation (cont’d.) 10
9
Code Generation (cont’d.) 10
S(<exp>2) <> rA = S(MEAN)
Call GETA(<exp>2) GETA(SUMSQ)
Generate [SUB S(MEAN)=T2]
S(<exp>1) := rA
REGA := <exp>1
10
Code Generation (cont’d.) 11
S(<term>) := S(<factor>):= S(SUMSQ)
S(<term>) <> rA
S(<term>) := S(MEANl)
11
Code Generation (cont’d.) 11
S(<term>2) <> rA
S(<factor>) <> rA
Call GETA(MEAN)
Generate [MUL MEAN]
S(MEAN) := rA
REGA:= MEAN
12
Code Generation (cont’d.) 11
S(<term>2) <> rA
Call GETA(SUMSQ)
Generate [DIV #100]
S(<term>1) := rA
REGA := <term>1
13
Code Generation (cont’d.) 12
S(<factor>) := S(SUMSQ)
S(<factor>) := S(MEANl)
S(<factor>) := S(MEANr)
S(<factor>) := S(#100)
14
15
Code Generation (cont’d.)
REGA = NULL
Generate [LDA SUMSQ]
S(SUMSQ) := rA
REGA := SUMSQ
REGA <> NULL = SUMSQ
S(MEAN) <> rA = S(SUMSQ)
Generate [STA T1]
S(SUMSQ) = T1
Generate [LDA MEAN]
S(MEAN) := rA
REGA := MEAN
REGA <> NULL = MEANS(SUMSQ) <> rA = S(MEAN)Generate [STA T2]S(MEAN) = T2Generate [LDA S(SUMSQ)=T1]S(SUMSQ) := rAREGA := SUMSQ
16
Code Generation (cont’d.)
I
17
Code Generation (cont’d.) 1, 2, and 3
18
Code Generation (cont’d.) 4, 5, and 7
19
8, 14, 15
20
Code Generation (cont’d.) 16 and 17
21
Code Generation (cont’d.)
22
Code Generation (cont’d.)
23
24
25
26
27
28
29
30
31
LDA SUMSQDIV #100STA T1LDA MEANMUL MEANSTA T2LDA T1SUB T2STA T3LDA T3STA VARIANCE
32
T2
T2
LDA MEANMUL MEANSTA T2LDA SUMSQDIV #100STA T1LDA T1SUB T2STA T3LDA T3STA VARIANCE
33
T2
T2
34
35
36
37
3*(6-1)=3*5=15
38
39
3*(I-1)
Content of Address of A A(3*(I-1))=5
40
41
3*((I-0)*(6-1+1)+(J-1))=5
42
3*((I-1)*(10-1+1)+(2J-1-1))3*(i1(i8)*103*(i2(i9) +i3(i10)-1-1
+i4(i11)-1 +i53*i6(i12)i7(i13)
43
44
45
46
Machine-Independent Compiler Features
47
Machine-Independent Compiler Features Storage Allocation
Static Allocation: cannot be used for recursive call
Dynamic Allocation: Activation Record
48
49
50
51
52
53
54
55
P-Code Compliers
56
Compiler-Compilers
57
http://ptt.cc/google.wmv