@@ -50,6 +50,8 @@ def __init__(self, text_program: str, *, build_debuginfo=False) -> None:
50
50
instructions = []
51
51
sideset_count = 0
52
52
sideset_enable = 0
53
+ wrap = None
54
+ wrap_target = None
53
55
for i , line in enumerate (text_program .split ("\n " )):
54
56
line = line .strip ()
55
57
if not line :
@@ -61,13 +63,14 @@ def __init__(self, text_program: str, *, build_debuginfo=False) -> None:
61
63
raise RuntimeError ("Multiple programs not supported" )
62
64
program_name = line .split ()[1 ]
63
65
elif line .startswith (".wrap_target" ):
64
- if len (instructions ) > 0 :
65
- raise RuntimeError ("wrap_target not supported" )
66
+ wrap_target = len (instructions )
66
67
elif line .startswith (".wrap" ):
67
- pass
68
+ if len (instructions ) == 0 :
69
+ raise RuntimeError ("Cannot have .wrap as first instruction" )
70
+ wrap = len (instructions ) - 1
68
71
elif line .startswith (".side_set" ):
69
72
sideset_count = int (line .split ()[1 ])
70
- sideset_enable = 1 if "opt" in line else 0
73
+ sideset_enable = "opt" in line
71
74
elif line .endswith (":" ):
72
75
label = line [:- 1 ]
73
76
if label in labels :
@@ -225,6 +228,11 @@ def __init__(self, text_program: str, *, build_debuginfo=False) -> None:
225
228
"sideset_enable" : sideset_enable ,
226
229
}
227
230
231
+ if wrap is not None :
232
+ self .pio_kwargs ["wrap" ] = wrap
233
+ if wrap_target is not None :
234
+ self .pio_kwargs ["wrap_target" ] = wrap_target
235
+
228
236
self .assembled = array .array ("H" , assembled )
229
237
230
238
if build_debuginfo :
@@ -241,6 +249,12 @@ def print_c_program(self, name, qualifier="const"):
241
249
linemap = self .debuginfo [0 ][:] # Use a copy since we destroy it
242
250
program_lines = self .debuginfo [1 ].split ("\n " )
243
251
252
+ print (
253
+ f"{ qualifier } int { name } _wrap = { self .pio_kwargs .get ('wrap' , len (self .assembled )- 1 )} ;"
254
+ )
255
+ print (
256
+ f"{ qualifier } int { name } _wrap_target = { self .pio_kwargs .get ('wrap_target' , 0 )} ;"
257
+ )
244
258
print (
245
259
f"{ qualifier } int { name } _sideset_pin_count = { self .pio_kwargs ['sideset_pin_count' ]} ;"
246
260
)
0 commit comments