\ Contents: Square-root for ARM processors
\	u1 -- 32-bit unsigned
\	n  -- significant digits
\	      16 -> sqrt-integer
\	      32 -> fractional integer 16/16bits

code (sqrt	\ ( u1 n -- u2 )
	r0	sp	pop
	r1	0 #	mov
	r2	0 #	mov
	begin	r3	r1	mov
		r0	r0	1 #lsl s mov
		r2	r2	r2 adc
		r0	r0	1 #lsl s mov
		r2	r2	r2 adc
		r1	r1	2 #lsl mov
		r1	1	incr
		r2	r2	r1 s sub	\ get C-flag
		r2	r2	r1 lt add
		r1	r3	1 #lsl mov
		r1	r1	1 # ge orr	\ bit0 = not-C
		top	1	s decr
	eq until
		top	r1	mov c;

: sqrt		( u1 -- u2 )	d# 16 (sqrt ;
