Skip to content

Commit a5564cb

Browse files
committed
refact: type pload instrs
Also rename __pload to _pload
1 parent a9f9a83 commit a5564cb

2 files changed

Lines changed: 73 additions & 71 deletions

File tree

src/arch/z80/backend/__init__.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -101,9 +101,9 @@
101101
from ._str import _ltstr, _gtstr, _eqstr, _lestr, _gestr, _nestr, _lenstr
102102

103103
# Param load and store instructions
104-
from .__pload import _pload8, _pload16, _pload32, _ploadf, _ploadstr, _fploadstr
105-
from .__pload import _pstore8, _pstore16, _pstore32, _pstoref16, _pstoref, _pstorestr
106-
from .__pload import _paddr
104+
from ._pload import _pload8, _pload16, _pload32, _ploadf, _ploadstr, _fploadstr
105+
from ._pload import _pstore8, _pstore16, _pstore32, _pstoref16, _pstoref, _pstorestr
106+
from ._pload import _paddr
107107

108108
from src.arch.z80.backend import common
109109

Lines changed: 70 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,19 @@
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
2015
from 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

Comments
 (0)