wc-licht/utils.S

40 lines
658 B
ArmAsm
Raw Permalink Normal View History

2023-11-29 23:44:31 +01:00
#include <avr/io.h>
#define FRAME_SIZE 8
.section .text
;
.global copy_layer
.type copy_layer, @function
copy_layer:
movw X, r24 ; Source frame.
movw Z, r22 ; Target frame.
ldi r24, FRAME_SIZE*2 ; Number of iterations needed.
copy:
ld r0, X+
st Z+, r0
dec r24
brne copy
ret
.global push_layer
.type push_layer, @function
push_layer:
movw X, r24 ; Source frame.
movw Z, r22 ; Target frame.
ldi r24, FRAME_SIZE ; Number of iterations needed.
push:
ldd r0, Z+1
st Z+, r0
ld r0, X+
st Z+, r0
dec r24
brne push
ret