Home » Archimedes archive » Acorn User » AU 1994-08.adf » !StarInfo_StarInfo » Vlietinck/Sqrt

Vlietinck/Sqrt

This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.

Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.

Tape/disk: Home » Archimedes archive » Acorn User » AU 1994-08.adf » !StarInfo_StarInfo
Filename: Vlietinck/Sqrt
Read OK:
File size: 06C7 bytes
Load address: 0000
Exec address: 0000
File contents
   10REM     >Sqrt
   20REM by  Jan Vlietinck
   30REM (c) AU August 1994
   40
   50MODE 0
   60UNROLL=TRUE
   70PROCsqr
   80PRINT '"Calculating 50000 times the square root of a real"
   90IF UNROLL THEN
  100 PRINT "With unrolling main loop"
  110ELSE
  120 PRINT "Without unrolling main loop"
  130ENDIF
  140REPEAT
  150 PRINT '"Please enter x >0 "
  160 PRINT  "================="
  170 INPUT X
  180 |man_x=X
  190 TIME=0
  200 CALL sqr_x
  210 T=TIME/100
  220 PRINT '"Own routine"
  230 PRINT "sqr(x)= ";|man_sqr_x
  240 PRINT "Time= ";T;" seconds"'
  250 PRINT "Basic reference"
  260 PRINT "sqr(x)= ";SQR(X)
  270UNTIL FALSE
  280
  290DEF PROCbasicroot(X)
  300Y=X
  310IF X>1 THEN
  320 FOR A=1 TO 16
  330  IF X*(1-2^-A)^2>1 THEN X=X*(1-2^-A)^2:Y=Y*(1-2^-A)
  340 NEXT
  350 Y=Y*(1+(1-X)/2)
  360ELSE
  370 FOR A=0 TO 15
  380  IF X*(1+2^-A)^2<1 THEN X=X*(1+2^-A)^2:U=Y:Y=Y*(1+2^-A)
  390 NEXT
  400 Y=Y*(1+(1-X)/2)
  410ENDIF
  420PRINT Y
  430ENDPROC
  440
  450DEF PROCsqr
  460X=0:Y=1:T=2:M=3:H=10
  470DIM Q% 40000
  480FOR PASS=0 TO 2 STEP 2
  490P%=Q%
  500[OPT PASS
  510.man_x EQUD 0
  520.exp_x EQUB 0
  530ALIGN
  540.man_sqr_x EQUD 0
  550.exp_sqr_x EQUB 0
  560ALIGN
  570.dat1 EQUD 50000
  580.sqr_x
  590LDR H,dat1
  600.lop1
  610LDR X,man_x
  620LDRB T,exp_x
  630ORR X,X,#1<<31
  640MOVS T,T,LSR #1
  650MOVCS X,X,LSR #1
  660ADC T,T,#64
  670STRB T,exp_sqr_x
  680MOV Y,X
  690]
  700IF UNROLL THEN
  710FOR I=1 TO 16
  720[OPT PASS
  730ADDS   T,X,X,LSR #I
  740ADDLOS T,T,T,LSR #I
  750MOVLO  X,T
  760ADDLO  Y,Y,Y,LSR #I
  770]
  780NEXT I
  790ELSE
  800[OPT PASS
  810MOV M,#0
  820.for
  830ADD M,M,#1
  840ADDS   T,X,X,LSR M
  850ADDLOS T,T,T,LSR M
  860MOVLO  X,T
  870ADDLO  Y,Y,Y,LSR M
  880ADD M,M,#1
  890ADDS   T,X,X,LSR M
  900ADDLOS T,T,T,LSR M
  910MOVLO  X,T
  920ADDLO  Y,Y,Y,LSR M
  930CMP M,#16
  940BNE for
  950]
  960ENDIF
  970[OPT PASS
  980MOV T,#1<<31
  990SUB X,T,X,LSR #1
 1000MOV T,Y,LSR #16
 1010MUL T,X,T
 1020ADD Y,Y,T,LSR #16
 1030ADD Y,Y,#1
 1040BIC Y,Y,#1<<31
 1050STR Y,man_sqr_x
 1060SUBS H,H,#1
 1070BNE lop1
 1080MOV PC,R14
 1090]
 1100NEXT
 1110ENDPROC
 1120
 1130

