; FILE: gg:src/own/primc/prim.ASM REV: 1 --- check if number is prime ; History ; 1 Wrote 7th Feb 2001 for #amycoders primenumber sizeopt competition. ; Main IFGT 1 move.l #110202021,d0 bsr PrimeNumber move.l #44477921,d0 bsr PrimeNumber move.l #44478053,d0 bsr PrimeNumber move.l #44478061,d0 bsr PrimeNumber ENDC moveq #0,d0 bsr PrimeNumber moveq #10,d0 bsr PrimeNumber moveq #1,d0 bsr PrimeNumber moveq #2,d0 bsr PrimeNumber moveq #3,d0 bsr PrimeNumber moveq #4,d0 bsr PrimeNumber moveq #5,d0 bsr PrimeNumber moveq #6,d0 bsr PrimeNumber moveq #13,d0 bsr PrimeNumber moveq #17,d0 bsr PrimeNumber rts ; Uses the 'sub' method to avoid dividing. This give us 22 bytes ; quite easily. The real trick in this routine is the clever way ; of implementing 'd0 = (d0 == 1) ? 1 : 0;' with only 6 bytes of ; code: I use 'subq.l + moveq + addx.l' trick to achieve this, ; thus total 20 byte code. This routine is faster than the one ; using 'bfclr + bne.b' trick, plus this one also run on *all* ; 68k series CPUs, 68000 to 68060. :-) ; ; - Harry "Piru" Sintonen PrimeNumber move.l d0,d2 ; 2 .outer subq.l #1,d0 ; 2 beq.b .exit ; 2 move.l d2,d1 ; 2 .inner sub.l d0,d1 ; 2 bhi.b .inner ; 2 'while not overflow or not zero' bne.b .outer ; 2 subq.l #2,d0 ; 2 'd0 = (d0 == 1) ? 1 : 0;' moveq #0,d0 ; 2 addx.l d0,d0 ; 2 = 20 .exit rts