-
Notifications
You must be signed in to change notification settings - Fork 0
/
optempl.inc
188 lines (133 loc) · 2.38 KB
/
optempl.inc
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
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
; Operation template macros
Op2Template MACRO dst,instr,src,res
IF ((dst)==(src))
instr src,res
ELSE
instr src,W
movwf dst
ENDIF
ENDM
SelectOffset MACRO off,addr
off =1
IF ((addr)==INDF)
off =0
ENDIF
ENDM
FSRStep1 MACRO off
IF ((off)==0)
incf FSR,f
ENDIF
ENDM
FSRStep2 MACRO off,shift
IF (((off)==0)&&(shift!=1))
IF (shift==0)
decf FSR,f
ENDIF
IF (shift==2)
incf FSR,f
ENDIF
IF (shift>2)
ERROR Illegal FSR offset in indirect operation : shift .
ENDIF
ENDIF
ENDM
FSRStep3 MACRO off
IF ((off)==0)
decf FSR,f
ENDIF
ENDM
FSRStep4 MACRO off,shift
IF (((off)==0)&&(shift!=0))
IF (shift==1)
incf FSR,f
ENDIF
IF (shift==2)
incf FSR,f
incf FSR,f
ENDIF
IF (shift>2)
ERROR Illegal FSR offset in indirect operation : shift .
ENDIF
ENDIF
ENDM
FSRStep5 MACRO off
IF ((off)==0)
incfsz FSR,f
nop
ENDIF
ENDM
FSRStep6 MACRO off,shift
IF (((off)==0)&&(shift!=1))
IF (shift==0)
decfsz FSR,f
nop
ENDIF
IF (shift==2)
incfsz FSR,f
nop
ENDIF
IF (shift>2)
ERROR Illegal FSR offset in indirect operation : shift .
ENDIF
ENDIF
ENDM
Op2wiTemplate MACRO dst,src,shift,op1,op2
LOCAL doff,soff
SelectOffset doff,dst
SelectOffset soff,src
op1 dst,src
FSRStep1 doff*soff
op2 dst+doff,src+soff
FSRStep2 doff*soff,shift
ENDM
Op2wliTemplate MACRO dst,lit,shift,op1,op2
LOCAL doff
SelectOffset doff,dst
op1 dst,low(lit)
FSRStep1 doff
op2 dst+doff,high(lit)
FSRStep2 doff,shift
ENDM
Op2wlizTemplate MACRO dst,lit,shift,op1,op2
LOCAL doff
SelectOffset doff,dst
IF (low(lit)==0)
FSRStep1 doff
op1 dst+doff,high(lit)
FSRStep2 doff,shift
ELSE
Op2wliTemplate dst,lit,shift,op1,op2
ENDIF
ENDM
Op3wiTemplate MACRO dst,src,op,shift,op1,op2
LOCAL doff,soff,opoff
SelectOffset doff,dst
SelectOffset soff,src
SelectOffset opoff,op
op1 dst,src,op
FSRStep1 doff*soff*opoff
op2 dst+doff,src+soff,op+opoff
FSRStep2 doff*soff*opoff,shift
ENDM
Op3wliTemplate MACRO dst,src,lit,shift,op1,op2
LOCAL doff,soff
SelectOffset doff,dst
SelectOffset soff,src
op1 dst,src,low(lit)
FSRStep1 doff*soff
op2 dst+doff,src+soff,high(lit)
FSRStep2 doff*soff,shift
ENDM
Op3wlizTemplate MACRO dst,src,lit,shift,op1,op2
LOCAL doff,soff
SelectOffset doff,dst
SelectOffset soff,src
IF (low(lit)==0)
mov dst,src
FSRStep1 doff*soff
op1 dst+doff,src+soff,high(lit)
FSRStep2 doff*soff,shift
ELSE
Op3wliTemplate dst,src,lit,shift,op1,op2
ENDIF
ENDM