Skip to content

Commit 46faf4b

Browse files
committed
Refactorize MATH labels
1 parent 7fd40bb commit 46faf4b

3 files changed

Lines changed: 72 additions & 20 deletions

File tree

src/arch/zx48k/backend/runtime/labels.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,15 @@
77
from . import core
88
from . import datarestore
99
from . import io
10+
from . import math
1011
from . import random
1112

1213

1314
class Labels(
1415
core.CoreLabels,
1516
datarestore.DataRestoreLabels,
1617
io.IOLabels,
18+
math.MathLabels,
1719
random.RandomLabels
1820
):
1921
""" All labels
@@ -40,6 +42,7 @@ def dict_join(*args: Dict[str, str]) -> Dict[str, str]:
4042
LABEL_REQUIRED_MODULES = dict_join(
4143
core.REQUIRED_MODULES,
4244
datarestore.REQUIRED_MODULES,
45+
math.REQUIRED_MODULES,
4346
io.REQUIRED_MODULES,
4447
random.REQUIRED_MODULES
4548
)
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
# Runtime labels
2+
3+
from .namespace import NAMESPACE
4+
5+
6+
class MathLabels:
7+
ACS = f"{NAMESPACE}ACOS"
8+
ASN = f"{NAMESPACE}ASIN"
9+
ATN = f"{NAMESPACE}ATAN"
10+
COS = f"{NAMESPACE}COS"
11+
SIN = f"{NAMESPACE}SIN"
12+
TAN = f"{NAMESPACE}TAN"
13+
14+
EXP = f"{NAMESPACE}EXP"
15+
LN = f"{NAMESPACE}LN"
16+
SQR = f"{NAMESPACE}SQRT"
17+
18+
SGNI8 = f"{NAMESPACE}__SGNI8"
19+
SGNU8 = f"{NAMESPACE}__SGNU8"
20+
SGNI16 = f"{NAMESPACE}__SGNI16"
21+
SGNU16 = f"{NAMESPACE}__SGNU16"
22+
SGNI32 = f"{NAMESPACE}__SGNI32"
23+
SGNU32 = f"{NAMESPACE}__SGNU32"
24+
SGNF16 = f"{NAMESPACE}__SGNF16"
25+
SGNF = f"{NAMESPACE}__SGNF"
26+
27+
28+
REQUIRED_MODULES = {
29+
MathLabels.ACS: 'acos.asm',
30+
MathLabels.ASN: 'asin.asm',
31+
MathLabels.ATN: 'atan.asm',
32+
MathLabels.COS: 'cos.asm',
33+
MathLabels.SIN: 'sin.asm',
34+
MathLabels.TAN: 'tan.asm',
35+
36+
MathLabels.EXP: 'exp.asm',
37+
MathLabels.LN: 'logn.asm',
38+
MathLabels.SQR: 'sqrt.asm',
39+
40+
MathLabels.SGNI8: 'sgni8.asm',
41+
MathLabels.SGNU8: 'sgnu8.asm',
42+
MathLabels.SGNI16: 'sgni16.asm',
43+
MathLabels.SGNU16: 'sgnu16.asm',
44+
MathLabels.SGNI32: 'sgni32.asm',
45+
MathLabels.SGNU32: 'sgnu32.asm',
46+
MathLabels.SGNF16: 'sgnf16.asm',
47+
MathLabels.SGNF: 'sgnf.asm'
48+
}

src/arch/zx48k/translator.py

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1276,54 +1276,55 @@ def visit_PEEK(self, node):
12761276
# region MATH Functions
12771277
def visit_SIN(self, node):
12781278
self.ic_fparam(node.operand.type_, node.operand.t)
1279-
self.ic_call('SIN', node.size)
1280-
self.REQUIRES.add('sin.asm')
1279+
self.runtime_call(RuntimeLabel.SIN, node.size)
12811280

12821281
def visit_COS(self, node):
12831282
self.ic_fparam(node.operand.type_, node.operand.t)
1284-
self.ic_call('COS', node.size)
1285-
self.REQUIRES.add('cos.asm')
1283+
self.runtime_call(RuntimeLabel.COS, node.size)
12861284

12871285
def visit_TAN(self, node):
12881286
self.ic_fparam(node.operand.type_, node.operand.t)
1289-
self.ic_call('TAN', node.size)
1290-
self.REQUIRES.add('tan.asm')
1287+
self.runtime_call(RuntimeLabel.TAN, node.size)
12911288

12921289
def visit_ASN(self, node):
12931290
self.ic_fparam(node.operand.type_, node.operand.t)
1294-
self.ic_call('ASIN', node.size)
1295-
self.REQUIRES.add('asin.asm')
1291+
self.runtime_call(RuntimeLabel.ASN, node.size)
12961292

12971293
def visit_ACS(self, node):
12981294
self.ic_fparam(node.operand.type_, node.operand.t)
1299-
self.ic_call('ACOS', node.size)
1300-
self.REQUIRES.add('acos.asm')
1295+
self.runtime_call(RuntimeLabel.ACS, node.size)
13011296

13021297
def visit_ATN(self, node):
13031298
self.ic_fparam(node.operand.type_, node.operand.t)
1304-
self.ic_call('ATAN', node.size)
1305-
self.REQUIRES.add('atan.asm')
1299+
self.runtime_call(RuntimeLabel.ATN, node.size)
13061300

13071301
def visit_EXP(self, node):
13081302
self.ic_fparam(node.operand.type_, node.operand.t)
1309-
self.ic_call('EXP', node.size)
1310-
self.REQUIRES.add('exp.asm')
1303+
self.runtime_call(RuntimeLabel.EXP, node.size)
13111304

13121305
def visit_LN(self, node):
13131306
self.ic_fparam(node.operand.type_, node.operand.t)
1314-
self.ic_call('LN', node.size)
1315-
self.REQUIRES.add('logn.asm')
1307+
self.runtime_call(RuntimeLabel.LN, node.size)
13161308

13171309
def visit_SGN(self, node):
13181310
s = self.TSUFFIX(node.operand.type_)
13191311
self.ic_fparam(node.operand.type_, node.operand.t)
1320-
self.ic_call('__SGN%s' % s.upper(), node.size)
1321-
self.REQUIRES.add('sgn%s.asm' % s)
1312+
1313+
label = {
1314+
'i8': RuntimeLabel.SGNI8,
1315+
'u8': RuntimeLabel.SGNU8,
1316+
'i16': RuntimeLabel.SGNI16,
1317+
'u16': RuntimeLabel.SGNU16,
1318+
'i32': RuntimeLabel.SGNI32,
1319+
'u32': RuntimeLabel.SGNU32,
1320+
'f16': RuntimeLabel.SGNF16,
1321+
'f': RuntimeLabel.SGNF
1322+
}[s]
1323+
self.runtime_call(label, node.size)
13221324

13231325
def visit_SQR(self, node):
13241326
self.ic_fparam(node.operand.type_, node.operand.t)
1325-
self.ic_call('SQRT', node.size)
1326-
self.REQUIRES.add('sqrt.asm')
1327+
self.runtime_call(RuntimeLabel.SQR, node.size)
13271328

13281329
# endregion
13291330

0 commit comments

Comments
 (0)