Skip to content

Commit 2aff8a1

Browse files
committed
Fix esp32s2 ST instructions with label field
Specifying 0 as the label is different than not specifying a label at all. This commit corrects the behaviour when label 0 is used. Also run the all_opcodes fixture as integration test to ensure the same result as binutils-gdb/esp32ulp-as (which is how this bug was found).
1 parent 7c04c45 commit 2aff8a1

File tree

4 files changed

+16
-16
lines changed

4 files changed

+16
-16
lines changed

esp32_ulp/opcodes_s2.py

+6-6
Original file line numberDiff line numberDiff line change
@@ -491,12 +491,12 @@ def i_st_manual(reg_val, reg_addr, offset, label, upper, wr_way):
491491
return _st.all
492492

493493

494-
def i_stl(reg_val, reg_addr, offset, label="0"):
495-
return i_st_manual(reg_val, reg_addr, offset, label, 0, 3 if label=="0" else 1)
494+
def i_stl(reg_val, reg_addr, offset, label=None):
495+
return i_st_manual(reg_val, reg_addr, offset, label if label else "0", 0, 1 if label else 3)
496496

497497

498-
def i_sth(reg_val, reg_addr, offset, label="0"):
499-
return i_st_manual(reg_val, reg_addr, offset, label, 1, 3 if label=="0" else 1)
498+
def i_sth(reg_val, reg_addr, offset, label=None):
499+
return i_st_manual(reg_val, reg_addr, offset, label if label else "0", 1, 1 if label else 3)
500500

501501

502502
def i_st(reg_val, reg_addr, offset):
@@ -535,8 +535,8 @@ def i_sto(offset):
535535
return _st.all
536536

537537

538-
def i_sti(reg_val, reg_addr, label="0"):
539-
return i_st_auto(reg_val, reg_addr, label, 3 if label=="0" else 1)
538+
def i_sti(reg_val, reg_addr, label=None):
539+
return i_st_auto(reg_val, reg_addr, label if label else "0", 1 if label else 3)
540540

541541

542542
def i_sti32(reg_val, reg_addr, label):

tests/01_compat_tests.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ run_tests_for_cpu() {
1414
local cpu=$1
1515
echo "Testing for CPU: $cpu"
1616

17-
for src_file in $(ls -1 compat/*.S); do
17+
for src_file in $(ls -1 compat/*.S fixtures/*.S); do
1818
src_name="${src_file%.S}"
1919

2020
# files with a cpu encoded into their name are only run for that cpu

tests/fixtures/all_opcodes-v.esp32s2.lst

+6-6
Original file line numberDiff line numberDiff line change
@@ -384,7 +384,7 @@ ULP magic : b'ulp\x00' (0x00706c75)
384384
label = 0
385385
upper = 0
386386
wr_way = 3
387-
00c0 89210068 ST r1, r2, 8
387+
00c0 89200068 ST r1, r2, 8
388388
dreg = 2
389389
offset = 8
390390
opcode = 6
@@ -394,7 +394,7 @@ ULP magic : b'ulp\x00' (0x00706c75)
394394
unused2 = 0
395395
label = 0
396396
upper = 0
397-
wr_way = 3
397+
wr_way = 1
398398
00c4 99200068 STL r1, r2, 8, 1
399399
dreg = 2
400400
offset = 8
@@ -417,7 +417,7 @@ ULP magic : b'ulp\x00' (0x00706c75)
417417
label = 0
418418
upper = 1
419419
wr_way = 3
420-
00cc c9210068 STH r1, r2, 8
420+
00cc c9200068 STH r1, r2, 8
421421
dreg = 2
422422
offset = 8
423423
opcode = 6
@@ -427,7 +427,7 @@ ULP magic : b'ulp\x00' (0x00706c75)
427427
unused2 = 0
428428
label = 0
429429
upper = 1
430-
wr_way = 3
430+
wr_way = 1
431431
00d0 d9200068 STH r1, r2, 8, 1
432432
dreg = 2
433433
offset = 8
@@ -472,7 +472,7 @@ ULP magic : b'ulp\x00' (0x00706c75)
472472
label = 0
473473
upper = 0
474474
wr_way = 3
475-
00e0 89010062 STI r1, r2
475+
00e0 89000062 STI r1, r2
476476
dreg = 2
477477
offset = 0
478478
opcode = 6
@@ -482,7 +482,7 @@ ULP magic : b'ulp\x00' (0x00706c75)
482482
unused2 = 0
483483
label = 0
484484
upper = 0
485-
wr_way = 3
485+
wr_way = 1
486486
00e4 99000062 STI r1, r2, 1
487487
dreg = 2
488488
offset = 0

tests/fixtures/all_opcodes.esp32s2.lst

+3-3
Original file line numberDiff line numberDiff line change
@@ -47,15 +47,15 @@
4747
00b4 092000d0 LD r1, r2, 8
4848
00b8 092000d8 LDH r1, r2, 8
4949
00bc 89210068 ST r1, r2, 8
50-
00c0 89210068 ST r1, r2, 8
50+
00c0 89200068 ST r1, r2, 8
5151
00c4 99200068 STL r1, r2, 8, 1
5252
00c8 c9210068 STH r1, r2, 8
53-
00cc c9210068 STH r1, r2, 8
53+
00cc c9200068 STH r1, r2, 8
5454
00d0 d9200068 STH r1, r2, 8, 1
5555
00d4 09200068 ST32 r1, r2, 8, 0
5656
00d8 19200068 ST32 r1, r2, 8, 1
5757
00dc 89010062 STI r1, r2
58-
00e0 89010062 STI r1, r2
58+
00e0 89000062 STI r1, r2
5959
00e4 99000062 STI r1, r2, 1
6060
00e8 09000062 STI32 r1, r2, 0
6161
00ec 19000062 STI32 r1, r2, 1

0 commit comments

Comments
 (0)