Skip to content

Commit 953811d

Browse files
Merge pull request #24 from ThomasWaldmann/more-compat-tests
more compat tests
2 parents 57e60e6 + 1180a2f commit 953811d

File tree

8 files changed

+78
-12
lines changed

8 files changed

+78
-12
lines changed

demo.S

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,12 +54,12 @@ textend:
5454
data0: .skip 4, 0x23
5555
data1: .space 4, 0x42
5656
data2: .skip 4
57-
datab: .byte 1, 2, 3, 4
5857
dataw: .word 1, 2, 3, 4
5958
datal: .long 1, 2, 3, 4
59+
datab: .byte 1, 2, 3 # test alignment / fill up of section
6060
dataend:
6161

6262
.bss
6363
bss0: .skip 4
64-
bss1: .skip 2
64+
bss1: .skip 2 # test alignment / fill up of section
6565
bssend:

esp32_ulp/assemble.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,18 @@ def append_section(self, value, expected_section=None):
6565
self.sections[s].append(value)
6666
self.offsets[s] += len(value)
6767

68+
def finalize_sections(self):
69+
# make sure all sections have a bytelength dividable by 4,
70+
# thus having all sections aligned at 32bit-word boundaries.
71+
for s in list(self.sections.keys()) + [BSS, ]:
72+
offs = self.offsets[s]
73+
mod = offs % 4
74+
if mod:
75+
fill = int(0).to_bytes(4 - mod, 'little')
76+
self.offsets[s] += len(fill)
77+
if s is not BSS:
78+
self.sections[s].append(fill)
79+
6880
def dump(self):
6981
print("Symbols:")
7082
for label, section_offset in sorted(self.symbols.items()):
@@ -144,4 +156,5 @@ def assemble(self, lines):
144156
self.append_section(instruction.to_bytes(4, 'little'), TEXT)
145157
continue
146158
raise Exception('Unknown opcode or directive: %s' % opcode)
159+
self.finalize_sections()
147160

esp32_ulp/opcodes.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -142,10 +142,10 @@ def make_ins(layout):
142142

143143

144144
_st = make_ins("""
145-
dreg : 2 # Register which contains data to store
146-
sreg : 2 # Register which contains address in RTC memory (expressed in words)
145+
sreg : 2 # Register which contains data to store
146+
dreg : 2 # Register which contains address in RTC memory (expressed in words)
147147
unused1 : 6 # Unused
148-
offset : 11 # Offset to add to sreg
148+
offset : 11 # Offset to add to dreg
149149
unused2 : 4 # Unused
150150
sub_opcode : 3 # Sub opcode (SUB_OPCODE_ST)
151151
opcode : 4 # Opcode (OPCODE_ST)
@@ -378,9 +378,9 @@ def i_wait(cycles):
378378
return _delay.all
379379

380380

381-
def i_adc(reg_dest, adc_idx, pad_idx):
381+
def i_adc(reg_dest, adc_idx, mux):
382382
_adc.dreg = get_reg(reg_dest)
383-
_adc.mux = get_imm(pad_idx) + 1
383+
_adc.mux = get_imm(mux)
384384
_adc.sar_sel = get_imm(adc_idx)
385385
_adc.unused1 = 0
386386
_adc.cycles = 0
@@ -390,10 +390,10 @@ def i_adc(reg_dest, adc_idx, pad_idx):
390390

391391

392392
def i_st(reg_val, reg_addr, offset):
393-
_st.dreg = get_reg(reg_val)
394-
_st.sreg = get_reg(reg_addr)
393+
_st.dreg = get_reg(reg_addr)
394+
_st.sreg = get_reg(reg_val)
395395
_st.unused1 = 0
396-
_st.offset = get_imm(offset)
396+
_st.offset = get_imm(offset) // 4
397397
_st.unused2 = 0
398398
_st.sub_opcode = SUB_OPCODE_ST
399399
_st.opcode = OPCODE_ST
@@ -410,7 +410,7 @@ def i_ld(reg_dest, reg_addr, offset):
410410
_ld.dreg = get_reg(reg_dest)
411411
_ld.sreg = get_reg(reg_addr)
412412
_ld.unused1 = 0
413-
_ld.offset = get_imm(offset)
413+
_ld.offset = get_imm(offset) // 4
414414
_ld.unused2 = 0
415415
_ld.opcode = OPCODE_LD
416416
return _ld.all
@@ -423,7 +423,7 @@ def i_move(reg_dest, reg_imm_src):
423423
if src.type == REG:
424424
_alu_reg.dreg = dest
425425
_alu_reg.sreg = src.value
426-
_alu_reg.treg = 0
426+
_alu_reg.treg = 1 # XXX undocumented, this is the value binutils-esp32 uses
427427
_alu_reg.unused = 0
428428
_alu_reg.sel = ALU_SEL_MOV
429429
_alu_reg.sub_opcode = SUB_OPCODE_ALU_REG

tests/compat/alu.S

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,16 @@
1818
sub r3, r0, -1
1919
sub r2, r1, 1
2020

21+
lsh r0, r1, r2
22+
lsh r2, r3, 1
23+
24+
rsh r3, r2, r1
25+
rsh r3, r2, 31
26+
27+
move r0, r1
28+
move r0, 42
29+
30+
stage_rst
31+
stage_inc 42
32+
stage_dec 23
2133

tests/compat/io.S

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
.text
2+
3+
reg_rd 0x3ff48000, 7, 0
4+
reg_wr 0x3ff48000, 7, 0, 42
5+
6+
i2c_rd 0x10, 7, 0, 0
7+
i2c_wr 0x23, 0x42, 7, 0, 1
8+
9+
adc r0, 1, 2

tests/compat/memory.S

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
.text
2+
3+
ld r0, r1, 0
4+
ld r2, r3, 4
5+
6+
st r0, r1, 0
7+
st r3, r2, 8
8+

tests/compat/sections.S

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
.text
2+
3+
nop
4+
nop
5+
nop
6+
7+
.data
8+
9+
.space 4
10+
.space 8, 0xFF
11+
12+
.bss
13+
14+
.space 10
15+

tests/compat/sleep.S

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
.text
2+
3+
nop
4+
wait 1000
5+
6+
wake
7+
sleep 1
8+
9+
halt

0 commit comments

Comments
 (0)