Skip to content

Commit 5c67364

Browse files
committed
Add optimization for same-page branches, refactor AMO instructions, change RAM proc variable layout
1 parent 5a88b32 commit 5c67364

9 files changed

Lines changed: 960 additions & 239 deletions

File tree

python/src/mlogv32/preprocessor/app.py

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
LocalVariables,
2323
LocalVariablesEnv,
2424
)
25-
from .filters import FILTERS
25+
from .filters import FILTERS, ram_var
2626
from .models import BuildConfig
2727
from .parser import (
2828
DirectiveError,
@@ -223,11 +223,28 @@ def _render_template(
223223

224224
# preprocess and check worker
225225

226+
variable_0_to_page_offset = list[str]()
227+
page_0 = ram_var(0)
228+
page_1 = ram_var(0x1000 // 4)
229+
page_2 = ram_var(0x2000 // 4)
230+
page_3 = ram_var(0x3000 // 4)
231+
for i in range(128):
232+
var = chr(i) + page_0[1]
233+
if i < 32 or var < page_1:
234+
value = "0"
235+
elif var < page_2:
236+
value = "1"
237+
elif var < page_3:
238+
value = "2"
239+
else:
240+
value = "3"
241+
variable_0_to_page_offset.append(value)
242+
226243
worker_code, worker_env, worker_output = _render_template(
227244
config.templates.worker,
228245
[LocalVariables],
229246
force=True,
230-
instructions=config.instructions,
247+
VARIABLE_0_TO_PAGE_OFFSET="".join(variable_0_to_page_offset),
231248
)
232249

233250
i = LocalVariablesEnv.of(worker_env).largest_local_variable
@@ -257,6 +274,7 @@ def _render_template(
257274
force=True,
258275
instructions=config.instructions,
259276
labels=worker_labels,
277+
VARIABLE_0_TO_PAGE_OFFSET="".join(variable_0_to_page_offset),
260278
)
261279

262280
# preprocess other code snippets

python/src/mlogv32/preprocessor/filters.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ def wrapper(*args: P.args, **kwargs: P.kwargs):
3939
@make_jinja_exceptions_suck_a_bit_less
4040
@register_filter
4141
def ram_var(index: int):
42-
return VariableFormat.min.get_variable(index)
42+
return VariableFormat.mlogv32.get_variable(index)
4343

4444

4545
@make_jinja_exceptions_suck_a_bit_less

0 commit comments

Comments
 (0)