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