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
  
79
  
80
  
81
  
82
  
83
  
84
  
85
  
86
  
87
  
88
  
89
  
90
  
91
  
92
  
93
  
94
  
95
  
96
  
97
  
98
  
99
  
100
  
101
  
102
  
103
  
104
  
105
  
106
  
107
  
108
  
109
  
110
  
111
  
112
  
113
  
114
  
115
  
116
  
117
  
118
  
119
  
120
  
121
  
122
  
123
  
124
  
125
  
126
  
127
  
128
  
129
  
130
  
131
  
132
  
133
  
134
  
135
  
136
  
137
  
138
  
139
  
140
  
141
  
142
  
143
  
144
  
145
  
146
  
147
  
148
  
149
  
150
  
151
  
152
  
153
  
154
  
155
  
156
  
157
  
158
  
159
  
160
  
# 
# $Id: peep.in,v 1.12 1998/03/28 15:47:46 grubba Exp $ 
# 
NOP : 
POP_N_ELEMS (0) :  
POP_N_ELEMS POP_VALUE : POP_N_ELEMS ($1a + 1) 
POP_VALUE POP_VALUE : POP_N_ELEMS (2) 
POP_VALUE POP_N_ELEMS : POP_N_ELEMS ($2a + 1) 
POP_N_ELEMS POP_N_ELEMS : POP_N_ELEMS ($1a + $2a) 
POP_N_ELEMS(1) : POP_VALUE 
 
MARK MARK: MARK2 
 
ASSIGN_GLOBAL POP_VALUE : ASSIGN_GLOBAL_AND_POP($1a) 
ASSIGN_LOCAL  POP_VALUE : ASSIGN_LOCAL_AND_POP($1a) 
CALL_LFUN POP_VALUE : CALL_LFUN_AND_POP($1a) 
APPLY POP_VALUE : APPLY_AND_POP($1a) 
MARK APPLY : MARK_APPLY($2a) 
MARK_APPLY POP_VALUE : MARK_APPLY_POP($1a) 
NUMBER(0) : CONST0 
NUMBER(1) : CONST1 
NUMBER(-1) : CONST_1 
NUMBER (0x7fffffff) : BIGNUM 
CONST0 NEGATE : CONST0 
CONST1 NEGATE : CONST_1 
CONST_1 NEGATE : CONST1 
NUMBER NEGATE : NEG_NUMBER($1a) 
NUMBER [$1a < 0] : NEG_NUMBER (-$1a) 
NEG_NUMBER NEGATE : NUMBER ($1a) 
NEGATE NEGATE : 
COMPL COMPL : 
NEGATE CONST_1 ADD : COMPL 
NEGATE CONST1 SUBTRACT : COMPL 
CONST0 ASSIGN_LOCAL_AND_POP : CLEAR_LOCAL($2a) 
CLEAR_LOCAL NUMBER(0) ASSIGN_LOCAL_AND_POP ($1a) : CLEAR_LOCAL($1a) 
CLEAR_LOCAL NUMBER(0) ASSIGN_LOCAL_AND_POP ($1a+1) : CLEAR_2_LOCAL($1a) 
 
#CONST_1 MULTIPLY : NEGATE 
#CONST0 MULTIPLY : POP_VALUE CONST0 
#CONST1 MULTIPLY :  
#NUMBER MULTIPLY [count_bits($1a)==1]: NUMBER(my_log2($1a)) LSH 
 
#CONST_1 DIVIDE : NEGATE 
#CONST1 DIVIDE :  
#NUMBER DIVIDE [count_bits($1a)==1]: NUMBER(my_log2($1a)) RSH 
 
CONST0 SUBTRACT: 
CONST0 XOR: 
CONST_1 XOR: COMPL 
EQ CONST0: NOT 
CONST0 RETURN: RETURN_0 
CONST1 RETURN: RETURN_1 
INC POP_VALUE: INC_AND_POP 
POST_INC POP_VALUE: INC_AND_POP 
DEC POP_VALUE: DEC_AND_POP 
POST_DEC POP_VALUE: DEC_AND_POP 
NOT BRANCH_WHEN_NON_ZERO: BRANCH_WHEN_ZERO($2a) 
NOT BRANCH_WHEN_ZERO: BRANCH_WHEN_NON_ZERO($2a) 
 
BRANCH !LABEL : BRANCH($1a) 
RETURN !LABEL : RETURN 
RETURN_0 !LABEL : RETURN_0 
BRANCH LABEL ($1a) : LABEL ($1a) 
 
LOCAL_LVALUE INC : INC_LOCAL ($1a) 
LOCAL_LVALUE POST_INC : POST_INC_LOCAL ($1a) 
LOCAL_LVALUE INC_AND_POP : INC_LOCAL_AND_POP ($1a) 
INC_LOCAL POP_VALUE : INC_LOCAL_AND_POP ($1a) 
POST_INC_LOCAL POP_VALUE : INC_LOCAL_AND_POP ($1a) 
 
LOCAL_LVALUE DEC : DEC_LOCAL ($1a) 
LOCAL_LVALUE POST_DEC : POST_DEC_LOCAL ($1a) 
LOCAL_LVALUE DEC_AND_POP : DEC_LOCAL_AND_POP ($1a) 
DEC_LOCAL POP_VALUE : DEC_LOCAL_AND_POP ($1a) 
POST_DEC_LOCAL POP_VALUE : DEC_LOCAL_AND_POP ($1a) 
 
ASSIGN_LOCAL_AND_POP LOCAL ($1a) : ASSIGN_LOCAL ($1a) 
ASSIGN_LOCAL_AND_POP LOCAL ($1a) RETURN : RETURN 
ASSIGN_GLOBAL_AND_POP GLOBAL ($1a) : ASSIGN_GLOBAL ($1a) 
DEC_LOCAL_AND_POP LOCAL ($1a) : DEC_LOCAL ($1a) 
INC_LOCAL_AND_POP LOCAL ($1a) : INC_LOCAL ($1a) 
 
