28 lines
783 B
Plaintext
28 lines
783 B
Plaintext
.program addition
|
|
|
|
; Pop two 32 bit integers from the TX FIFO, add them together, and push the
|
|
; result to the TX FIFO. Autopush/pull should be disabled as we're using
|
|
; explicit push and pull instructions.
|
|
;
|
|
; This program uses the two's complement identity x + y == ~(~x - y)
|
|
|
|
pull
|
|
mov x, ~osr
|
|
pull
|
|
mov y, osr
|
|
jmp test ; this loop is equivalent to the following C code:
|
|
incr: ; while (y--)
|
|
jmp x-- test ; x--;
|
|
test: ; This has the effect of subtracting y from x, eventually.
|
|
jmp y-- incr
|
|
mov isr, ~x
|
|
push
|
|
|
|
% c-sdk {
|
|
static inline void addition_program_init(PIO pio, uint sm, uint offset) {
|
|
pio_sm_config c = addition_program_get_default_config(offset);
|
|
pio_sm_init(pio, sm, offset, &c);
|
|
pio_sm_set_enabled(pio, sm, true);
|
|
}
|
|
%}
|