; File: sqrt.s ; Author: Mikael Kalms ; Date: 1 Oct 1999 ; Title: Integer square root ; ; Description: ; Square root calculation, using the sqrt(4*N) = 2*sqrt(N) identity section code,code ; in d0 x ; out d0 sqrt(x) sqrt32 move.l d3,-(sp) move.l d2,-(sp) move.l d0,d1 move.l #1<<30,d0 moveq #32,d2 .iter move.l d0,d3 rol.l d2,d3 add.w d0,d0 cmp.l d3,d1 blo.s .skip sub.l d3,d1 addq.w #1,d0 .skip subq.l #2,d2 bhi.s .iter andi.l #$ffff,d0 move.l (sp)+,d2 move.l (sp)+,d3 rts ;sqrt32_old2 ; move.l d3,-(sp) ; move.l d2,-(sp) ; move.l d0,d1 ; move.l #1<<30,d0 ; moveq #32,d2 ;.iter ; move.l d0,d3 ; rol.l d2,d3 ; ; sub.l d1,d3 ; bhs.s .skip ; moveq #0,d1 ; sub.l d3,d1 ;.skip ; addx.w d0,d0 ; subq.l #2,d2 ; bhi.s .iter ; andi.l #$ffff,d0 ; move.l (sp)+,d2 ; move.l (sp)+,d3 ; rts ;sqrt32_old ; move.l d3,-(sp) ; move.l d2,-(sp) ; move.l d0,d1 ; moveq #0,d0 ; move.l #$40000000,d2 ;.iter ; move.l d0,d3 ; add.l d2,d3 ; lsr.l #1,d0 ; cmp.l d3,d1 ; blo.s .nbit ; sub.l d3,d1 ; add.l d2,d0 ;.nbit ; lsr.l #2,d2 ; bne.s .iter ; move.l (sp)+,d2 ; move.l (sp)+,d3 ; rts