DIGILIGHT
asm_macros.h
1 #define T0L r0
2 #define T0H r1
3 #define T2L r2
4 #define T2H r3
5 #define T4L r4
6 #define T4H r5
7 #define T6L r6
8 #define T6H r7
9 #define T8L r8
10 #define T8H r9
11 #define T10L r10
12 #define T10H r11
13 #define T12L r12
14 #define T12H r13
15 #define T14L r14
16 #define T14H r15
17 #define AL r16
18 #define AH r17
19 #define BL r18
20 #define BH r19
21 #define CL r20
22 #define CH r21
23 #define DL r22
24 #define DH r23
25 #define EL r24
26 #define EH r25
27 #define XL r26
28 #define XH r27
29 #define YL r28
30 #define YH r29
31 #define ZL r30
32 #define ZH r31
33 
34 .macro ldiw dh,dl, abs
35  ldi \dl, lo8(\abs)
36  ldi \dh, hi8(\abs)
37 .endm
38 
39 .macro subiw dh,dl, abs
40  subi \dl, lo8(\abs)
41  sbci \dh, hi8(\abs)
42 .endm
43 
44 .macro addw dh,dl, sh,sl
45  add \dl, \sl
46  adc \dh, \sh
47 .endm
48 
49 .macro addd d3,d2,d1,d0, s3,s2,s1,s0
50  add \d0, \s0
51  adc \d1, \s1
52  adc \d2, \s2
53  adc \d3, \s3
54 .endm
55 
56 .macro subw dh,dl, sh,sl
57  sub \dl, \sl
58  sbc \dh, \sh
59 .endm
60 
61 .macro subd d3,d2,d1,d0, s3,s2,s1,s0
62  sub \d0, \s0
63  sbc \d1, \s1
64  sbc \d2, \s2
65  sbc \d3, \s3
66 .endm
67 
68 .macro lddw dh,dl, src
69  ldd \dl, \src
70  ldd \dh, \src+1
71 .endm
72 
73 .macro ldw dh,dl, src
74  ld \dl, \src
75  ld \dh, \src
76 .endm
77 
78 .macro stw dst, sh,sl
79  st \dst, \sl
80  st \dst, \sh
81 .endm
82 
83 .macro clrw dh, dl
84  clr \dh
85  clr \dl
86 .endm
87 
88 .macro lsrw dh, dl
89  lsr \dh
90  ror \dl
91 .endm
92 
93 .macro asrw dh, dl
94  asr \dh
95  ror \dl
96 .endm
97 
98 .macro lslw dh, dl
99  lsl \dl
100  rol \dh
101 .endm
102 
103 .macro pushw dh, dl
104  push \dh
105  push \dl
106 .endm
107 
108 .macro popw dh, dl
109  pop \dl
110  pop \dh
111 .endm
112 
113 .macro lpmw dh,dl, src
114  lpm \dl, \src
115  lpm \dh, \src
116 .endm
117 
118 .macro rjne lbl
119  breq 99f
120  rjmp \lbl
121 99:
122 .endm
123 
124 
125 .macro FMULS16 d3,d2,d1,d0 ,s1h,s1l, s2h,s2l ;Fractional Multiply (19clk)
126  fmuls \s1h, \s2h
127  movw \d2, T0L
128  fmul \s1l, \s2l
129  movw \d0, T0L
130  adc \d2, EH ;EH: zero reg.
131  fmulsu \s1h, \s2l
132  sbc \d3, EH
133  add \d1, T0L
134  adc \d2, T0H
135  adc \d3, EH
136  fmulsu \s2h, \s1l
137  sbc \d3, EH
138  add \d1, T0L
139  adc \d2, T0H
140  adc \d3, EH
141 .endm
142 
143 
144 .macro SQRT32 ; 32bit square root (526..542clk)
145  clr T6L
146  clr T6H
147  clr T8L
148  clr T8H
149  ldi BL, 1
150  ldi BH, 0
151  clr CL
152  clr CH
153  ldi DH, 16
154 90: lsl T2L
155  rol T2H
156  rol T4L
157  rol T4H
158  rol T6L
159  rol T6H
160  rol T8L
161  rol T8H
162  lsl T2L
163  rol T2H
164  rol T4L
165  rol T4H
166  rol T6L
167  rol T6H
168  rol T8L
169  rol T8H
170  brpl 91f
171  add T6L, BL
172  adc T6H, BH
173  adc T8L, CL
174  adc T8H, CH
175  rjmp 92f
176 91: sub T6L, BL
177  sbc T6H, BH
178  sbc T8L, CL
179  sbc T8H, CH
180 92: lsl BL
181  rol BH
182  rol CL
183  andi BL, 0b11111000
184  ori BL, 0b00000101
185  sbrc T8H, 7
186  subi BL, 2
187  dec DH
188  brne 90b
189  lsr CL
190  ror BH
191  ror BL
192  lsr CL
193  ror BH
194  ror BL
195 .endm
196