�     >Sqrt
� by  Jan Vlietinck
� (c) AU August 1994
(
2� 0
<UNROLL=�
F�sqr
P:� '"Calculating 50000 times the square root of a real"
Z� UNROLL �
d! � "With unrolling main loop"
n�
x$ � "Without unrolling main loop"
��
��
� � '"Please enter x >0 "
� �  "================="
� � X
�
 |man_x=X
� �=0
� � sqr_x
� T=�/100
� � '"Own routine"
� � "sqr(x)= ";|man_sqr_x
� � "Time= ";T;" seconds"'
� � "Basic reference"
 � "sqr(x)= ";�(X)
� �

"� �basicroot(X)
,Y=X
6� X>1 �
@ � A=1 � 16
J4  � X*(1-2^-A)^2>1 � X=X*(1-2^-A)^2:Y=Y*(1-2^-A)
T �
^ Y=Y*(1+(1-X)/2)
h�
r � A=0 � 15
|8  � X*(1+2^-A)^2<1 � X=X*(1+2^-A)^2:U=Y:Y=Y*(1+2^-A)
� �
� Y=Y*(1+(1-X)/2)
��
�� Y
��
�
�
� �sqr
�X=0:Y=1:T=2:M=3:H=10
�� Q% 40000
�� PASS=0 � 2 � 2
�	P%=Q%
�
[OPT PASS
�.man_x EQUD 0
.exp_x EQUB 0
	ALIGN
.man_sqr_x EQUD 0
&.exp_sqr_x EQUB 0
0	ALIGN
:.dat1 EQUD 50000
D
.sqr_x
NLDR H,dat1
X	.lop1
bLDR X,man_x
lLDRB T,exp_x
v�R X,X,#1<<31
�MOVS T,T,LSR #1
�MOVCS X,X,LSR #1
�ADC T,T,#64
�STRB T,exp_sqr_x
�MOV Y,X
�]
�� UNROLL �
�� I=1 � 16
�
[OPT PASS
�ADDS   T,X,X,LSR #I
�ADDLOS T,T,T,LSR #I
�MOVLO  X,T
�ADDLO  Y,Y,Y,LSR #I
]
� I
�
 
[OPT PASS
*MOV M,#0
4.for
>ADD M,M,#1
HADDS   T,X,X,LSR M
RADDLOS T,T,T,LSR M
\MOVLO  X,T
fADDLO  Y,Y,Y,LSR M
pADD M,M,#1
zADDS   T,X,X,LSR M
�ADDLOS T,T,T,LSR M
�MOVLO  X,T
�ADDLO  Y,Y,Y,LSR M
�
CMP M,#16
�BNE for
�]
��
�
[OPT PASS
�MOV T,#1<<31
�SUB X,T,X,LSR #1
�MOV T,Y,LSR #16
�
MUL T,X,T
�ADD Y,Y,T,LSR #16
ADD Y,Y,#1
BIC Y,Y,#1<<31
STR Y,man_sqr_x
$SUBS H,H,#1
.BNE lop1
8MOV PC,R14
B]
L�
V�
`
j
�
00000000  0d 00 0a 0f f4 20 20 20  20 20 3e 53 71 72 74 0d  |.....     >Sqrt.|
00000010  00 14 17 f4 20 62 79 20  20 4a 61 6e 20 56 6c 69  |.... by  Jan Vli|
00000020  65 74 69 6e 63 6b 0d 00  1e 18 f4 20 28 63 29 20  |etinck..... (c) |
00000030  41 55 20 41 75 67 75 73  74 20 31 39 39 34 0d 00  |AU August 1994..|
00000040  28 04 0d 00 32 07 eb 20  30 0d 00 3c 0c 55 4e 52  |(...2.. 0..<.UNR|
00000050  4f 4c 4c 3d b9 0d 00 46  08 f2 73 71 72 0d 00 50  |OLL=...F..sqr..P|
00000060  3a f1 20 27 22 43 61 6c  63 75 6c 61 74 69 6e 67  |:. '"Calculating|
00000070  20 35 30 30 30 30 20 74  69 6d 65 73 20 74 68 65  | 50000 times the|
00000080  20 73 71 75 61 72 65 20  72 6f 6f 74 20 6f 66 20  | square root of |
00000090  61 20 72 65 61 6c 22 0d  00 5a 0e e7 20 55 4e 52  |a real"..Z.. UNR|
000000a0  4f 4c 4c 20 8c 0d 00 64  21 20 f1 20 22 57 69 74  |OLL ...d! . "Wit|
000000b0  68 20 75 6e 72 6f 6c 6c  69 6e 67 20 6d 61 69 6e  |h unrolling main|
000000c0  20 6c 6f 6f 70 22 0d 00  6e 05 cc 0d 00 78 24 20  | loop"..n....x$ |
000000d0  f1 20 22 57 69 74 68 6f  75 74 20 75 6e 72 6f 6c  |. "Without unrol|
000000e0  6c 69 6e 67 20 6d 61 69  6e 20 6c 6f 6f 70 22 0d  |ling main loop".|
000000f0  00 82 05 cd 0d 00 8c 05  f5 0d 00 96 1c 20 f1 20  |............. . |
00000100  27 22 50 6c 65 61 73 65  20 65 6e 74 65 72 20 78  |'"Please enter x|
00000110  20 3e 30 20 22 0d 00 a0  1b 20 f1 20 20 22 3d 3d  | >0 ".... .  "==|
00000120  3d 3d 3d 3d 3d 3d 3d 3d  3d 3d 3d 3d 3d 3d 3d 22  |==============="|
00000130  0d 00 aa 08 20 e8 20 58  0d 00 b4 0d 20 7c 6d 61  |.... . X.... |ma|
00000140  6e 5f 78 3d 58 0d 00 be  08 20 d1 3d 30 0d 00 c8  |n_x=X.... .=0...|
00000150  0c 20 d6 20 73 71 72 5f  78 0d 00 d2 0c 20 54 3d  |. . sqr_x.... T=|
00000160  91 2f 31 30 30 0d 00 dc  15 20 f1 20 27 22 4f 77  |./100.... . '"Ow|
00000170  6e 20 72 6f 75 74 69 6e  65 22 0d 00 e6 1c 20 f1  |n routine".... .|
00000180  20 22 73 71 72 28 78 29  3d 20 22 3b 7c 6d 61 6e  | "sqr(x)= ";|man|
00000190  5f 73 71 72 5f 78 0d 00  f0 1d 20 f1 20 22 54 69  |_sqr_x.... . "Ti|
000001a0  6d 65 3d 20 22 3b 54 3b  22 20 73 65 63 6f 6e 64  |me= ";T;" second|
000001b0  73 22 27 0d 00 fa 18 20  f1 20 22 42 61 73 69 63  |s"'.... . "Basic|
000001c0  20 72 65 66 65 72 65 6e  63 65 22 0d 01 04 16 20  | reference".... |
000001d0  f1 20 22 73 71 72 28 78  29 3d 20 22 3b b6 28 58  |. "sqr(x)= ";.(X|
000001e0  29 0d 01 0e 07 fd 20 a3  0d 01 18 04 0d 01 22 13  |)..... .......".|
000001f0  dd 20 f2 62 61 73 69 63  72 6f 6f 74 28 58 29 0d  |. .basicroot(X).|
00000200  01 2c 07 59 3d 58 0d 01  36 0b e7 20 58 3e 31 20  |.,.Y=X..6.. X>1 |
00000210  8c 0d 01 40 0f 20 e3 20  41 3d 31 20 b8 20 31 36  |...@. . A=1 . 16|
00000220  0d 01 4a 34 20 20 e7 20  58 2a 28 31 2d 32 5e 2d  |..J4  . X*(1-2^-|
00000230  41 29 5e 32 3e 31 20 8c  20 58 3d 58 2a 28 31 2d  |A)^2>1 . X=X*(1-|
00000240  32 5e 2d 41 29 5e 32 3a  59 3d 59 2a 28 31 2d 32  |2^-A)^2:Y=Y*(1-2|
00000250  5e 2d 41 29 0d 01 54 06  20 ed 0d 01 5e 14 20 59  |^-A)..T. ...^. Y|
00000260  3d 59 2a 28 31 2b 28 31  2d 58 29 2f 32 29 0d 01  |=Y*(1+(1-X)/2)..|
00000270  68 05 cc 0d 01 72 0f 20  e3 20 41 3d 30 20 b8 20  |h....r. . A=0 . |
00000280  31 35 0d 01 7c 38 20 20  e7 20 58 2a 28 31 2b 32  |15..|8  . X*(1+2|
00000290  5e 2d 41 29 5e 32 3c 31  20 8c 20 58 3d 58 2a 28  |^-A)^2<1 . X=X*(|
000002a0  31 2b 32 5e 2d 41 29 5e  32 3a 55 3d 59 3a 59 3d  |1+2^-A)^2:U=Y:Y=|
000002b0  59 2a 28 31 2b 32 5e 2d  41 29 0d 01 86 06 20 ed  |Y*(1+2^-A).... .|
000002c0  0d 01 90 14 20 59 3d 59  2a 28 31 2b 28 31 2d 58  |.... Y=Y*(1+(1-X|
000002d0  29 2f 32 29 0d 01 9a 05  cd 0d 01 a4 07 f1 20 59  |)/2).......... Y|
000002e0  0d 01 ae 05 e1 0d 01 b8  04 0d 01 c2 0a dd 20 f2  |.............. .|
000002f0  73 71 72 0d 01 cc 18 58  3d 30 3a 59 3d 31 3a 54  |sqr....X=0:Y=1:T|
00000300  3d 32 3a 4d 3d 33 3a 48  3d 31 30 0d 01 d6 0e de  |=2:M=3:H=10.....|
00000310  20 51 25 20 34 30 30 30  30 0d 01 e0 14 e3 20 50  | Q% 40000..... P|
00000320  41 53 53 3d 30 20 b8 20  32 20 88 20 32 0d 01 ea  |ASS=0 . 2 . 2...|
00000330  09 50 25 3d 51 25 0d 01  f4 0d 5b 4f 50 54 20 50  |.P%=Q%....[OPT P|
00000340  41 53 53 0d 01 fe 11 2e  6d 61 6e 5f 78 20 45 51  |ASS.....man_x EQ|
00000350  55 44 20 30 0d 02 08 11  2e 65 78 70 5f 78 20 45  |UD 0.....exp_x E|
00000360  51 55 42 20 30 0d 02 12  09 41 4c 49 47 4e 0d 02  |QUB 0....ALIGN..|
00000370  1c 15 2e 6d 61 6e 5f 73  71 72 5f 78 20 45 51 55  |...man_sqr_x EQU|
00000380  44 20 30 0d 02 26 15 2e  65 78 70 5f 73 71 72 5f  |D 0..&..exp_sqr_|
00000390  78 20 45 51 55 42 20 30  0d 02 30 09 41 4c 49 47  |x EQUB 0..0.ALIG|
000003a0  4e 0d 02 3a 14 2e 64 61  74 31 20 45 51 55 44 20  |N..:..dat1 EQUD |
000003b0  35 30 30 30 30 0d 02 44  0a 2e 73 71 72 5f 78 0d  |50000..D..sqr_x.|
000003c0  02 4e 0e 4c 44 52 20 48  2c 64 61 74 31 0d 02 58  |.N.LDR H,dat1..X|
000003d0  09 2e 6c 6f 70 31 0d 02  62 0f 4c 44 52 20 58 2c  |..lop1..b.LDR X,|
000003e0  6d 61 6e 5f 78 0d 02 6c  10 4c 44 52 42 20 54 2c  |man_x..l.LDRB T,|
000003f0  65 78 70 5f 78 0d 02 76  11 84 52 20 58 2c 58 2c  |exp_x..v..R X,X,|
00000400  23 31 3c 3c 33 31 0d 02  80 13 4d 4f 56 53 20 54  |#1<<31....MOVS T|
00000410  2c 54 2c 4c 53 52 20 23  31 0d 02 8a 14 4d 4f 56  |,T,LSR #1....MOV|
00000420  43 53 20 58 2c 58 2c 4c  53 52 20 23 31 0d 02 94  |CS X,X,LSR #1...|
00000430  0f 41 44 43 20 54 2c 54  2c 23 36 34 0d 02 9e 14  |.ADC T,T,#64....|
00000440  53 54 52 42 20 54 2c 65  78 70 5f 73 71 72 5f 78  |STRB T,exp_sqr_x|
00000450  0d 02 a8 0b 4d 4f 56 20  59 2c 58 0d 02 b2 05 5d  |....MOV Y,X....]|
00000460  0d 02 bc 0e e7 20 55 4e  52 4f 4c 4c 20 8c 0d 02  |..... UNROLL ...|
00000470  c6 0e e3 20 49 3d 31 20  b8 20 31 36 0d 02 d0 0d  |... I=1 . 16....|
00000480  5b 4f 50 54 20 50 41 53  53 0d 02 da 17 41 44 44  |[OPT PASS....ADD|
00000490  53 20 20 20 54 2c 58 2c  58 2c 4c 53 52 20 23 49  |S   T,X,X,LSR #I|
000004a0  0d 02 e4 17 41 44 44 4c  4f 53 20 54 2c 54 2c 54  |....ADDLOS T,T,T|
000004b0  2c 4c 53 52 20 23 49 0d  02 ee 0e 4d 4f 56 4c 4f  |,LSR #I....MOVLO|
000004c0  20 20 58 2c 54 0d 02 f8  17 41 44 44 4c 4f 20 20  |  X,T....ADDLO  |
000004d0  59 2c 59 2c 59 2c 4c 53  52 20 23 49 0d 03 02 05  |Y,Y,Y,LSR #I....|
000004e0  5d 0d 03 0c 07 ed 20 49  0d 03 16 05 cc 0d 03 20  |]..... I....... |
000004f0  0d 5b 4f 50 54 20 50 41  53 53 0d 03 2a 0c 4d 4f  |.[OPT PASS..*.MO|
00000500  56 20 4d 2c 23 30 0d 03  34 08 2e 66 6f 72 0d 03  |V M,#0..4..for..|
00000510  3e 0e 41 44 44 20 4d 2c  4d 2c 23 31 0d 03 48 16  |>.ADD M,M,#1..H.|
00000520  41 44 44 53 20 20 20 54  2c 58 2c 58 2c 4c 53 52  |ADDS   T,X,X,LSR|
00000530  20 4d 0d 03 52 16 41 44  44 4c 4f 53 20 54 2c 54  | M..R.ADDLOS T,T|
00000540  2c 54 2c 4c 53 52 20 4d  0d 03 5c 0e 4d 4f 56 4c  |,T,LSR M..\.MOVL|
00000550  4f 20 20 58 2c 54 0d 03  66 16 41 44 44 4c 4f 20  |O  X,T..f.ADDLO |
00000560  20 59 2c 59 2c 59 2c 4c  53 52 20 4d 0d 03 70 0e  | Y,Y,Y,LSR M..p.|
00000570  41 44 44 20 4d 2c 4d 2c  23 31 0d 03 7a 16 41 44  |ADD M,M,#1..z.AD|
00000580  44 53 20 20 20 54 2c 58  2c 58 2c 4c 53 52 20 4d  |DS   T,X,X,LSR M|
00000590  0d 03 84 16 41 44 44 4c  4f 53 20 54 2c 54 2c 54  |....ADDLOS T,T,T|
000005a0  2c 4c 53 52 20 4d 0d 03  8e 0e 4d 4f 56 4c 4f 20  |,LSR M....MOVLO |
000005b0  20 58 2c 54 0d 03 98 16  41 44 44 4c 4f 20 20 59  | X,T....ADDLO  Y|
000005c0  2c 59 2c 59 2c 4c 53 52  20 4d 0d 03 a2 0d 43 4d  |,Y,Y,LSR M....CM|
000005d0  50 20 4d 2c 23 31 36 0d  03 ac 0b 42 4e 45 20 66  |P M,#16....BNE f|
000005e0  6f 72 0d 03 b6 05 5d 0d  03 c0 05 cd 0d 03 ca 0d  |or....].........|
000005f0  5b 4f 50 54 20 50 41 53  53 0d 03 d4 10 4d 4f 56  |[OPT PASS....MOV|
00000600  20 54 2c 23 31 3c 3c 33  31 0d 03 de 14 53 55 42  | T,#1<<31....SUB|
00000610  20 58 2c 54 2c 58 2c 4c  53 52 20 23 31 0d 03 e8  | X,T,X,LSR #1...|
00000620  13 4d 4f 56 20 54 2c 59  2c 4c 53 52 20 23 31 36  |.MOV T,Y,LSR #16|
00000630  0d 03 f2 0d 4d 55 4c 20  54 2c 58 2c 54 0d 03 fc  |....MUL T,X,T...|
00000640  15 41 44 44 20 59 2c 59  2c 54 2c 4c 53 52 20 23  |.ADD Y,Y,T,LSR #|
00000650  31 36 0d 04 06 0e 41 44  44 20 59 2c 59 2c 23 31  |16....ADD Y,Y,#1|
00000660  0d 04 10 12 42 49 43 20  59 2c 59 2c 23 31 3c 3c  |....BIC Y,Y,#1<<|
00000670  33 31 0d 04 1a 13 53 54  52 20 59 2c 6d 61 6e 5f  |31....STR Y,man_|
00000680  73 71 72 5f 78 0d 04 24  0f 53 55 42 53 20 48 2c  |sqr_x..$.SUBS H,|
00000690  48 2c 23 31 0d 04 2e 0c  42 4e 45 20 6c 6f 70 31  |H,#1....BNE lop1|
000006a0  0d 04 38 0e 4d 4f 56 20  50 43 2c 52 31 34 0d 04  |..8.MOV PC,R14..|
000006b0  42 05 5d 0d 04 4c 05 ed  0d 04 56 05 e1 0d 04 60  |B.]..L....V....`|
000006c0  04 0d 04 6a 04 0d ff                              |...j...|
000006c7