GLOBAL_LVALUE INC_AND_POP GLOBAL($1a): GLOBAL_LVALUE($1a) INC 
GLOBAL_LVALUE DEC_AND_POP GLOBAL($1a): GLOBAL_LVALUE($1a) DEC 
 
CONST1 BRANCH_WHEN_ZERO: 
CONST0 BRANCH_WHEN_ZERO: BRANCH($2a) 
CONST1 BRANCH_WHEN_NON_ZERO: BRANCH($2a) 
CONST0 BRANCH_WHEN_NON_ZERO:  
 
EQ BRANCH_WHEN_NON_ZERO: BRANCH_WHEN_EQ ($2a) 
NE BRANCH_WHEN_NON_ZERO: BRANCH_WHEN_NE ($2a) 
LT BRANCH_WHEN_NON_ZERO: BRANCH_WHEN_LT ($2a) 
GT BRANCH_WHEN_NON_ZERO: BRANCH_WHEN_GT ($2a) 
LE BRANCH_WHEN_NON_ZERO: BRANCH_WHEN_LE ($2a) 
GE BRANCH_WHEN_NON_ZERO: BRANCH_WHEN_GE ($2a) 
 
EQ BRANCH_WHEN_ZERO: BRANCH_WHEN_NE ($2a) 
NE BRANCH_WHEN_ZERO: BRANCH_WHEN_EQ ($2a) 
LT BRANCH_WHEN_ZERO: BRANCH_WHEN_GE ($2a) 
GT BRANCH_WHEN_ZERO: BRANCH_WHEN_LE ($2a) 
LE BRANCH_WHEN_ZERO: BRANCH_WHEN_GT ($2a) 
GE BRANCH_WHEN_ZERO: BRANCH_WHEN_LT ($2a) 
 
EQ LOR: EQ_OR ($2a) 
EQ LAND: EQ_AND ($2a) 
 
EQ NOT: NE 
NE NOT: EQ 
LT NOT: GE 
GT NOT: LE 
LE NOT: GT 
GE NOT: LT 
 
LOCAL LOCAL [$2a<256 && $3o != F_SIZEOF && $3o != F_INDEX ]: 2_LOCALS ($1a) BYTE ($2a) 
MARK LOCAL [ $3o != F_SIZEOF && $3o != F_INDEX ]: MARK_AND_LOCAL ($2a) 
LOCAL SIZEOF: SIZEOF_LOCAL ($1a) 
STRING INDEX: STRING_INDEX ($1a) 
LOCAL INDEX: LOCAL_INDEX ($1a) 
CONST0 INDEX: POS_INT_INDEX (0) 
CONST_1 INDEX: NEG_INT_INDEX (1) 
CONST1 INDEX: POS_INT_INDEX (1) 
 
NUMBER [$1a < 0] INDEX: NEG_INT_INDEX (-$1a) 
NUMBER [$1a >= 0] INDEX: POS_INT_INDEX ($1a) 
NEG_NUMBER [$1a >= 0] INDEX: NEG_INT_INDEX ($1a) 
NEG_NUMBER [$1a < 0] INDEX: POS_INT_INDEX (-$1a) 
 
BRANCH_WHEN_ZERO BRANCH LABEL ($1a): BRANCH_WHEN_NON_ZERO($2a) LABEL($1a) 
BRANCH_WHEN_NON_ZERO BRANCH LABEL ($1a): BRANCH_WHEN_ZERO($2a) LABEL($1a) 
 
BRANCH_WHEN_EQ BRANCH LABEL ($1a) : BRANCH_WHEN_NE($2a) LABEL($1a) 
BRANCH_WHEN_NE BRANCH LABEL ($1a) : BRANCH_WHEN_EQ($2a) LABEL($1a) 
 
BRANCH_WHEN_LT BRANCH LABEL ($1a) : BRANCH_WHEN_GE($2a) LABEL($1a) 
BRANCH_WHEN_GE BRANCH LABEL ($1a) : BRANCH_WHEN_LT($2a) LABEL($1a) 
 
BRANCH_WHEN_LE BRANCH LABEL ($1a) : BRANCH_WHEN_GT($2a) LABEL($1a) 
BRANCH_WHEN_GT BRANCH LABEL ($1a) : BRANCH_WHEN_LE($2a) LABEL($1a) 
 
 
CONST0 ADD: ADD_INT (0) 
CONST1 ADD: ADD_INT (1) 
CONST_1 ADD: ADD_NEG_INT (1) 
NUMBER [$1a >= 0] ADD : ADD_INT ($1a) 
NUMBER [$1a < 0] ADD : ADD_NEG_INT (-$1a) 
 
CONST0 SUBTRACT: ADD_INT (0) 
CONST1 SUBTRACT: ADD_NEG_INT (-1) 
CONST_1 SUBTRACT: ADD_INT (1) 
NUMBER [$1a >= 0] SUBTRACT : ADD_NEG_INT ($1a) 
NUMBER [$1a < 0] SUBTRACT : ADD_INT (-$1a) 
 
LTOSVAL2 ADD ASSIGN_AND_POP : ADD_TO_AND_POP 
LTOSVAL ADD ASSIGN_AND_POP : ADD_TO_AND_POP 
 
APPLY RETURN : APPLY_AND_RETURN($1a) 
CALL_FUNCTION RETURN : CALL_FUNCTION_AND_RETURN 
CALL_LFUN RETURN : CALL_LFUN_AND_RETURN($1a)