PSEUDOCODE COMMENTS
1 save stage current address before, start
2 assume result will not be (l op z) or (z op r) is[SA]=0
3 if left == constant (c op r)
4 parse right into PRIMARY
5 if left == zero (z op r)
6 pass current stage address is[SA]=snext
7 if right == int address double()
8 and op == add or subtract
9 double constant (2*c +- ia)
10 LOAD CONSTANT INTO SECONDARY GETw2n
11 else (v op r)
12 PUSH LEFT ONTO STACK PUSH1
13 parse right into PRIMARY down1()
14 if right == constant (v op c)
15 if right == zero (v op z)
16 pass original stage address is[SA]=start
17 purge PUSH instruction and adjust csp
18 if op == add commutative
19 if left == int address double()
20 double constant (ia +- 2*c)
21 LOAD CONSTANT INTO SECONDARY GETw2n
22 else not commutative
23 MOVE PRIMARY TO SECONDARY MOVE21
24 if left == int address double()
25 and op == add or subtract
26 double constant (ia +- 2*c)
27 LOAD CONSTANT INTO PRIMARY GETw1n
28 else (v op v)
29 POP LEFT INTO SECONDARY POP2
30 if left == int address double()
31 and op == add or subtract
32 and right == not address
33 DOUBLE PRIMARY (RIGHT) (ia +- 2*v)
34 if right == int address double()
35 and op == add or subtract
36 and left == not address
37 DOUBLE SECONDARY (LEFT) (2*v +- ia)
38 if op == binary
39 if left or right is unsigned
40 select unsigned operation oper=oper2
41 if both constants (c op c)
42 pass constant designation is[TC]
43 pass constant value is[CV]=calc()
44 purge RIGHT CODE
45 if unsigned result
46 pass unsigned constant designation is[TC]=UINT
47 else
48 pass variable designation is[TC]
49 OPERATION gen(oper,0)
50 if op == subtract
51 and both int addresses (ia - ia)
52 DIVIDE PRIMARY (RESULT) BY 2 integers between
53 pass operator p-code is[OP]=oper
54 if op == add or subtract
55 if both are addresses (a +- a)
56 pass <result not an address> is[TA]=0
57 else
58 if right == address (? +- a)
59 pass right table address is[ST]=is2[ST]
60 pass right indirect data type is[TI]=is2[TI]
61 pass right address data type is[TA]=is2[TA]
62 else
63 pass left by default
64 if left not in symbol table
65 or right is in symbol table and is unsigned
66 pass right symbol table entry is[ST]=is2[ST]
67 else
68 pass left symbol table entry or zero default