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);
 | 
						|
}
 | 
						|
%}
 |