(* ************************************************************ *
 *								*	
 *	      	              X^13 				*
 *								*
 *    Knuth's Exercise 22; (1.3.1 in Fundamental Algorithms)	*
 *								*
 * ************************************************************ *)


		MIXAL

		FWD	loc1
		FWD	loc2

		ORIG	2000
| X		CON	2		\ input is byte at location 2000

		ORIG 	3000 		\ space = 14; time = 54u
| start		LDA	2000
		MUL	2000(1:5)
		STX	loc1(1:1)
		SRC	1
		MUL	loc1
		STA	loc2
		ADD	2000
		MUL	loc2(1:5)
		STX	loc2
		MUL	loc2(1:5)
		SLAX	1		\ output is word in rA = CONTENTS(X)^13
		HLT

| start2	ENT4	12		\ does not start at 3000 ...
		LDA	2000
| 1H		MUL	2000
		SLAX	5
		DEC4	1
		J4P	1B
		HLT


\ Due to R. W. FLoyd. |X| <= 6; so use a table.
\ For this implementation |X| <= 4 (?)

: ^13  	DUP 
	DUP ** ( 1 2) 
	DUP ** ( 1 4) 
	DUP   ( 1 4 4 )
	DUP ** ( 1 4 8) ** **  
	DUP 0< IF ABS signmask OR ENDIF ;

		FWD	table
| start3	LD1	2000
		LDA	table,1
		HLT

		CON	-4 ^13
		CON	-3 ^13
		CON	-2 ^13
		CON	-1 ^13
| table		CON	 0 ^13
		CON	 1 ^13
		CON	 2 ^13	
		CON	 3 ^13
		CON	 4 ^13

		END	start3	

			        (* End of File *)