1010# intermediate-code translations
1111# --------------------------------------------------------------
1212
13+ from typing import List
1314
14- from .common import is_int , runtime_call
15- from ._8bit import int8 , _8bit_oper
16- from ._16bit import int16 , _16bit_oper
17- from ._32bit import _32bit_oper
18- from ._f16 import _f16_oper
19- from ._float import _fpush , _float_oper
2015from src .arch .z80 .backend .runtime import Labels as RuntimeLabel
16+ from src .arch .z80 .backend .common import is_int , runtime_call , Quad
2117
18+ from src .arch .z80 .backend ._8bit import int8 , _8bit_oper
19+ from src .arch .z80 .backend ._16bit import int16 , _16bit_oper
20+ from src .arch .z80 .backend ._32bit import _32bit_oper
21+ from src .arch .z80 .backend ._f16 import _f16_oper
22+ from src .arch .z80 .backend ._float import _fpush , _float_oper
2223
23- def _paddr (ins ):
24+
25+ def _paddr (ins : Quad ) -> List [str ]:
2426 """Returns code sequence which points to
2527 local variable or parameter (HL)
2628 """
@@ -31,13 +33,13 @@ def _paddr(ins):
3133 if indirect :
3234 oper = oper [1 :]
3335
34- I = int (oper )
35- if I >= 0 :
36- I += 4 # Return Address + "push IX"
36+ i = int (oper )
37+ if i >= 0 :
38+ i += 4 # Return Address + "push IX"
3739
3840 output .append ("push ix" )
3941 output .append ("pop hl" )
40- output .append ("ld de, %i" % I )
42+ output .append ("ld de, %i" % i )
4143 output .append ("add hl, de" )
4244
4345 if indirect :
@@ -50,7 +52,7 @@ def _paddr(ins):
5052 return output
5153
5254
53- def _pload (offset , size ) :
55+ def _pload (offset , size : int ) -> List [ str ] :
5456 """Generic parameter loading.
5557 Emits output code for loading at (IX + offset).
5658 size = Number of bytes to load:
@@ -65,26 +67,26 @@ def _pload(offset, size):
6567 if indirect :
6668 offset = offset [1 :]
6769
68- I = int (offset )
69- if I >= 0 : # If it is a parameter, round up to even bytes
70- I += 4 + (size % 2 if not indirect else 0 ) # Return Address + "push IX"
70+ i = int (offset )
71+ if i >= 0 : # If it is a parameter, round up to even bytes
72+ i += 4 + (size % 2 if not indirect else 0 ) # Return Address + "push IX"
7173
72- ix_changed = (indirect or size < 5 ) and (abs (I ) + size ) > 127 # Offset > 127 bytes. Need to change IX
74+ ix_changed = (indirect or size < 5 ) and (abs (i ) + size ) > 127 # Offset > 127 bytes. Need to change IX
7375 if ix_changed : # more than 1 byte
7476 output .append ("push ix" )
75- output .append ("ld de, %i" % I )
77+ output .append ("ld de, %i" % i )
7678 output .append ("add ix, de" )
77- I = 0
79+ i = 0
7880 elif size == 5 : # For floating point numbers we always use DE as IX offset
7981 output .append ("push ix" )
8082 output .append ("pop hl" )
81- output .append ("ld de, %i" % I )
83+ output .append ("ld de, %i" % i )
8284 output .append ("add hl, de" )
83- I = 0
85+ i = 0
8486
8587 if indirect :
86- output .append ("ld h, (ix%+i)" % (I + 1 ))
87- output .append ("ld l, (ix%+i)" % I )
88+ output .append ("ld h, (ix%+i)" % (i + 1 ))
89+ output .append ("ld l, (ix%+i)" % i )
8890
8991 if size == 1 :
9092 output .append ("ld a, (hl)" )
@@ -99,15 +101,15 @@ def _pload(offset, size):
99101 output .append (runtime_call (RuntimeLabel .ILOADF ))
100102 else :
101103 if size == 1 :
102- output .append ("ld a, (ix%+i)" % I )
104+ output .append ("ld a, (ix%+i)" % i )
103105 else :
104106 if size <= 4 : # 16/32bit integer, low part
105- output .append ("ld l, (ix%+i)" % I )
106- output .append ("ld h, (ix%+i)" % (I + 1 ))
107+ output .append ("ld l, (ix%+i)" % i )
108+ output .append ("ld h, (ix%+i)" % (i + 1 ))
107109
108110 if size > 2 : # 32 bit integer, high part
109- output .append ("ld e, (ix%+i)" % (I + 2 ))
110- output .append ("ld d, (ix%+i)" % (I + 3 ))
111+ output .append ("ld e, (ix%+i)" % (i + 2 ))
112+ output .append ("ld d, (ix%+i)" % (i + 3 ))
111113
112114 else : # Floating point
113115 output .append (runtime_call (RuntimeLabel .PLOADF ))
@@ -118,7 +120,7 @@ def _pload(offset, size):
118120 return output
119121
120122
121- def _pload8 (ins ) :
123+ def _pload8 (ins : Quad ) -> List [ str ] :
122124 """Loads from stack pointer (SP) + X, being
123125 X 2st parameter.
124126
@@ -131,7 +133,7 @@ def _pload8(ins):
131133 return output
132134
133135
134- def _pload16 (ins ) :
136+ def _pload16 (ins : Quad ) -> List [ str ] :
135137 """Loads from stack pointer (SP) + X, being
136138 X 2st parameter.
137139
@@ -143,7 +145,7 @@ def _pload16(ins):
143145 return output
144146
145147
146- def _pload32 (ins ) :
148+ def _pload32 (ins : Quad ) -> List [ str ] :
147149 """Loads from stack pointer (SP) + X, being
148150 X 2st parameter.
149151
@@ -156,7 +158,7 @@ def _pload32(ins):
156158 return output
157159
158160
159- def _ploadf (ins ) :
161+ def _ploadf (ins : Quad ) -> List [ str ] :
160162 """Loads from stack pointer (SP) + X, being
161163 X 2st parameter.
162164
@@ -167,7 +169,7 @@ def _ploadf(ins):
167169 return output
168170
169171
170- def _ploadstr (ins ) :
172+ def _ploadstr (ins : Quad ) -> List [ str ] :
171173 """Loads from stack pointer (SP) + X, being
172174 X 2st parameter.
173175
@@ -182,7 +184,7 @@ def _ploadstr(ins):
182184 return output
183185
184186
185- def _fploadstr (ins ) :
187+ def _fploadstr (ins : Quad ) -> List [ str ] :
186188 """Loads from stack pointer (SP) + X, being
187189 X 2st parameter.
188190
@@ -197,7 +199,7 @@ def _fploadstr(ins):
197199 return output
198200
199201
200- def _pstore8 (ins ) :
202+ def _pstore8 (ins : Quad ) -> List [ str ] :
201203 """Stores 2nd parameter at stack pointer (SP) + X, being
202204 X 1st parameter.
203205
@@ -263,7 +265,7 @@ def _pstore8(ins):
263265 return output
264266
265267
266- def _pstore16 (ins ) :
268+ def _pstore16 (ins : Quad ) -> List [ str ] :
267269 """Stores 2nd parameter at stack pointer (SP) + X, being
268270 X 1st parameter.
269271
@@ -276,22 +278,22 @@ def _pstore16(ins):
276278 if indirect :
277279 offset = offset [1 :]
278280
279- I = int (offset )
280- if I >= 0 :
281- I += 4 # Return Address + "push IX"
281+ i = int (offset )
282+ if i >= 0 :
283+ i += 4 # Return Address + "push IX"
282284
283285 if is_int (value ):
284286 output = []
285287 else :
286288 output = _16bit_oper (value )
287289
288- ix_changed = not (- 128 + size <= I <= 127 - size ) # Offset > 127 bytes. Need to change IX
290+ ix_changed = not (- 128 + size <= i <= 127 - size ) # Offset > 127 bytes. Need to change IX
289291
290292 if indirect :
291293 if is_int (value ):
292294 output .append ("ld hl, %i" % int16 (value ))
293295
294- output .append ("ld bc, %i" % I )
296+ output .append ("ld bc, %i" % i )
295297 output .append (runtime_call (RuntimeLabel .PISTORE16 ))
296298 return output
297299
@@ -302,7 +304,7 @@ def _pstore16(ins):
302304
303305 output .append ("push ix" )
304306 output .append ("pop hl" )
305- output .append ("ld bc, %i" % I )
307+ output .append ("ld bc, %i" % i )
306308 output .append ("add hl, bc" )
307309
308310 if is_int (value ):
@@ -319,16 +321,16 @@ def _pstore16(ins):
319321
320322 if is_int (value ):
321323 v = int16 (value )
322- output .append ("ld (ix%+i), %i" % (I , v & 0xFF ))
323- output .append ("ld (ix%+i), %i" % (I + 1 , v >> 8 ))
324+ output .append ("ld (ix%+i), %i" % (i , v & 0xFF ))
325+ output .append ("ld (ix%+i), %i" % (i + 1 , v >> 8 ))
324326 else :
325- output .append ("ld (ix%+i), l" % I )
326- output .append ("ld (ix%+i), h" % (I + 1 ))
327+ output .append ("ld (ix%+i), l" % i )
328+ output .append ("ld (ix%+i), h" % (i + 1 ))
327329
328330 return output
329331
330332
331- def _pstore32 (ins ) :
333+ def _pstore32 (ins : Quad ) -> List [ str ] :
332334 """Stores 2nd parameter at stack pointer (SP) + X, being
333335 X 1st parameter.
334336
@@ -340,25 +342,25 @@ def _pstore32(ins):
340342 if indirect :
341343 offset = offset [1 :]
342344
343- I = int (offset )
344- if I >= 0 :
345- I += 4 # Return Address + "push IX"
345+ i = int (offset )
346+ if i >= 0 :
347+ i += 4 # Return Address + "push IX"
346348
347349 output = _32bit_oper (value )
348350
349351 if indirect :
350- output .append ("ld bc, %i" % I )
352+ output .append ("ld bc, %i" % i )
351353 output .append (runtime_call (RuntimeLabel .PISTORE32 ))
352354 return output
353355
354356 # direct store
355- output .append ("ld bc, %i" % I )
357+ output .append ("ld bc, %i" % i )
356358 output .append (runtime_call (RuntimeLabel .PSTORE32 ))
357359
358360 return output
359361
360362
361- def _pstoref16 (ins ) :
363+ def _pstoref16 (ins : Quad ) -> List [ str ] :
362364 """Stores 2nd parameter at stack pointer (SP) + X, being
363365 X 1st parameter.
364366
@@ -370,25 +372,25 @@ def _pstoref16(ins):
370372 if indirect :
371373 offset = offset [1 :]
372374
373- I = int (offset )
374- if I >= 0 :
375- I += 4 # Return Address + "push IX"
375+ i = int (offset )
376+ if i >= 0 :
377+ i += 4 # Return Address + "push IX"
376378
377379 output = _f16_oper (value )
378380
379381 if indirect :
380- output .append ("ld bc, %i" % I )
382+ output .append ("ld bc, %i" % i )
381383 output .append (runtime_call (RuntimeLabel .PISTORE32 ))
382384 return output
383385
384386 # direct store
385- output .append ("ld bc, %i" % I )
387+ output .append ("ld bc, %i" % i )
386388 output .append (runtime_call (RuntimeLabel .PSTORE32 ))
387389
388390 return output
389391
390392
391- def _pstoref (ins ) :
393+ def _pstoref (ins : Quad ) -> List [ str ] :
392394 """Stores 2nd parameter at stack pointer (SP) + X, being
393395 X 1st parameter.
394396
@@ -400,25 +402,25 @@ def _pstoref(ins):
400402 if indirect :
401403 offset = offset [1 :]
402404
403- I = int (offset )
404- if I >= 0 :
405- I += 4 # Return Address + "push IX"
405+ i = int (offset )
406+ if i >= 0 :
407+ i += 4 # Return Address + "push IX"
406408
407409 output = _float_oper (value )
408410
409411 if indirect :
410- output .append ("ld hl, %i" % I )
412+ output .append ("ld hl, %i" % i )
411413 output .append (runtime_call (RuntimeLabel .PISTOREF ))
412414 return output
413415
414416 # direct store
415- output .append ("ld hl, %i" % I )
417+ output .append ("ld hl, %i" % i )
416418 output .append (runtime_call (RuntimeLabel .PSTOREF ))
417419
418420 return output
419421
420422
421- def _pstorestr (ins ) :
423+ def _pstorestr (ins : Quad ) -> List [ str ] :
422424 """Stores 2nd parameter at stack pointer (SP) + X, being
423425 X 1st parameter.
424426
@@ -460,11 +462,11 @@ def _pstorestr(ins):
460462 else :
461463 indirect = False
462464
463- I = int (value )
464- if I >= 0 :
465- I += 4 # Return Address + "push IX"
465+ i = int (value )
466+ if i >= 0 :
467+ i += 4 # Return Address + "push IX"
466468
467- output .append ("ld bc, %i" % I )
469+ output .append ("ld bc, %i" % i )
468470
469471 if not temporal :
470472 if indirect :
0 commit comments