mirror of https://github.com/tinygo-org/tinygo.git
wasmstm32webassemblymicrocontrollerarmavrspiwasiadafruitarduinocircuitplayground-expressgpioi2cllvmmicrobitnrf51nrf52nrf52840samd21tinygo
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
43 lines
1.2 KiB
43 lines
1.2 KiB
#define __tmp_reg__ r16
|
|
#define __zero_reg__ r17
|
|
|
|
; Startup code
|
|
.section .text.__vector_RESET
|
|
.global __vector_RESET
|
|
__vector_RESET:
|
|
clr __zero_reg__ ; this register is expected to be 0 by the C calling convention
|
|
|
|
; Keep the stack pointer at the default location, which is RAMEND.
|
|
|
|
; Initialize .data section.
|
|
.section .text.__do_copy_data,"ax",@progbits
|
|
.global __do_copy_data
|
|
__do_copy_data:
|
|
ldi xl, lo8(__data_start)
|
|
ldi xh, hi8(__data_start)
|
|
ldi yl, lo8(__data_end)
|
|
ldi yh, hi8(__data_end)
|
|
ldi zl, lo8(__data_load_start)
|
|
ldi zh, hi8(__data_load_start)
|
|
1: ; loop
|
|
cp xl, yl ; if x == y
|
|
cpc xh, yh
|
|
breq 2f ; goto end
|
|
ld r16, Z+ ; r0 = *(z++)
|
|
st X+, r16 ; *(x++) = r0
|
|
rjmp 1b ; goto loop
|
|
2: ; end
|
|
|
|
; Initialize .bss section.
|
|
.section .text.__do_clear_bss,"ax",@progbits
|
|
.global __do_clear_bss
|
|
__do_clear_bss:
|
|
ldi xl, lo8(__bss_start)
|
|
ldi xh, hi8(__bss_start)
|
|
ldi yl, lo8(__bss_end)
|
|
1: ; loop
|
|
cp xl, yl ; if x == y
|
|
breq 2f ; goto end
|
|
st X+, __zero_reg__ ; *(x++) = 0
|
|
rjmp 1b ; goto loop
|
|
2: ; end
|
|
|