*** empty log message ***
This commit is contained in:
		
							parent
							
								
									eebc753306
								
							
						
					
					
						commit
						14a3683f85
					
				
					 19 changed files with 3944 additions and 0 deletions
				
			
		
							
								
								
									
										34
									
								
								mach/mantra/int/Makefile
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								mach/mantra/int/Makefile
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,34 @@ | |||
| P = mloop | ||||
| em2tl:	a.out | ||||
| 	cv a.out em2tl | ||||
| 	rm a.out | ||||
| a.out:	$P02tl.s $P12tl.s $P22tl.s $P32tl.s $P42tl.s $P52tl.s $P62tl.s $P72tl.s $P82tl.s $P92tl.s $Pa2tl.s $Pb2tl.s $Pc2tl.s $Pe2tl.s | ||||
| 	m68k2 -s $P?2tl.s >symem2tl | ||||
| $P02tl.s:	$P0 | ||||
| 	prep $P0 $P02tl.s | ||||
| $P12tl.s:	$P1 | ||||
| 	prep $P1 $P12tl.s | ||||
| $P22tl.s:	$P2 | ||||
| 	prep $P2 $P22tl.s | ||||
| $P32tl.s:	$P3 | ||||
| 	prep $P3 $P32tl.s | ||||
| $P42tl.s:	$P4 | ||||
| 	prep $P4 $P42tl.s | ||||
| $P52tl.s:	$P5 | ||||
| 	prep $P5 $P52tl.s | ||||
| $P62tl.s:	$P6 | ||||
| 	prep $P6 $P62tl.s | ||||
| $P72tl.s:	$P7 | ||||
| 	prep $P7 $P72tl.s | ||||
| $P82tl.s:	$P8 | ||||
| 	prep $P8 $P82tl.s | ||||
| $P92tl.s:	$P9 | ||||
| 	prep $P9 $P92tl.s | ||||
| $Pa2tl.s:	$Pa | ||||
| 	prep $Pa $Pa2tl.s | ||||
| $Pb2tl.s:	$Pb | ||||
| 	prep $Pb $Pb2tl.s | ||||
| $Pc2tl.s:	$Pc | ||||
| 	prep $Pc $Pc2tl.s | ||||
| $Pe2tl.s:	$Pe | ||||
| 	prep $Pe $Pe2tl.s | ||||
							
								
								
									
										77
									
								
								mach/mantra/int/copyright
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										77
									
								
								mach/mantra/int/copyright
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,77 @@ | |||
| ! (c) copyright 1980 by the Vrije Universiteit, Amsterdam, The Netherlands. | ||||
| ! Explicit permission is hereby granted to universities to use or duplicate | ||||
| ! this program for educational or research purposes.  All other use or dup- | ||||
| ! lication  by universities,  and all use or duplication by other organiza- | ||||
| ! tions is expressly prohibited unless written permission has been obtained | ||||
| ! from the Vrije Universiteit. Requests for such permissions may be sent to | ||||
| 
 | ||||
| !      Dr. Andrew S. Tanenbaum | ||||
| !      Wiskundig Seminarium | ||||
| !      Vrije Universiteit | ||||
| !      Postbox 7161 | ||||
| !      1007 MC Amsterdam | ||||
| !      The Netherlands | ||||
| 
 | ||||
| ! Organizations wishing to modify part of this software for subsequent sale | ||||
| ! must  explicitly  apply  for  permission.  The exact arrangements will be | ||||
| ! worked out on a case by case basis, but at a minimum will require the or- | ||||
| ! ganization to include the following notice in all software and documenta- | ||||
| ! tion based on our work: | ||||
| 
 | ||||
| !	    This product is based on the Pascal  system  developed  by | ||||
| !      Andrew  S.  Tanenbaum, Johan W. Stevenson and Hans van Staveren | ||||
| !      of the Vrije Universiteit, Amsterdam, The Netherlands. | ||||
| ! | ||||
| !========================================================================= | ||||
| 
 | ||||
| ! This is an interpreter for EM programs with no virtual memory for the | ||||
| ! the PMDS-II . This interpreter is adapted from an interpreter which was | ||||
| ! made for the pdp11 by Evert Wattel and Hans van Staveren . The present | ||||
| ! version is made by Freek van Schagen | ||||
| !		     Vrije Universiteit | ||||
| !		     Amsterdam. | ||||
| 
 | ||||
| 
 | ||||
| !------------------------------------------------------------------------- | ||||
| 
 | ||||
| ! The program requires preprocessing by the C-preprocessor . There are | ||||
| ! several options : | ||||
| !	lword:  4byte word size in stead of 2 byte word size ; | ||||
| !	test:   checking for undefined variables , nil pointers | ||||
| !		array indices , overflow , etc ; | ||||
| !	last:	generation of a file with the last 16 lines executed ; | ||||
| !	count:	generation of a file with a flow count ; | ||||
| !	flow:	generation of a file with a flow bitmap ; | ||||
| !	prof:	generation of a file with a runtime profile ; | ||||
| !	opfreq:	generation of a file with a frequency count per opcode. | ||||
| 
 | ||||
| !-------------------------------------------------------------------------- | ||||
| 
 | ||||
| ! Memory layout: | ||||
| 
 | ||||
| !  -------------------------------------------------------------------------- | ||||
| !  |		|	|     |		|	|	|	|	|   | | ||||
| !  |	1	|   2	|  3  |	   4	|   5	|   6	|   	|   7	| 8 | | ||||
| !  |		|	|     |		|	|	|	|	|   | | ||||
| !  -------------------------------------------------------------------------- | ||||
| 
 | ||||
| !	1:	Interpreter text+data+bss. | ||||
| !	2:	EM text. | ||||
| !	3:	EM procedure descriptors. | ||||
| !	4:	EM global data area. | ||||
| !	5:	tables for flow , count , profile. | ||||
| !	6:	EM heap area. | ||||
| !	7:	EM local data and stack. | ||||
| !	8:	Arguments to the interpreter . | ||||
| 
 | ||||
| 
 | ||||
| !REGISTER USE | ||||
| !	pc	programcounter | ||||
| !	a7=sp	stackpointer		d7	if lword: 1 , if not lword: 0 | ||||
| !	a6	external base= eb	d6	0 | ||||
| !	a5	scratch			d5	scratch | ||||
| !	a4	address of loop		d4	scratch | ||||
| !	a3	EM programcounter	d3	scratch | ||||
| !	a2	local base =lb		d2	scratch | ||||
| !	a1	address of return area	d1	scratch | ||||
| !	a0	scratch			d0	opcode byte and scratch | ||||
							
								
								
									
										78
									
								
								mach/mantra/int/deffile
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										78
									
								
								mach/mantra/int/deffile
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,78 @@ | |||
| #ifdef lword | ||||
| #define word 4 | ||||
| #define	wrd	#4 | ||||
| #define wmu #2 | ||||
| #define und	#-0x80000000 | ||||
| #define ad	add.l | ||||
| #define	an	and.l | ||||
| #define	asle	asl.l | ||||
| #define	asri	asr.l | ||||
| #define cl clr.l | ||||
| #define	comp	cmp.l | ||||
| #define	exor	eor.l | ||||
| #define extend	! | ||||
| #define	inor	or.l | ||||
| #define	lsle	lsl.l | ||||
| #define	lsri	lsr.l | ||||
| #define nega	neg.l | ||||
| #define mov move.l | ||||
| #define	nt	not.l | ||||
| #define	rotl	rol.l | ||||
| #define	rotr	ror.l | ||||
| #define	subt	sub.l | ||||
| #define testen tst.l | ||||
| #define l0 16 | ||||
| #define l1 20 | ||||
| #define l2 24 | ||||
| #define l3 28 | ||||
| #define l_1 -4 | ||||
| #define l_2 -8 | ||||
| #define l_3 -12 | ||||
| #define l_4 -16 | ||||
| #define l_5 -20 | ||||
| #define l_6 -24 | ||||
| #define l_7 -28 | ||||
| #define l_8 -32 | ||||
| #define checksize cmp.l #4,d0 ; beq 4f ; cmp.l #8,d0 ; bne 9f ; bsr no8bar ; \ | ||||
| 9: bra e_oddz | ||||
| #else | ||||
| #define word 2 | ||||
| #define	wrd	#2 | ||||
| #define wmu #1 | ||||
| #define und	#-0x8000 | ||||
| #define ad	add.w | ||||
| #define	an	and.w | ||||
| #define	asle	asl.w | ||||
| #define	asri	asr.w | ||||
| #define cl clr.w | ||||
| #define	comp	cmp.w | ||||
| #define	exor	eor.w | ||||
| #define extend	ext.l | ||||
| #define	inor	or.w | ||||
| #define	lsle	lsl.w | ||||
| #define	lsri	lsr.w | ||||
| #define nega	neg.w | ||||
| #define mov move.w | ||||
| #define	nt	not.w | ||||
| #define	rotl	rol.w | ||||
| #define	rotr	ror.w | ||||
| #define	subt	sub.w | ||||
| #define testen tst.w | ||||
| #define l0 16 | ||||
| #define l1 18 | ||||
| #define l2 20 | ||||
| #define l3 22 | ||||
| #define l_1 -2 | ||||
| #define l_2 -4 | ||||
| #define l_3 -6 | ||||
| #define l_4 -8 | ||||
| #define l_5 -10 | ||||
| #define l_6 -12 | ||||
| #define l_7 -14 | ||||
| #define l_8 -16 | ||||
| #define checksize cmp.w #2,d0 ; beq 2f ; cmp.w #4,d0 ; beq 4f ; bra e_oddz | ||||
| #endif | ||||
| #define  adroff move.b	(a3)+,(a1) ;	move.b	(a3)+,1(a1) | ||||
| #define	claimstack	tst.b	-1024(sp) | ||||
| 
 | ||||
| 
 | ||||
							
								
								
									
										8
									
								
								mach/mantra/int/header
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								mach/mantra/int/header
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,8 @@ | |||
| !definitions | ||||
| !#define		lword | ||||
| !#define	FLTRAP | ||||
| #define		opfreq	0 | ||||
| #define		last	1 | ||||
| #define		test	1 | ||||
| #define		count	0 | ||||
| #define		flow	0 | ||||
							
								
								
									
										503
									
								
								mach/mantra/int/mloop0
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										503
									
								
								mach/mantra/int/mloop0
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,503 @@ | |||
| !--------------------------------------------------------------------------- | ||||
| !		START OF THE PROGRAM | ||||
| !--------------------------------------------------------------------------- | ||||
| 
 | ||||
| 		lea	retarea,a1		!a1 POINTS AT RETURN AREA | ||||
| 		move.l	nd,-(sp)		!nd contains endbss | ||||
| 		bsr	_break | ||||
| 		add.l	wrd,sp | ||||
| #if	last | ||||
| 		move.l	#30,d0			!initialise lasttable | ||||
| 		lea	lasttable,a5 | ||||
| 0:		clr.l	(a5)+ | ||||
| 		dbra	d0,0b | ||||
| 		move.l	#-1,(a5) | ||||
| 		move.l	#linused-8,linused | ||||
| #endif | ||||
| 		move.l	4(sp),a2 | ||||
| 		move.l	(a2),filb	!interpreter name in filb | ||||
| 		sub.l	#1,(sp) | ||||
| 		bgt	0f | ||||
| 	.data | ||||
| emfile:	.asciz	"e.out" | ||||
| 	.align 2 | ||||
| 	.text | ||||
| 		move.l	4(sp),a0	!4(sp) is argv | ||||
| 		move.l	#emfile,(a0)	!pointer to e.out in argp1 | ||||
| 		add.l	#1,(sp)		!only 1 argument in this case | ||||
| 		bra	1f | ||||
| 0:		add.l	#4,4(sp)	!skip name of interpreter | ||||
| 1:		add.l	#4-word,sp | ||||
| 		move.l	sp,ml | ||||
| 		move.l	word(sp),a2 | ||||
| 		cl	-(sp) | ||||
| 		move.l	(a2),-(sp) | ||||
| 		lea	eb,a6 | ||||
| 		bsr	_open | ||||
| 		testen	(sp)+ | ||||
| 		bne	nofile | ||||
| 		mov	(sp)+,savefd | ||||
| 		move.l	(a2),filb	!load file name in filb | ||||
| 					!information about file for error mess. | ||||
| 		move.l	#16,-(sp) ;	pea	header | ||||
| 		mov	savefd,-(sp)			!skip first header | ||||
| 		bsr	_read	;	testen	(sp)+ | ||||
| 		bne	badarg1 | ||||
| 		move.l	#32,(sp) | ||||
| 		pea	header | ||||
| 		mov	savefd,-(sp) | ||||
| 		bsr	_read	 | ||||
| 		testen	(sp)+ | ||||
| 		bne	badarg1 | ||||
| 		cmp.l	#32,(sp)+ | ||||
| 		bne	badarg1 | ||||
| 		lea	header,a0 | ||||
| 		move.l	#5,d0			!convert em integer to integer | ||||
| 0:		add.l	#4,a1 | ||||
| 		move.b	(a0)+,-(a1) ;	move.b	(a0)+,-(a1) | ||||
| 		move.b	(a0)+,-(a1) ;	move.b	(a0)+,-(a1) | ||||
| 		move.l	(a1),-4(a0) ;	dbra	d0,0b | ||||
| 		move.l	nd,a0	;	move.l	a0,pb	!Bottom emtext | ||||
| 		add.l	ntext,a0 ;	move.l	a0,pd	!proc. descr. base | ||||
| 		move.l	nproc,d1 ;	asl.l	#3,d1	!2 pointers | ||||
| #if	count + prof + flow | ||||
| 		mulu	#3,d1				!or 6 pointers | ||||
| #endif | ||||
| 		add.l	d1,a0	;	move.l	a0,eb	!external base | ||||
| 		add.l	szdata,a0 ;	move.l	a0,tblmax | ||||
| 		move.l	a0,globmax ;	move.l	a0,hp | ||||
| 		add.l	#2000,a0 ;	move.l	a0,-(sp) | ||||
| 		bsr	_break				!ask for core | ||||
| 		testen	(sp)+	;	bne	toolarge | ||||
| 		move.l	eb,a6	;	move.l	filb,4(a6) | ||||
| 		move.l	ntext,-(sp)  | ||||
| 		move.l	pb,-(sp) | ||||
| 		mov	savefd,-(sp) | ||||
| 		bsr	_read | ||||
| 		testen	(sp)+	;	bne	badarg | ||||
| 		add.l	#4,sp | ||||
| #if	float | ||||
| ! PM | ||||
| #endif | ||||
| 
 | ||||
| lblbuf:		sub.l	#2048,sp | ||||
| 		claimstack | ||||
| 		move.l	sp,a4				!transport  ptr a4 | ||||
| 		move.l	sp,a5 | ||||
| 		move.l	#2048,-(sp) ;	move.l	a4,-(sp) | ||||
| 		mov	savefd,-(sp) ;	bsr	_read | ||||
| 		testen	(sp)+	;	bne	badarg | ||||
| 		move.l	(sp)+,d0 | ||||
| 		cmp.l	#2048,d0 ;	bcs	0f | ||||
| 		add.l	#1024,a5 ;	bra	1f	!a5 =buffer middle | ||||
| 0:		add.l	d0,a5				!a5 = buffer end | ||||
| 1:		move.l	eb,a3		!At a3 filling has to start | ||||
| 		clr.l	d1	;	clr.l	d2 | ||||
| 		move.l	#datswi,a6 | ||||
| 
 | ||||
| datloop:	cmp.l	a4,a5	;	bhi	9f	!Go on filling data | ||||
| 		bsr	blshift		!shift block down , read next block | ||||
| 9:		sub.l	#1,ndata ;	blt	finito | ||||
| 		move.b	(a4)+,d1 ;	beq	dat0	!type byte in d1 | ||||
| 		move.l	a3,a2	;	move.b	(a4)+,d2  !count byte in d2 | ||||
| 		asl.l	#2,d1	;	move.l	-4(a6,d1),a0 | ||||
| 		jmp	(a0) | ||||
| 
 | ||||
| 	.data | ||||
| datswi:	.long	dat1;	.long	dat2;	.long	dat3;	.long	dat4 | ||||
| 	.long	dat5;	.long	dat6;	.long	dat6;	.long	dofloat | ||||
| 	.text | ||||
| 
 | ||||
| dat0:		add.l	#4,a1 | ||||
| 		move.b	(a4)+,-(a1) ;	move.b	(a4)+,-(a1) | ||||
| 		move.b	(a4)+,-(a1) ;	move.b	(a4)+,-(a1) | ||||
| 		move.l	(a1),d0 ;	move.l	a3,d4	!d0 =count | ||||
| 		sub.l	a2,d4	!reconstruct byte count of previous describtor | ||||
| 		sub.l	#1,d0	;	sub.l	#1,d4 | ||||
| 1:		move.l	d4,d3 | ||||
| 2:		move.b	(a2)+,(a3)+ ;	dbra	d3,2b | ||||
| 		dbra	d0,1b	;	bra 	datloop | ||||
| 
 | ||||
| dat1:		mov	und,(a3)+ ;	sub.b	#1,d2 | ||||
| 		bne	dat1	;	bra	datloop | ||||
| 
 | ||||
| dat2:		move.b	(a4)+,(a3)+ ;	sub.b	#1,d2 | ||||
| 		bne	dat2	;	bra	datloop | ||||
| 
 | ||||
| dat3:		move.w	wrd,d1	;	add.l	d1,a3		!wrd = 2 or 4 | ||||
| 3:		move.b	(a4)+,-(a3) ;	sub.b	#1,d1	;	bgt 3b | ||||
| 		add.l	wrd,a3	;	sub.b	#1,d2 | ||||
| 		bne	dat3	;	bra	datloop | ||||
| 
 | ||||
| dat4:		move.l	eb,d4	;	bra	4f | ||||
| dat5:		move.l	pb,d4 | ||||
| 4:		add.l	#4,a3 | ||||
| 		move.b	(a4)+,-(a3) ;	move.b	(a4)+,-(a3) | ||||
| 		move.b	(a4)+,-(a3) ;	move.b	(a4)+,-(a3) | ||||
| 		add.l	d4,(a3)+ ;	sub.b	#1,d2 | ||||
| 		bne	4b	;	bra	datloop | ||||
| 
 | ||||
| dat6:		add.l	d2,a3	;	move.l	d2,d3 | ||||
| 6:		move.b	(a4)+,-(a3) ;	sub.b	#1,d2 | ||||
| 		bne	6b	;	add.l	d3,a3 | ||||
| 		bra	datloop | ||||
| 
 | ||||
| dofloat:	add.l	d2,a3	 | ||||
| 		bsr	atof	;	bra	datloop | ||||
| 
 | ||||
| !DUMMY ASCII TO FLOAT ROUTINE | ||||
| atof:		tst.b	(a4)+	;	bne	atof	 | ||||
| 		rts | ||||
| 
 | ||||
| blshift:	move.l	a5,a0	;	move.l	#1024,d0 | ||||
| 		sub.l	d0,a0	;	move.l	d0,-(sp) | ||||
| 		sub.l	d0,a4			!update pointer | ||||
| 		asr.l	#2,d0 | ||||
| 0:		move.l	(a5)+,(a0)+ ;	sub.w	#1,d0 | ||||
| 		bgt	0b	;	move.l	a0,a5 | ||||
| 		move.l	a5,-(sp) ;	mov	savefd,-(sp) | ||||
| 		bsr	_read | ||||
| 		testen	(sp)+	;	bne	badarg | ||||
| 		move.l	(sp)+,d0 | ||||
| 		cmp.l	#1024,d0 ;	beq	1f | ||||
| 		add.l	d0,a5 | ||||
| 1:		rts | ||||
| 
 | ||||
| finito:		cmp.l	hp,a3	;	bne	badarg	!load file error | ||||
| 		move.l	eb,a6				!eb IN a6 NOW | ||||
| 		lea	4(a6),a0			!filb CONTAINS eb+4 | ||||
| 		move.l	a0,filb | ||||
| 
 | ||||
| !WE START TO READ THE PROCEDURE DESCRIPTORS | ||||
| 
 | ||||
| 		move.l	nproc,d1 ;	move.l	pd,a3 | ||||
| 		asl.l	#3,d1			!proc. descr. is 8 bytes | ||||
| 4:		move.l	a5,d2	;	sub.l	a4,d2	!What is available? | ||||
| 		add.l	#7,d2	;	and.w	#-0x8,d2  !multiple of 8! | ||||
| 		sub.l	d2,d1				!subtract what can  | ||||
| 		asr.l	#3,d2				!be read. divide by 8 | ||||
| 		sub.l	#1,d2 | ||||
| 2:		add.l	#4,a3 | ||||
| 		move.b	(a4)+,-(a3) ;	move.b	(a4)+,-(a3) | ||||
| 		move.b	(a4)+,-(a3) ;	move.b	(a4)+,-(a3) | ||||
| 		add.l	#8,a3 | ||||
| 		move.b	(a4)+,-(a3) ;	move.b	(a4)+,-(a3) | ||||
| 		move.b	(a4)+,-(a3) ;	move.b	(a4)+,-(a3) | ||||
| 		move.l	pb,d0 ;	add.l	d0,(a3)+  !em address to machine address | ||||
| 
 | ||||
| #if	count+prof+flow | ||||
| 		clr.l	(a3)+ | ||||
| 		clr.l	(a3)+ | ||||
| 		clr.l	(a3)+ | ||||
| 		clr.l	(a3)+ | ||||
| #endif | ||||
| 		dbra	d2,2b	;	tst.l	d1 | ||||
| 		ble	3f	;	bsr	blshift		!more or ready | ||||
| 		bra	4b | ||||
| 3:		cmp.l	eb,a3	;	bne	badarg | ||||
| 		move.l	savefd,-(sp) ;	bsr	_close | ||||
| 		move.l	ml,sp				!refresh stack | ||||
| 
 | ||||
| #if	count+prof+flow | ||||
| !						|=======================| | ||||
| ! Here we fill the fields in the procedure	|   current file name	| | ||||
| ! descriptor with table information. The	|-----------------------| | ||||
| ! procedure descriptor has six fields,		|   link to next proc	| | ||||
| ! like described in this picture. We		|-----------------------| | ||||
| ! construct a linked list of the procedure	|   first line number	| | ||||
| ! descriptors, such that the defined		|-----------------------| | ||||
| ! order of procedures is compatible		|    count pointer	| | ||||
| ! with the text order. Thereafter we		|-----------------------| | ||||
| ! scan the text for line information to		|    start address	| | ||||
| ! fill the count pointer and startline		|-----------------------| | ||||
| ! field. The link to the first procedure	|  bytes for locals	| | ||||
| ! is in firstp , links are descriptor		|=======================| | ||||
| ! start addresses. The last procedure | ||||
| ! links to the external base. All lines in the text get a count | ||||
| ! number, lines of a procedure get consecutive count numbers, | ||||
| ! the procedure count pointer gives the number of the first line. | ||||
| ! Count pointer zero is reserved for the case that no line number | ||||
| ! is yet defined. | ||||
| 
 | ||||
| ! Register use: a6 is external base ("eb"), a1 points at return area, other | ||||
| ! registers are free | ||||
| 
 | ||||
| makelink:	move.l	pd,a0 | ||||
| 		move.l	#0,a2 | ||||
| 		move.l	a0,a3		!a3 will point at the first proc. | ||||
| 		move.l	a0,a4		!a4 will point at proc descr base | ||||
| 0:		move.l	a0,a5		!keep former descr pointer in a5 | ||||
| 		add.l	#24,a0		!a0 points at next one | ||||
| 		cmp.l	a0,a6		!top of descriptor space | ||||
| 		bls	4f		!yes? ready! | ||||
| 1:		move.l	4(a0),d0	!start address of current proc in d0 | ||||
| 		cmp.l	4(a5),d0	!compair start address with previous | ||||
| 		bcc	2f		!d0 large? follow link! | ||||
| 		sub.l	#24,a5		!d0 small? compair with previous | ||||
| 		cmp.l	a5,a4		!is a5 smaller than pd | ||||
| 		bls	1b		!no? try again | ||||
| 		move.l	a3,16(a0)	!yes? then smallest text add up to now | ||||
| 		move.l	a0,a3		!remind a3 is to point at first proc | ||||
| 		bra	0b		!next descriptor | ||||
| 2:		move.l	16(a5),d1	!follow the link to find place | ||||
| 		beq	3f		!if 0 then no link defined | ||||
| 		move.l	d1,a2 | ||||
| 		cmp.l	4(a2),d0	!compair start address | ||||
| 		bcs	3f		!start addr between those of a5 and a2 | ||||
| 		move.l	a2,a5		!d0 above start address of a5 | ||||
| 		bra	2b		!go on looking | ||||
| 3:		move.l	a0,16(a5)	!a0 follows a5 | ||||
| 		move.l	d1,16(a0)	!a2 follows a0 | ||||
| 		bra	0b | ||||
| 4:		move.l	a3,firstp	!firstp links to first procedure | ||||
| 
 | ||||
| ! Register use: a3 points at first procedure , d0 opcode byte , a5 base of | ||||
| ! table , d1 keeps min line nr , d2 keeps max line nr , d3 current line nr , | ||||
| ! maxcount in d4 | ||||
| 
 | ||||
| procinf:	move.l	#1,maxcount	!count pointer for first procedure | ||||
| 		move.l	#1,d4 | ||||
| 		move.l	#0,d3 | ||||
| 		move.l	#0,d0 | ||||
| 0:		move.l	a3,-(sp)	!stack current procedure | ||||
| 		move.l	#-1,d1		!minimal line number on 0xFFFFFFFF | ||||
| 		move.l	#0,d2		!maximal line number on 0 | ||||
| 		tst.l	16(a3)		!bottom address next procedure | ||||
| 		beq	6f		!if 0 last procedure | ||||
| 		move.l	16(a3),a4 | ||||
| 		move.l	4(a4),a4	!a4 points at top of current proc | ||||
| 		bra	2f | ||||
| 6:		move.l	pd,a4 | ||||
| 2:		move.l	4(a3),a3	!start address of current procedure | ||||
| 8:		move.b	(a3)+,d0	!start scanning | ||||
| 		cmp.b	#-2,d0	 | ||||
| 		beq	1f		!case escape1 | ||||
| 		cmp.b	#-1,d0	 | ||||
| 		beq	6f		!case escape2 | ||||
| 		cmp.b	#-106,d0 | ||||
| 		bhi	7f		!ordinary skip at 7 | ||||
| 		beq	2f		!case lni at 2 | ||||
| 		cmp.b	#-108,d0		!lin_l ? | ||||
| 		bcs	7f		!ordinary skip at 7 | ||||
| 		beq	3f		!lin_l at 3 | ||||
| 		move.l	#0,d3 | ||||
| 		move.b	(a3)+,d3	!lin_s0 here | ||||
| 		bra	4f		!compare at 4 | ||||
| 2:		add.l	#1,d3 | ||||
| 		bra	4f | ||||
| 3:		adroff | ||||
| 		move.l	#0,d3 | ||||
| 		move.w	(a1),d3 | ||||
| 		bra	4f | ||||
| 6:		move.b	(a3)+,d0 | ||||
| 		cmp.b	#35,d0		!lin_q ? | ||||
| 		bne	6f		!skip for escape2 at 6f | ||||
| 		move.b	(a3)+,(a1)+ | ||||
| 		move.b	(a3)+,(a1)+ | ||||
| 		move.b	(a3)+,(a1)+ | ||||
| 		move.b	(a3)+,(a1) | ||||
| 		sub.l	#3,a1 | ||||
| 		move.l	(a1),d3 | ||||
| 4:		cmp.l	d1,d3		!d3 less than minimum ? | ||||
| 		bcc	5f | ||||
| 		move.l	d3,d1 | ||||
| 5:		cmp.l	d3,d2		!d3 more than maximum ? | ||||
| 		bcc	9f | ||||
| 		move.l	d3,d2 | ||||
| 		bra	9f | ||||
| 6:		add.l	#4,a3 | ||||
| 		bra	9f | ||||
| 1:		move.b	(a3)+,d0 | ||||
| 		move.l	d0,a2		!escape1 opcodes treated here | ||||
| 		add.l	#256,a2		!second	table | ||||
| 		bra	1f | ||||
| 7:		move.l	d0,a2 | ||||
| 1:		move.b	skipdisp(a2),d0	!look for argument size | ||||
| 		add.l	d0,a3 | ||||
| 9:		cmp.l	a3,a4		!still more text | ||||
| 		bhi 	8b | ||||
| 		move.l	(sp)+,a3	!bottom back | ||||
| 		sub.l	d1,d2		!compute number of lines | ||||
| 		bcs	9f		!no line so no information | ||||
| 		move.l	d4,8(a3) | ||||
| 		move.l	d1,12(a3) | ||||
| 		add.l	#1,d2 | ||||
| 		add.l	d2,d4		!this is the new maxcount | ||||
| 		move.l	d4,maxcount | ||||
| 9:		tst.l	16(a3)		!follow link to next procedure | ||||
| 		beq	1f | ||||
| 		move.l	16(a3),a3 | ||||
| 		bra	0b | ||||
| 1: | ||||
| countlabel: | ||||
| 
 | ||||
| 	.data | ||||
| skipdisp: | ||||
| .byte 0; .byte 0; .byte 0; .byte 0; .byte 0; .byte 0; .byte 0; .byte 0; | ||||
| .byte 0; .byte 0; .byte 0; .byte 0; .byte 0; .byte 0; .byte 0; .byte 0; | ||||
| .byte 0; .byte 0; .byte 0; .byte 0; .byte 0; .byte 0; .byte 0; .byte 0; | ||||
| .byte 0; .byte 0; .byte 0; .byte 0; .byte 0; .byte 0; .byte 0; .byte 0; | ||||
| .byte 0; .byte 0; .byte 0; .byte 1; .byte 0; .byte 0; .byte 2; .byte 0; | ||||
| .byte 0; .byte 1; .byte 1; .byte 0; .byte 0; .byte 0; .byte 0; .byte 0; | ||||
| .byte 0; .byte 0; .byte 1; .byte 2; .byte 1; .byte 1; .byte 1; .byte 1; | ||||
| .byte 1; .byte 1; .byte 1; .byte 2; .byte 1; .byte 1; .byte 1; .byte 1; | ||||
| 
 | ||||
| .byte 0; .byte 0; .byte 0; .byte 0; .byte 0; .byte 0; .byte 0; .byte 0; | ||||
| .byte 0; .byte 0; .byte 0; .byte 0; .byte 0; .byte 0; .byte 0; .byte 0; | ||||
| .byte 0; .byte 0; .byte 0; .byte 0; .byte 0; .byte 0; .byte 0; .byte 0; | ||||
| .byte 0; .byte 0; .byte 0; .byte 0; .byte 1; .byte 0; .byte 0; .byte 0; | ||||
| .byte 1; .byte 0; .byte 0; .byte 0; .byte 1; .byte 0; .byte 0; .byte 0; | ||||
| .byte 1; .byte 1; .byte 0; .byte 1; .byte 0; .byte 2; .byte 0; .byte 2; | ||||
| .byte 1; .byte 0; .byte 0; .byte 0; .byte 1; .byte 1; .byte 0; .byte 1; | ||||
| .byte 2; .byte 1; .byte 1; .byte 1; .byte 1; .byte 1; .byte 1; .byte 1; | ||||
| 
 | ||||
| .byte 2; .byte 2; .byte 0; .byte 0; .byte 1; .byte 1; .byte 1; .byte 0; | ||||
| .byte 0; .byte 2; .byte 1; .byte 0; .byte 1; .byte 0; .byte 0; .byte 1; | ||||
| .byte 1; .byte 1; .byte 0; .byte 0; .byte 2; .byte 1; .byte 0; .byte 2; | ||||
| .byte 0; .byte 1; .byte 1; .byte 2; .byte 1; .byte 1; .byte 1; .byte 1; | ||||
| .byte 1; .byte 2; .byte 0; .byte 0; .byte 0; .byte 0; .byte 1; .byte 2; | ||||
| .byte 0; .byte 0; .byte 0; .byte 0; .byte 0; .byte 1; .byte 2; .byte 2; | ||||
| .byte 0; .byte 0; .byte 0; .byte 0; .byte 0; .byte 0; .byte 0; .byte 0; | ||||
| .byte 0; .byte 0; .byte 0; .byte 0; .byte 1; .byte 1; .byte 0; .byte 0; | ||||
| 
 | ||||
| .byte 0; .byte 1; .byte 0; .byte 0; .byte 0; .byte 0; .byte 0; .byte 1; | ||||
| .byte 0; .byte 0; .byte 1; .byte 0; .byte 0; .byte 1; .byte 1; .byte 1; | ||||
| .byte 1; .byte 0; .byte 2; .byte 1; .byte 1; .byte 1; .byte 2; .byte 0; | ||||
| .byte 0; .byte 1; .byte 0; .byte 0; .byte 0; .byte 0; .byte 0; .byte 1; | ||||
| .byte 2; .byte 2; .byte 0; .byte 0; .byte 0; .byte 0; .byte 0; .byte 0; | ||||
| .byte 0; .byte 1; .byte 0; .byte 0; .byte 0; .byte 0; .byte 2; .byte 1; | ||||
| .byte 1; .byte 1; .byte 1; .byte 1; .byte 1; .byte 1; .byte 1; .byte 1; | ||||
| .byte 2; .byte 1; .byte 0; .byte 0; .byte 1; .byte 2; .byte 7; .byte 5; | ||||
| 
 | ||||
| !escaped opcodes | ||||
| 
 | ||||
| .byte 2; .byte 0; .byte 2; .byte 0; .byte 2; .byte 0; .byte 2; .byte 0; | ||||
| .byte 2; .byte 0; .byte 2; .byte 0; .byte 2; .byte 2; .byte 0; .byte 2; | ||||
| .byte 2; .byte 2; .byte 2; .byte 2; .byte 0; .byte 2; .byte 2; .byte 0; | ||||
| .byte 2; .byte 0; .byte 0; .byte 0; .byte 2; .byte 0; .byte 2; .byte 0; | ||||
| .byte 2; .byte 0; .byte 2; .byte 0; .byte 2; .byte 0; .byte 2; .byte 0; | ||||
| .byte 2; .byte 0; .byte 0; .byte 0; .byte 0; .byte 2; .byte 2; .byte 2; | ||||
| .byte 2; .byte 2; .byte 0; .byte 2; .byte 0; .byte 2; .byte 0; .byte 2; | ||||
| .byte 0; .byte 2; .byte 0; .byte 2; .byte 0; .byte 2; .byte 2; .byte 2; | ||||
| 
 | ||||
| .byte 0; .byte 2; .byte 0; .byte 2; .byte 0; .byte 2; .byte 2; .byte 2; | ||||
| .byte 2; .byte 2; .byte 2; .byte 2; .byte 0; .byte 2; .byte 0; .byte 1; | ||||
| .byte 2; .byte 2; .byte 2; .byte 2; .byte 0; .byte 2; .byte 0; .byte 2; | ||||
| .byte 0; .byte 0; .byte 2; .byte 0; .byte 2; .byte 0; .byte 0; .byte 2; | ||||
| .byte 0; .byte 2; .byte 2; .byte 0; .byte 2; .byte 0; .byte 2; .byte 0; | ||||
| .byte 2; .byte 0; .byte 0; .byte 2; .byte 0; .byte 2; .byte 0; .byte 2; | ||||
| .byte 0; .byte 2; .byte 0; .byte 2; .byte 0; .byte 2; .byte 2; .byte 2; | ||||
| .byte 2; .byte 2; .byte 0; .byte 0; .byte 2; .byte 2; .byte 0; .byte 2; | ||||
| 
 | ||||
| .byte 0; .byte 2; .byte 0; .byte 2; .byte 0; .byte 2; .byte 0; .byte 2; | ||||
| .byte 2; .byte 0; .byte 1; .byte 0; .byte 0; .byte 0; .byte 2; .byte 0; | ||||
| .byte 2; .byte 0; .byte 2; .byte 2; .byte 2; .byte 2; .byte 2; .byte 2; | ||||
| .byte 0; .byte 2; .byte 0; .byte 1; .byte 2; .byte 0; .byte 0; .byte 2; | ||||
| 
 | ||||
| 	.text | ||||
| 		move.l	globmax,d1 | ||||
| 		move.l	d1,a3 | ||||
| #if prof | ||||
| 		move.l	d1,ltime | ||||
| 		move.l	d1,profile	!PROFILE POINTER FOR CURRENT PROC | ||||
| 		move.l	maxcount,d0 | ||||
| 		add.l	#1,d0 | ||||
| 		asl.l	#2,d0		!4 BYTES FOR EACH LINE | ||||
| 		add.l	d0,d1 | ||||
| 		move.l	d0,profsiz	!profsiz CONTAINS NEEDED MEM SIZE | ||||
| #endif | ||||
| #if flow | ||||
| 		move.l	d1,lflow | ||||
| 		move.l	maxcount,d0 | ||||
| 		asr.l	#3,d0		!divide by 8 ; byte is 8 bits ,you know | ||||
| 		add.l	#2,d0 | ||||
| 		bclr	#0,d0		!make integer number of words (2 byte!) | ||||
| 		add.l	d0,d1 | ||||
| 		move.l	d0,flowsiz | ||||
| #endif | ||||
| #if count | ||||
| 		move.l	d1,lcount | ||||
| 		move.l	maxcount,d0 | ||||
| 		add.l	#1,d0 | ||||
| 		asl.l	#2,d0 | ||||
| 		add.l	d0,d1 | ||||
| 		move.l	d0,countsiz | ||||
| #endif | ||||
| 		move.l	d1,tblmax | ||||
| 		add.l	#1024,d1 | ||||
| 		cmp.l	nd,d1 | ||||
| 		bcs	2f | ||||
| 		move.l	d1,-(sp) | ||||
| 		bsr	_break | ||||
| 		testen	(sp)+ | ||||
| 		bne	toolarge | ||||
| 2:		sub.l	a3,d1 | ||||
| 		asr.l	wmu,d1 | ||||
| 3:		cl	(a3)+ | ||||
| 		dbra	d1,3b | ||||
| 		sub.l	#1024,a3 | ||||
| 		move.l	a3,hp | ||||
| cfp:		move.l	ml,sp		!LABEL FOR DEBUGGING | ||||
| 
 | ||||
| #endif | ||||
| 
 | ||||
| !---------------------------------------------------------------------------- | ||||
| !		START CALLING SEQUENCE HERE | ||||
| !----------------------------------------------------------------------------- | ||||
| 
 | ||||
| 		lea	loop,a4 | ||||
| 		move.l	pb,a3 | ||||
| 		move.l	#0,a2 | ||||
| 		move.l	wmu-1,d7 | ||||
| 		clr.l	d6 | ||||
| lblsp:		move.l	entry,-(sp)		!start procedure to call | ||||
| 		bra	cai_z | ||||
| 
 | ||||
| 
 | ||||
| nofile:		mov	#0xD,d0 ;	bra	notrap1 | ||||
| badarg:		move.l	eb,a6 | ||||
| badarg1:	mov	#0xE,d0 ;	bra	notrap1 | ||||
| toolarge:	mov	#0xF,d0 ;	bra	notrap1 | ||||
| 	.data | ||||
| retsize: .space	2 | ||||
| retarea: .space 32 | ||||
| 
 | ||||
| 
 | ||||
| 	.bss | ||||
| argc:	.space	4 | ||||
| argv:	.space	4 | ||||
| envp:	.space	4 | ||||
| savefd:	.space	4 | ||||
| header: | ||||
| ntext:	.space	4 | ||||
| ndata:	.space	4 | ||||
| nproc:	.space	4 | ||||
| entry:	.space	4 | ||||
| nline:	.space	4 | ||||
| szdata:	.space	4 | ||||
| firstp:	.space	4 | ||||
| maxcount:  .space 4 | ||||
| 
 | ||||
| tblmax:	.space	4 | ||||
| globmax: .space	4 | ||||
| ml:	.space	4 | ||||
| eb:	.space	4		!EXPLICITELY REQUIRED eb, filb, curproc IN | ||||
| filb:	.space	4		!THIS ORDER | ||||
| curproc: .space 4 | ||||
| pb:	.space	4 | ||||
| pd:	.space	4 | ||||
| hp:	.space	4 | ||||
| 
 | ||||
| 	.define	filb | ||||
| 	.define curproc | ||||
| 	.define	pd | ||||
| 	.define	nproc | ||||
| 	.define	retarea | ||||
| 	.define	retsize | ||||
| 	.define hp | ||||
| 	.define globmax | ||||
| 	.define tblmax | ||||
| 	.define ml | ||||
| 	.define argc | ||||
| 
 | ||||
| 	.text | ||||
							
								
								
									
										364
									
								
								mach/mantra/int/mloop1
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										364
									
								
								mach/mantra/int/mloop1
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,364 @@ | |||
| !------------------------------------------------------------------------------- | ||||
| !	Main loop of the interpreter starts here | ||||
| !---------------------------------------------------------------------------- | ||||
| 
 | ||||
| loop:	move.l	#0,d0 | ||||
| 	move.b	(a3)+,d0	!opcode in d0 | ||||
| 	add.w	d0,d0		!opcode to index in table | ||||
| 	add.w	d0,d0 | ||||
| #if prof | ||||
| 	move.l	profile,a0 | ||||
| 	lea	timeinf,a5 | ||||
| 	move.l	0(a5,d0),d1	!get operation time | ||||
| 	add.l	d1,(a0) | ||||
| #endif | ||||
| #if opfreq | ||||
| 	lea	counttab,a5 | ||||
| 	add.l	#1,0(a5,d0) | ||||
| #endif | ||||
| 	jmp	dispat(pc,d0)		!jump to branch to the operation | ||||
| 
 | ||||
| 
 | ||||
| !--------------------------------------------------------------------------- | ||||
| !	the BRANCH LIST follows | ||||
| !-------------------------------------------------------------------------- | ||||
| 
 | ||||
| 
 | ||||
| dispat: | ||||
| 
 | ||||
| 
 | ||||
| bra	loc_0 ; bra	loc_1 ; bra	loc_2 ; bra	loc_3 | ||||
| bra	loc_4 ; bra	loc_5 ; bra	loc_6 ; bra	loc_7 | ||||
| bra	loc_8 ; bra	loc_9 ; bra	loc_10 ; bra	loc_11 | ||||
| bra	loc_12 ; bra	loc_13 ; bra	loc_14 ; bra	loc_15 | ||||
| bra	loc_16 ; bra	loc_17 ; bra	loc_18 ; bra	loc_19 | ||||
| bra	loc_20 ; bra	loc_21 ; bra	loc_22 ; bra	loc_23 | ||||
| bra	loc_24 ; bra	loc_25 ; bra	loc_26 ; bra	loc_27 | ||||
| bra	loc_28 ; bra	loc_29 ; bra	loc_30 ; bra	loc_31 | ||||
| bra	loc_32 ; bra	loc_33 ; bra	aar_1W ; bra	adf_s0 | ||||
| bra	adi_1W ; bra	adi_2W ; bra	adp_l ; bra	adp_1 | ||||
| bra	adp_2 ; bra	adp_s0 ; bra	adp_s_1 ; bra	ads_1W | ||||
| bra	and_1W ; bra	asp_1W ; bra	asp_2W ; bra	asp_3W | ||||
| bra	asp_4W ; bra	asp_5W ; bra	asp_w0 ; bra	beq_l | ||||
| bra	beq_s0 ; bra	bge_s0 ; bra	bgt_s0 ; bra	ble_s0 | ||||
| bra	blm_s0 ; bra	blt_s0 ; bra	bne_s0 ; bra	bra_l | ||||
| bra	bra_s_1 ; bra	bra_s_2 ; bra	bra_s0 ; bra	bra_s1 | ||||
| bra	cal_1 ; bra	cal_2 ; bra	cal_3 ; bra	cal_4 | ||||
| bra	cal_5 ; bra	cal_6 ; bra	cal_7 ; bra	cal_8 | ||||
| bra	cal_9 ; bra	cal_10 ; bra	cal_11 ; bra	cal_12 | ||||
| bra	cal_13 ; bra	cal_14 ; bra	cal_15 ; bra	cal_16 | ||||
| bra	cal_17 ; bra	cal_18 ; bra	cal_19 ; bra	cal_20 | ||||
| bra	cal_21 ; bra	cal_22 ; bra	cal_23 ; bra	cal_24 | ||||
| bra	cal_25 ; bra	cal_26 ; bra	cal_27 ; bra	cal_28 | ||||
| bra	cal_s0 ; bra	cff_z ; bra	cif_z ; bra	cii_z | ||||
| bra	cmf_s0 ; bra	cmi_1W ; bra	cmi_2W ; bra	cmp_z | ||||
| bra	cms_s0 ; bra	csa_1W ; bra	csb_1W ; bra	dec_z | ||||
| bra	dee_w0 ; bra	del_w_1 ; bra	dup_1W ; bra	dvf_s0 | ||||
| bra	dvi_1W ; bra	fil_l ; bra	inc_z ; bra	ine_lw | ||||
| bra	ine_w0 ; bra	inl__1W ; bra	inl__2W ; bra	inl__3W | ||||
| bra	inl_w_1 ; bra	inn_s0 ; bra	ior_1W ; bra	ior_s0 | ||||
| bra	lae_l ; bra	lae_w0 ; bra	lae_w1 ; bra	lae_w2 | ||||
| bra	lae_w3 ; bra	lae_w4 ; bra	lae_w5 ; bra	lae_w6 | ||||
| bra	lal_p ; bra	lal_n ; bra	lal_0 ; bra	lal__1 | ||||
| bra	lal_w0 ; bra	lal_w_1 ; bra	lal_w_2 ; bra	lar_1W | ||||
| bra	ldc_0 ; bra	lde_lw ; bra	lde_w0 ; bra	ldl_0 | ||||
| bra	ldl_w_1 ; bra	lfr_1W ; bra	lfr_2W ; bra	lfr_s0 | ||||
| bra	lil_w_1 ; bra	lil_w0 ; bra	lil_0 ; bra	lil_1W | ||||
| bra	lin_l ; bra	lin_s0 ; bra	lni_z ; bra	loc_l | ||||
| bra	loc__1 ; bra	loc_s0 ; bra	loc_s_1 ; bra	loe_lw | ||||
| bra	loe_w0 ; bra	loe_w1 ; bra	loe_w2 ; bra	loe_w3 | ||||
| bra	loe_w4 ; bra	lof_l ; bra	lof_1W ; bra	lof_2W | ||||
| bra	lof_3W ; bra	lof_4W ; bra	lof_s0 ; bra	loi_l | ||||
| bra	loi_1 ; bra	loi_1W ; bra	loi_2W ; bra	loi_3W | ||||
| bra	loi_4W ; bra	loi_s0 ; bra	lol_pw ; bra	lol_nw | ||||
| bra	lol_0 ; bra	lol_1W ; bra	lol_2W ; bra	lol_3W | ||||
| bra	lol__1W ; bra	lol__2W ; bra	lol__3W ; bra	lol__4W | ||||
| bra	lol__5W ; bra	lol__6W ; bra	lol__7W ; bra	lol__8W | ||||
| bra	lol_w0 ; bra	lol_w_1 ; bra	lxa_1 ; bra	lxl_1 | ||||
| bra	lxl_2 ; bra	mlf_s0 ; bra	mli_1W ; bra	mli_2W | ||||
| bra	rck_1W ; bra	ret_0 ; bra	ret_1W ; bra	ret_s0 | ||||
| bra	rmi_1W ; bra	sar_1W ; bra	sbf_s0 ; bra	sbi_1W | ||||
| bra	sbi_2W ; bra	sdl_w_1 ; bra	set_s0 ; bra	sil_w_1 | ||||
| bra	sil_w0 ; bra	sli_1W ; bra	ste_lw ; bra	ste_w0 | ||||
| bra	ste_w1 ; bra	ste_w2 ; bra	stf_l ; bra	stf_1W | ||||
| bra	stf_2W ; bra	stf_s0 ; bra	sti_1 ; bra	sti_1W | ||||
| bra	sti_2W ; bra	sti_3W ; bra	sti_4W ; bra	sti_s0 | ||||
| bra	stl_pw ; bra	stl_nw ; bra	stl_0 ; bra	stl_1W | ||||
| bra	stl__1W ; bra	stl__2W ; bra	stl__3W ; bra	stl__4W | ||||
| bra	stl__5W ; bra	stl_w_1 ; bra	teq_z ; bra	tgt_z | ||||
| bra	tlt_z ; bra	tne_z ; bra	zeq_l ; bra	zeq_s0 | ||||
| bra	zeq_s1 ; bra	zer_s0 ; bra	zge_s0 ; bra	zgt_s0 | ||||
| bra	zle_s0 ; bra	zlt_s0 ; bra	zne_s0 ; bra	zne_s_1 | ||||
| bra	zre_lw ; bra	zre_w0 ; bra	zrl__1W ; bra	zrl__2W | ||||
| bra	zrl_w_1 ; bra	zrl_nw | ||||
| 
 | ||||
| .errnz	.-dispat-1016 | ||||
| !----------------------------------------------------------------------------- | ||||
| !	Two byte opcodes come here for decoding of second byte | ||||
| !---------------------------------------------------------------------------- | ||||
| 
 | ||||
| escape1: | ||||
| 	move.l	#0,d0 | ||||
| 	bra	1f | ||||
| 	bra	escape2 | ||||
| 1:	move.b	(a3)+,d0	!second byte ,extended opcode | ||||
| 	add.w	d0,d0			!make index of address | ||||
| 	add.w	d0,d0 | ||||
| 	cmp.w	#640,d0		!check for range | ||||
| 	bhi	e_illins	!jump to ill instruction procedure | ||||
| #if prof | ||||
| 	lea	timeinf1,a5 | ||||
| 	move.l	0(a5,d0),d1 | ||||
| 	add.l	d1,(a0) | ||||
| #endif | ||||
| #if opfreq | ||||
| 	lea	counttab+1024,a5 | ||||
| 	add.l	#1,0(a5,d0) | ||||
| #endif | ||||
| 	jmp	dispae1(pc,d0)		!jump to the operation | ||||
| 
 | ||||
| !------------------------------------------------------------------------------ | ||||
| !	now dispatch table for escaped opcodes | ||||
| !------------------------------------------------------------------------------ | ||||
| 
 | ||||
| dispae1:      !dispatch	escaped	opcodes	1 | ||||
| 
 | ||||
| bra	aar_l ; bra	aar_z ; bra	adf_l ; bra	adf_z | ||||
| bra	adi_l ; bra	adi_z ; bra	ads_l ; bra	ads_z | ||||
| bra	adu_l ; bra	adu_z ; bra	and_l ; bra	and_z | ||||
| bra	asp_lw ; bra	ass_l ; bra	ass_z ; bra	bge_l | ||||
| bra	bgt_l ; bra	ble_l ; bra	blm_l ; bra	bls_l | ||||
| bra	bls_z ; bra	blt_l ; bra	bne_l ; bra	cai_z | ||||
| bra	cal_l ; bra	cfi_z ; bra	cfu_z ; bra	ciu_z | ||||
| bra	cmf_l ; bra	cmf_z ; bra	cmi_l ; bra	cmi_z | ||||
| bra	cms_l ; bra	cms_z ; bra	cmu_l ; bra	cmu_z | ||||
| bra	com_l ; bra	com_z ; bra	csa_l ; bra	csa_z | ||||
| bra	csb_l ; bra	csb_z ; bra	cuf_z ; bra	cui_z | ||||
| bra	cuu_z ; bra	dee_lw ; bra	del_pw ; bra	del_nw | ||||
| bra	dup_l ; bra	dus_l ; bra	dus_z ; bra	dvf_l | ||||
| bra	dvf_z ; bra	dvi_l ; bra	dvi_z ; bra	dvu_l | ||||
| bra	dvu_z ; bra	fef_l ; bra	fef_z ; bra	fif_l | ||||
| bra	fif_z ; bra	inl_pw ; bra	inl_nw ; bra	inn_l | ||||
| bra	inn_z ; bra	ior_l ; bra	ior_z ; bra	lar_l | ||||
| bra	lar_z ; bra	ldc_l ; bra	ldf_l ; bra	ldl_pw | ||||
| bra	ldl_nw ; bra	lfr_l ; bra	lil_pw ; bra	lil_nw | ||||
| bra	lim_z ; bra	los_l ; bra	los_z ; bra	lor_s0 | ||||
| bra	lpi_l ; bra	lxa_l ; bra	lxl_l ; bra	mlf_l | ||||
| bra	mlf_z ; bra	mli_l ; bra	mli_z ; bra	mlu_l | ||||
| bra	mlu_z ; bra	mon_z ; bra	ngf_l ; bra	ngf_z | ||||
| bra	ngi_l ; bra	ngi_z ; bra	nop_z ; bra	rck_l | ||||
| bra	rck_z ; bra	ret_l ; bra	rmi_l ; bra	rmi_z | ||||
| bra	rmu_l ; bra	rmu_z ; bra	rol_l ; bra	rol_z | ||||
| bra	ror_l ; bra	ror_z ; bra	rtt_z ; bra	sar_l | ||||
| bra	sar_z ; bra	sbf_l ; bra	sbf_z ; bra	sbi_l | ||||
| bra	sbi_z ; bra	sbs_l ; bra	sbs_z ; bra	sbu_l | ||||
| bra	sbu_z ; bra	sde_l ; bra	sdf_l ; bra	sdl_pw | ||||
| bra	sdl_nw ; bra	set_l ; bra	set_z ; bra	sig_z | ||||
| bra	sil_pw ; bra	sil_nw ; bra	sim_z ; bra	sli_l | ||||
| 
 | ||||
| 
 | ||||
| bra	sli_z ; bra	slu_l ; bra	slu_z ; bra	sri_l | ||||
| bra	sri_z ; bra	sru_l ; bra	sru_z ; bra	sti_l | ||||
| bra	sts_l ; bra	sts_z ; bra	str_s0 ; bra	tge_z | ||||
| bra	tle_z ; bra	trp_z ; bra	xor_l ; bra	xor_z | ||||
| bra	zer_l ; bra	zer_z ; bra	zge_l ; bra	zgt_l | ||||
| bra	zle_l ; bra	zlt_l ; bra	zne_l ; bra	zrf_l | ||||
| bra	zrf_z ; bra	zrl_pw ; bra	dch_z ; bra	exg_s0 | ||||
| bra	exg_l ; bra	exg_z ; bra	lpb_z ; bra	gto_l | ||||
| 
 | ||||
| .errnz	.-dispae1-640 | ||||
| 
 | ||||
| !---------------------------------------------------------------------------- | ||||
| 
 | ||||
| escape2: | ||||
| 	move.l	#0,d0 | ||||
| 	move.b	(a3)+,d0	!opcode | ||||
| 	sub.l	#4,sp | ||||
| 	move.b	(a3)+,(sp) | ||||
| 	move.b	(a3)+,1(sp) | ||||
| 	move.b	(a3)+,2(sp) | ||||
| 	move.b	(a3)+,3(sp) | ||||
| 	add.w	d0,d0 | ||||
| 	add.w	d0,d0 | ||||
| 	cmp.w	#220,d0 | ||||
| 	bhi	e_illins | ||||
| #if prof | ||||
| 	lea	timeinf2,a5 | ||||
| 	move.l	0(a5,d0),d1 | ||||
| 	add.l	d1,(a0) | ||||
| #endif | ||||
| #if opfreq | ||||
| 	lea	counttab+1664,a5 | ||||
| 	add.l	#1,0(a5,d0) | ||||
| #endif | ||||
| 	jmp	dispae2(pc,d0) | ||||
| 
 | ||||
| 
 | ||||
| !--------------------------------------------------------------------------- | ||||
| !	BRANCH TABLE FOR SECOND ESCAPED OPCODES | ||||
| !--------------------------------------------------------------------------- | ||||
| 
 | ||||
| dispae2: | ||||
| bra	ldc_q	; bra	lae_q	; bra	lal_qp	; bra	lal_qn | ||||
| bra	lde_qw	; bra	ldf_q	; bra	ldl_qpw	; bra	ldl_qnw | ||||
| bra	lil_qpw	; bra	lil_qnw	; bra	loc_q	; bra	loe_qw | ||||
| bra	lof_q	 ; bra	lol_qpw ; bra	lol_qnw	; bra	lpi_q | ||||
| bra	adp_q	; bra	asp_qw	; bra	beq_q	; bra	bge_q | ||||
| bra	bgt_q	; bra	ble_q	; bra	blm_q	; bra	blt_q | ||||
| bra	bne_q	; bra	bra_q	; bra	cal_q	; bra	dee_qw | ||||
| bra	del_qpw	; bra	del_qnw	; bra	fil_q	; bra	gto_q | ||||
| bra	ine_qw	; bra	inl_qpw	; bra	inl_qnw	; bra	lin_q | ||||
| bra	sde_q	; bra	sdf_q	; bra	sdl_qpw	; bra	sdl_qnw | ||||
| bra	sil_qpw	; bra	sil_qnw	; bra	ste_qw	; bra	stf_q | ||||
| bra	stl_qpw	; bra	stl_qnw	; bra	zeq_q	; bra	zge_q | ||||
| bra	zgt_q	; bra	zle_q	; bra	zlt_q	; bra	zne_q | ||||
| bra	zre_qw	; bra	zrl_qpw	; bra	zrl_qnw | ||||
| 
 | ||||
| .errnz .-dispae2-220 | ||||
| 
 | ||||
| !------------------------------------------------------------------------------ | ||||
| !	timeinf	tables,	first the unescaped opcodes | ||||
| !	these tables are parallel to the tables	dispat , dispae1 and dispae2 | ||||
| !	Each entry contains a reasonable estimate of | ||||
| !	the number of processor state cycles needed to | ||||
| !	execute	that instruction. The exact amount cannot be | ||||
| !	supplied, since	this can depend	rather heavily on the | ||||
| !	size of	the object in set, array case instructions etc. | ||||
| !	The table timeinf also contains, added to each entry, | ||||
| !	the number of processor state cycles needed to find the instruction. | ||||
| !	This number is currently 22.Also the number of processor state | ||||
| !	cycles to return from the instruction is included. | ||||
| !	The number is computed for | ||||
| !	the case that all check	and runinf options are off. | ||||
| !------------------------------------------------------------------------------ | ||||
| 
 | ||||
| #if prof | ||||
| 
 | ||||
| 	.data | ||||
| 
 | ||||
| timeinf: | ||||
| .long 33 ; .long 35 ; .long 35 ; .long 35  | ||||
| .long 35 ; .long 35 ; .long 35 ; .long 35 | ||||
| .long 35 ; .long 35 ; .long 35 ; .long 35  | ||||
| .long 35 ; .long 35 ; .long 35 ; .long 35 | ||||
| .long 35 ; .long 35 ; .long 35 ; .long 35  | ||||
| .long 35 ; .long 35 ; .long 35 ; .long 35 | ||||
| .long 35 ; .long 35 ; .long 35 ; .long 35  | ||||
| .long 35 ; .long 35 ; .long 35 ; .long 35 | ||||
| .long 35 ; .long 35 ; .long 127 ; .long 00  | ||||
| .long 36 ; .long 42 ; .long 56 ; .long 40 | ||||
| .long 40 ; .long 42 ; .long 42 ; .long 42  | ||||
| .long 36 ; .long 39 ; .long 39 ; .long 39 | ||||
| .long 39 ; .long 39 ; .long 41 ; .long 67  | ||||
| .long 48 ; .long 48 ; .long 48 ; .long 48 | ||||
| .long 97 ; .long 48 ; .long 48 ; .long 55  | ||||
| .long 45 ; .long 45 ; .long 36 ; .long 43 | ||||
| .long 211 ; .long 211 ; .long 211 ; .long 211  | ||||
| .long 211 ; .long 211 ; .long 211 ; .long 211 | ||||
| .long 211 ; .long 211 ; .long 211 ; .long 211  | ||||
| .long 211 ; .long 211 ; .long 211 ; .long 211 | ||||
| .long 211 ; .long 211 ; .long 211 ; .long 211  | ||||
| .long 211 ; .long 211 ; .long 211 ; .long 211 | ||||
| .long 211 ; .long 211 ; .long 211 ; .long 211  | ||||
| .long 213 ; .long 00 ; .long 00 ; .long 66 | ||||
| .long 00 ; .long 50 ; .long 54 ; .long 54 | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00 | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00  | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00 | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00  | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00 | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00  | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00 | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00  | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00 | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00  | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00 | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00  | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00 | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00  | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00 | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00  | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00 | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00  | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00 | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00  | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00 | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00  | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00 | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00  | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00 | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00  | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00 | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00  | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00 | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00  | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00 | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00  | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00 | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00  | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00 | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00  | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00 | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00  | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00  | ||||
| 
 | ||||
| timeinf1: | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00  | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00 | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00  | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00 | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00  | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00 | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00  | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00 | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00  | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00 | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00  | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00 | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00  | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00 | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00  | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00 | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00  | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00 | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00  | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00 | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00  | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00 | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00  | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00 | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00  | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00 | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00  | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00 | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00  | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00 | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00  | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00 | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00  | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00 | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00  | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00 | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00  | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00 | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00  | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00  | ||||
| 
 | ||||
| timeinf2: | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00  | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00 | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00  | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00 | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00  | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00 | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00  | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00 | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00  | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00 | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00  | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00 | ||||
| .long 00 ; .long 00 ; .long 00 ; .long 00  | ||||
| .long 00 ; .long 00 ; .long 00   | ||||
| 
 | ||||
| #endif | ||||
| 	.text | ||||
							
								
								
									
										344
									
								
								mach/mantra/int/mloop2
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										344
									
								
								mach/mantra/int/mloop2
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,344 @@ | |||
| !-------------------------------------------------------------------------- | ||||
| !	Laod constant , load local , store local | ||||
| !-------------------------------------------------------------------------- | ||||
| 
 | ||||
| loc_0:	mov	d6,-(sp) | ||||
| 	jmp	(a4) | ||||
| loc_1:	loc_2:	loc_3:	loc_4:	loc_5:	loc_6:	loc_7:	loc_8: | ||||
| loc_9:	loc_10:	loc_11:	loc_12:	loc_13:	loc_14:	loc_15:	loc_16: | ||||
| loc_17:	loc_18:	loc_19:	loc_20:	loc_21:	loc_22:	loc_23:	loc_24:	 | ||||
| loc_25:	loc_26:	loc_27:	loc_28:	loc_29:	loc_30:	loc_31:	loc_32: | ||||
| loc_33: | ||||
| 	asr.w	#2,d0		!make the multiplication undone | ||||
| 	mov	d0,-(sp) | ||||
| 	jmp	(a4) | ||||
| loc__1: | ||||
| 	mov	#-1,-(sp) | ||||
| 	jmp	(a4) | ||||
| loc_s0:	clr.w	d0 | ||||
| 	move.b	(a3)+,d0 | ||||
| 	mov	d0,-(sp) | ||||
| 	jmp	(a4) | ||||
| loc_s_1:	mov	#-1,d0 | ||||
| 	move.b	(a3)+,d0 | ||||
| 	mov	d0,-(sp) | ||||
| 	jmp	(a4) | ||||
| lpi_l: | ||||
| 	adroff | ||||
| 	move.w	(a1),d0 | ||||
| 	move.l	d0,-(sp) | ||||
| 	jmp	(a4) | ||||
| lpi_q:	jmp	(a4) | ||||
| 
 | ||||
| loc_q:	jmp	(a4) | ||||
| #ifndef lword | ||||
| 	 bra	e_illins | ||||
| #endif | ||||
| loc_l:	adroff | ||||
| 	move.w	(a1),d0 | ||||
| 	ext.l	d0 | ||||
| 	mov	d0,-(sp) | ||||
| 	jmp	(a4) | ||||
| ldc_0:	cl	-(sp) | ||||
| 	cl	-(sp) | ||||
| 	jmp	(a4) | ||||
| ldc_l: | ||||
| 	adroff | ||||
| 	move.w	(a1),d0 | ||||
| 	ext.l	d0		!ext works only on d register | ||||
| 4:	move.l	d0,-(sp)	!adapt for l , then "move.2l" signextended | ||||
| #ifdef	lword | ||||
| 	bmi	0f | ||||
| 	clr.l	-(sp) | ||||
| 	bra	1f | ||||
| 0:	move.l	#-1,-(sp) | ||||
| 1: | ||||
| #endif | ||||
| 	jmp	(a4) | ||||
| ldc_q: | ||||
| #ifdef lword | ||||
| 	clr.l	-(sp) | ||||
| #endif | ||||
| 	jmp	(a4) | ||||
| 
 | ||||
| !------------------------------------------------------------------------- | ||||
| !	offsets should be adapted for wordsize 4 .Use identifiers | ||||
| !	l3 to l_8 for the offsets in lol_3W to lol__8 . Use the | ||||
| !	preprocessor for conditional definitions . | ||||
| 
 | ||||
| lol_0:		mov	l0(a2),-(sp)	; jmp	(a4) | ||||
| lol_1W:		mov	l1(a2),-(sp)	; jmp	(a4) | ||||
| lol_2W:		mov	l2(a2),-(sp)	; jmp	(a4) | ||||
| lol_3W:		mov	l3(a2),-(sp)	; jmp	(a4) | ||||
| lol__1W:	mov	l_1(a2),-(sp)	; jmp	(a4) | ||||
| lol__2W:	mov	l_2(a2),-(sp)	; jmp	(a4) | ||||
| lol__3W:	mov	l_3(a2),-(sp)	; jmp	(a4) | ||||
| lol__4W:	mov	l_4(a2),-(sp)	; jmp	(a4) | ||||
| lol__5W:	mov	l_5(a2),-(sp)	; jmp	(a4) | ||||
| lol__6W:	mov	l_6(a2),-(sp)	; jmp	(a4) | ||||
| lol__7W:	mov	l_7(a2),-(sp)	; jmp	(a4) | ||||
| lol__8W:	mov	l_8(a2),-(sp)	; jmp	(a4) | ||||
| lol_w0:		clr.w	d0	 | ||||
| 		move.b	(a3)+,d0 | ||||
| 5:		asl.l	wmu,d0 | ||||
| 		mov	16(a2,d0),-(sp)	 | ||||
| 		jmp	(a4) | ||||
| 
 | ||||
| lol_w_1:	move.l	#-1,d0 | ||||
| 		move.b	(a3)+,d0 | ||||
| 2:		asl.l	wmu,d0 | ||||
| 		mov	0(a2,d0),-(sp) | ||||
| 		jmp	(a4) | ||||
| lol_pw:		adroff | ||||
| 		move.w	(a1),d0 | ||||
| 		bra	5b | ||||
| 
 | ||||
| lol_nw:		adroff | ||||
| 		move.w	(a1),d0 | ||||
| 		ext.l	d0 | ||||
| 		bra	2b | ||||
| lol_qnw:	move.l	(sp)+,d0 | ||||
| 		bra	2b | ||||
| lol_qpw:	move.l	(sp)+,d0 | ||||
| 		bra	5b | ||||
| 
 | ||||
| 
 | ||||
| !-------------------------------------------------------------------------- | ||||
| 
 | ||||
| ldl_0:		mov	l1(a2),-(sp)	!offset code | ||||
| 		mov	l0(a2),-(sp)	!offset code | ||||
| 		jmp	(a4) | ||||
| ldl_w_1:	move.l	#-1,d0 | ||||
| 		move.b	(a3)+,d0 | ||||
| 2:		asl.l	wmu,d0 | ||||
| 		mov	word(a2,d0),-(sp) | ||||
| 		mov	0(a2,d0),-(sp) | ||||
| 		jmp	(a4) | ||||
| ldl_pw:		adroff | ||||
| 		move.w	(a1),d0 | ||||
| 5:		asl.l	wmu,d0 | ||||
| 		mov	l1(a2,d0),-(sp) | ||||
| 		mov	l0(a2,d0),-(sp) | ||||
| 		jmp	(a4) | ||||
| ldl_nw:		adroff | ||||
| 		move.w	(a1),d0 | ||||
| 		ext.l	d0 | ||||
| 		bra	2b | ||||
| ldl_qpw:	move.l	(sp)+,d0 | ||||
| 		bra	5b | ||||
| ldl_qnw:	move.l	(sp)+,d0 | ||||
| 		bra	2b | ||||
| 
 | ||||
| !------------------------------------------------------------------------- | ||||
| loe_lw:		adroff | ||||
| 		move.w	(a1),d0 | ||||
| 		bra	1f | ||||
| loe_qw:		move.l	(sp)+,d0 | ||||
| 		bra	1f | ||||
| 
 | ||||
| loe_w0:		loe_w1:		loe_w2:		loe_w3:		loe_w4: | ||||
| 		sub.w	#624,d0 | ||||
| 		asl.w	#6,d0 | ||||
| 		move.b	(a3)+,d0 | ||||
| 1:		ext.l	d0 | ||||
| 		asl.l	wmu,d0 | ||||
| 		mov	0(a6,d0),-(sp) | ||||
| 		jmp	(a4) | ||||
| 
 | ||||
| lde_lw:		adroff | ||||
| 		move.w	(a1),d0 | ||||
| 		bra	1f | ||||
| lde_qw:		move.l	(sp)+,d0 | ||||
| 		bra	1f | ||||
| 
 | ||||
| lde_w0:		clr.w	d0 | ||||
| 		move.b	(a3)+,d0 | ||||
| 1:		asl.l	wmu,d0		 | ||||
| 		mov	word(a6,d0),-(sp) | ||||
| 		mov	0(a6,d0),-(sp) | ||||
| 		jmp	(a4) | ||||
| 
 | ||||
| !------------------------------------------------------------------------------ | ||||
| lil_0:		move.l	l0(a2),a0 | ||||
| 		mov	(a0),-(sp) | ||||
| 		jmp	(a4) | ||||
| lil_1W:		move.l	l1(a2),a0 | ||||
| 		mov	(a0),-(sp) | ||||
| 		jmp	(a4) | ||||
| lil_pw:		adroff | ||||
| 		move.w	(a1),d0 | ||||
| 		bra	1f | ||||
| lil_qpw:	move.l	(sp)+,d0 | ||||
| 		bra	1f | ||||
| 
 | ||||
| lil_w0:		clr.w	d0 | ||||
| 		move.b	(a3)+,d0 | ||||
| 1:		asl.l	wmu,d0 | ||||
| 		move.l	l0(a2,d0),a0 | ||||
| 		mov	(a0),-(sp) | ||||
| 		jmp	(a4) | ||||
| 
 | ||||
| lil_nw:		adroff | ||||
| 		move.w	(a1),d0 | ||||
| 		ext.l	d0 | ||||
| 		bra	1f | ||||
| lil_qnw:	move.l	(sp)+,d0 | ||||
| 		bra	1f | ||||
| 
 | ||||
| lil_w_1:	move.l	#-1,d0 | ||||
| 		move.b (a3)+,d0 | ||||
| 1:		asl.l	wmu,d0	 | ||||
| 		move.l	0(a2,d0),a0 | ||||
| 		mov	(a0),-(sp) | ||||
| 		jmp	(a4) | ||||
| 
 | ||||
| !--------------------------------------------------------------------------- | ||||
| lof_s0:		move.l	d6,d0 | ||||
| 		move.b	(a3)+,d0 | ||||
| 		bra	1f | ||||
| lof_l:		adroff | ||||
| 		move.w	(a1),d0 | ||||
| 		ext.l	d0 | ||||
| 		bra	1f | ||||
| lof_q:		move.l	(sp)+,d0 | ||||
| 		bra	1f | ||||
| lof_1W:		move.l	#1,d0 | ||||
| 2:		asl.w	wmu,d0 | ||||
| 1:		move.l	(sp)+,a0 | ||||
| 		mov	0(a0,d0),-(sp) | ||||
| 		jmp	(a4) | ||||
| lof_2W:		move.l	#2,d0	;	bra	2b | ||||
| lof_3W:		move.l	#3,d0	;	bra	2b | ||||
| lof_4W:		move.l	#4,d0	;	bra	2b | ||||
| ldf_l:		adroff | ||||
| 		move.w	(a1),d0 | ||||
| 		ext.l	d0 | ||||
| 2:		move.l	(sp)+,a0 | ||||
| 		mov	word(a0,d0),-(sp) | ||||
| 		mov	0(a0,d0),-(sp) | ||||
| 		jmp	(a4) | ||||
| ldf_q:		move.l	(sp)+,d0 | ||||
| 		bra	2b | ||||
| 
 | ||||
| !------------------------------------------------------------------------- | ||||
| 
 | ||||
| lal_p:		adroff | ||||
| 		move.w	(a1),d0 | ||||
| 		bra	1f | ||||
| lal_qp:		move.l	(sp)+,d0 | ||||
| 		bra	1f | ||||
| lal_0:		pea	16(a2) | ||||
| 		jmp	(a4)	 | ||||
| lal_w0:		clr.w	d0 | ||||
| 		move.b	(a3)+,d0 | ||||
| 		asl.l	wmu,d0 | ||||
| 1:		add.l	#16,d0 | ||||
| 		bra	3f | ||||
| lal_n:		adroff | ||||
| 		move.w	(a1),d0 | ||||
| 		ext.l	d0 | ||||
| 		bra	3f | ||||
| lal_qn:		move.l	(sp)+,d0 | ||||
| 		bra	3f | ||||
| lal__1:		move.l	#-1,d0 | ||||
| 3:		pea	0(a2,d0) | ||||
| 		jmp	(a4) | ||||
| lal_w_1:	move.l	#-1,d0 | ||||
| 2:		move.b	(a3)+,d0 | ||||
| 		asl.l	wmu,d0 | ||||
| 		bra	3b | ||||
| lal_w_2:	move.l	#-512,d0 | ||||
| 		bra	2b | ||||
| lae_l:		adroff | ||||
| 		move.w	(a1),d0 | ||||
| 		bra	1f | ||||
| lae_q:		move.l	(sp)+,d0 | ||||
| 		bra	1f | ||||
| lae_w0:		lae_w1:		lae_w2:		lae_w3:		lae_w4: | ||||
| lae_w5:		lae_w6: | ||||
| 		sub.w	#484,d0 | ||||
| 		asl.w	#6,d0 | ||||
| 		move.b	(a3)+,d0 | ||||
| 		asl.w	wmu,d0 | ||||
| 1:		pea	0(a6,d0) | ||||
| 		jmp	(a4) | ||||
| 
 | ||||
| !--------------------------------------------------------------------------- | ||||
| lxl_1:		move.l	16(a2),-(sp) | ||||
| 		jmp	(a4) | ||||
| lxl_l:		adroff | ||||
| 		move.w	(a1),d0 | ||||
| 		beq	5f | ||||
| 		bgt	1f | ||||
| 		blt	e_oddz | ||||
| 1:		sub.l	#1,d0 | ||||
| 		bra	2f | ||||
| lxl_2:		move.w	#1,d0 | ||||
| 2:		move.l	a2,a0 | ||||
| 3:		move.l	16(a0),a0 | ||||
| 		dbra	d0,3b | ||||
| 		move.l	a0,-(sp) | ||||
| 		jmp	(a4) | ||||
| 5:		move.l	a2,-(sp) | ||||
| 		jmp	(a4) | ||||
| 
 | ||||
| lxa_1:		move.l	#0,d0 | ||||
| 		bra	3f | ||||
| lxa_l:		adroff | ||||
| 		move.w	(a1),d0 | ||||
| 		bgt	1f | ||||
| 		blt	e_oddz | ||||
| 		pea	16(a2) | ||||
| 		jmp	(a4) | ||||
| 1:		sub.l	#1,d0 | ||||
| 3:		move.l	a2,a0 | ||||
| 2:		move.l	16(a0),a0 | ||||
| 		dbra	d0,2b | ||||
| 		pea	16(a0) | ||||
| 		jmp	(a4) | ||||
| 
 | ||||
| !----------------------------------------------------------------------- | ||||
| 
 | ||||
| loi_l:		adroff | ||||
| 		clr.l	d1 | ||||
| 		move.w	(a1),d1 | ||||
| 		bra	8f | ||||
| loi_s0:		clr.l	d1 | ||||
| 		move.b	(a3)+,d1 | ||||
| 8:		cmp.w	#1,d1 | ||||
| 		beq	loi_1 | ||||
| 		cmp.w	#2,d1 | ||||
| 		beq	2f | ||||
| 		move.w	d1,d0 | ||||
| 		move.w	d7,d2 | ||||
| 3:		asr.w	#1,d0	;	dbcs	d2,3b | ||||
| 		bcs	e_oddz | ||||
| 		bra	5f | ||||
| loi_1W:		loi_2W:		loi_3W:		loi_4W: | ||||
| 		asr.w	#2,d0 | ||||
| 		sub.w	#168,d0 | ||||
| 		move.l	d0,d1 | ||||
| 		asl.w	wmu,d1 | ||||
| 5:		move.l	(sp)+,a0 | ||||
| 		add.l	d1,a0 | ||||
| 		sub.w	#1,d0 | ||||
| 1:		mov	-(a0),-(sp) | ||||
| 		dbra	d0,1b | ||||
| 		jmp	(a4) | ||||
| 2:		move.l	(sp)+,a0 | ||||
| 		move.w	(a0),d0 | ||||
| 		mov	d0,-(sp) | ||||
| 		jmp	(a4) | ||||
| loi_1:		move.l	(sp)+,a0 | ||||
| 		move.w	d6,d0 | ||||
| 		move.b	(a0),d0 | ||||
| 		mov	d0,-(sp) | ||||
| 		jmp	(a4) | ||||
| 
 | ||||
| los_z:		mov	(sp)+,d0 | ||||
| 		bra	0f | ||||
| los_l:		adroff | ||||
| 		move.w	(a1),d0 | ||||
| 0:		checksize | ||||
| 2:		move.l	#0,d1	;	move.w	(sp)+,d1 ;	bra	8b | ||||
| 4:		move.l	(sp)+,d1 ;	bra	8b | ||||
							
								
								
									
										191
									
								
								mach/mantra/int/mloop3
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										191
									
								
								mach/mantra/int/mloop3
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,191 @@ | |||
| !--------------------------------------------------------------------- | ||||
| !		STORE GROUP | ||||
| !--------------------------------------------------------------------- | ||||
| 
 | ||||
| stl_pw:	adroff | ||||
| 		move.w	(a1),d0 | ||||
| 3:		asl.l	wmu,d0 | ||||
| 		mov	(sp)+,16(a2,d0)	 | ||||
| 		jmp	(a4) | ||||
| stl_qpw:	move.l	(sp)+,d0 | ||||
| 		bra	3b | ||||
| 
 | ||||
| stl_nw:		adroff | ||||
| 		move.w	(a1),d0 | ||||
| 		ext.l	d0 | ||||
| 		bra	1f | ||||
| stl_qnw:	move.l	(sp)+,d0 | ||||
| 		bra	1f | ||||
| stl_w_1:	move.l	#-1,d0 | ||||
| 		move.b	(a3)+,d0 | ||||
| 1:		asl.l	wmu,d0 | ||||
| 		mov	(sp)+,0(a2,d0) | ||||
| 		jmp	(a4) | ||||
| stl_0:		mov	(sp)+,16(a2)	; jmp	(a4) | ||||
| stl_1W:		mov	(sp)+,l1(a2)	; jmp	(a4) | ||||
| stl__1W:	mov	(sp)+,l_1(a2)	; jmp	(a4) | ||||
| stl__2W:	mov	(sp)+,l_2(a2)	; jmp	(a4) | ||||
| stl__3W:	mov	(sp)+,l_3(a2)	; jmp	(a4) | ||||
| stl__4W:	mov	(sp)+,l_4(a2)	; jmp	(a4) | ||||
| stl__5W:	mov	(sp)+,l_5(a2)	; jmp	(a4) | ||||
| sdl_w_1:	move.l	#-1,d0 | ||||
| 		move.b	(a3)+,d0 | ||||
| 2:		asl.l	wmu,d0 | ||||
| 		mov	(sp)+,0(a2,d0) | ||||
| 		mov	(sp)+,word(a2,d0) | ||||
| 		jmp	(a4) | ||||
| sdl_nw:		adroff | ||||
| 		move.w	(a1),d0 | ||||
| 		ext.l	d0 | ||||
| 		bra	2b | ||||
| sdl_qnw:	move.l	(sp)+,d0 | ||||
| 		bra	2b | ||||
| sdl_qpw:	move.l	(sp)+,d0 | ||||
| 		bra	4f | ||||
| sdl_pw:		adroff | ||||
| 		move.w	(a1),d0 | ||||
| 4:		asl.l	wmu,d0 | ||||
| 		mov	(sp)+,l0(a2,d0) | ||||
| 		mov	(sp)+,l1(a2,d0) | ||||
| 		jmp	(a4) | ||||
| 
 | ||||
| !------------------------------------------------------------------------ | ||||
| 
 | ||||
| sde_q:		move.l	(sp)+,d0 | ||||
| 		bra	1f | ||||
| sde_l:		adroff | ||||
| 		move.w	(a1),d0 | ||||
| 1:		mov	(sp)+,0(a6,d0) | ||||
| 		mov	(sp)+,word(a6,d0) | ||||
| 		jmp	(a4) | ||||
| ste_qw:		move.l	(sp)+,d0 | ||||
| 		bra	1f | ||||
| ste_lw:		adroff | ||||
| 		move.w	(a1),d0 | ||||
| 		bra	1f | ||||
| ste_w2:		move.w	#512,d0		; bra	0f | ||||
| ste_w1:		move.w	#256,d0		; bra	0f | ||||
| ste_w0:		clr.w	d0 | ||||
| 0:		move.b	(a3)+,d0 | ||||
| 1:		asl.l	wmu,d0 | ||||
| 		mov	(sp)+,0(a6,d0) | ||||
| 		jmp	(a4) | ||||
| 
 | ||||
| !------------------------------------------------------------------------- | ||||
| 
 | ||||
| stf_q:		move.l	(sp)+,a0 | ||||
| 		bra	6f | ||||
| stf_l:		adroff | ||||
| 		move.l	#0,a0 | ||||
| 		move.w	(a1),a0 | ||||
| 		bra	6f | ||||
| stf_2W:		move.l	wrd,a0	;	add.l	a0,a0 | ||||
| 		bra	6f | ||||
| stf_s0:		clr.w	d0 | ||||
| 		move.b	(a3)+,d0 | ||||
| 		move.l	d0,a0 | ||||
| 		bra	6f | ||||
| stf_1W:		move.l	wrd,a0 | ||||
| 6:		add.l	(sp)+,a0 | ||||
| 		mov	(sp)+,(a0) | ||||
| 		jmp	(a4) | ||||
| sdf_q:		move.l	(sp)+,a0 | ||||
| 		bra	7f | ||||
| sdf_l:		adroff | ||||
| 		move.l	d6,a0 | ||||
| 		move.w	(a1),a0 | ||||
| 7:		add.l	(sp)+,a0 | ||||
| 		mov	(sp)+,(a0)+ | ||||
| 		mov	(sp)+,(a0) | ||||
| 		jmp	(a4) | ||||
| 
 | ||||
| 
 | ||||
| !----------------------------------------------------------------------------- | ||||
| sil_w0:		move.w	d6,d0 | ||||
| 		move.b	(a3)+,d0 | ||||
| 		asl.l	wmu,d0 | ||||
| 5:		move.l	16(a2,d0),a0 | ||||
| 		mov	(sp)+,(a0) | ||||
| 		jmp	(a4) | ||||
| sil_w_1:	move.l	#-1,d0 | ||||
| 		move.b	(a3)+,d0 | ||||
| 		asl.l	wmu,d0 | ||||
| 2:		move.l	0(a2,d0),a0 | ||||
| 		mov	(sp)+,(a0) | ||||
| 		jmp	(a4) | ||||
| sil_pw:		adroff | ||||
| 		move.w	(a1),d0 | ||||
| 		bra	5b | ||||
| sil_qpw:	move.l	(sp)+,d0 | ||||
| 		bra	5b | ||||
| sil_nw:		adroff | ||||
| 		move.w	(a1),d0 | ||||
| 		ext.l	d0 | ||||
| 		bra	2b | ||||
| sil_qnw:	move.l	(sp)+,d0 | ||||
| 		bra	2b | ||||
| 
 | ||||
| !---------------------------------------------------------------------------- | ||||
| sti_1:		move.l	(sp)+,a0 | ||||
| 		move.b	word-1(sp),(a0)		!lsb,msb goed? | ||||
| 		add.l	wrd,sp | ||||
| 		jmp	(a4) | ||||
| sti_l:		adroff		;	move.w	(a1),d0	;	bra	0f | ||||
| sti_s0:		clr.w	d0	;	move.b	(a3)+,d0 | ||||
| 0:		asr.l	#1,d0	;	bne	1f | ||||
| 		bcs	sti_1	;	bra	e_oddz | ||||
| 1:		bcs	e_oddz | ||||
| #ifdef	lword | ||||
| 		asr.l	#1,d0	;	bne	2f | ||||
| 		move.l	(sp)+,a0;	lea	2(sp),sp | ||||
| 		move.w	(sp)+,(a0);	jmp	(a4) | ||||
| 2:		bcs	e_oddz | ||||
| #endif | ||||
| 		sub.w	#1,d0	;	bra	3f | ||||
| sti_1W:		sti_2W:		sti_3W:		sti_4W: | ||||
| 		sub.w	#876,d0	;	asr.w	#2,d0 | ||||
| 3:		move.l	(sp)+,a0 | ||||
| 4:		mov	(sp)+,(a0)+ | ||||
| 		dbra	d0,4b | ||||
| 		jmp	(a4) | ||||
| sts_l:		adroff	;		move.w	(a1),d0 | ||||
| 6:		checksize | ||||
| 4:		move.l	(sp)+,d0;	bra	0b | ||||
| 2:		move.w	(sp)+,d0;	bra	0b | ||||
| sts_z:		mov	(sp)+,d0 | ||||
| 		bra	6b | ||||
| 
 | ||||
| !------------------------------------------------------------------------------ | ||||
| !		POINTER ARITHMETIC | ||||
| !------------------------------------------------------------------------------ | ||||
| adp_l:		adroff		;	move.w	(a1),d0 | ||||
| 		ext.l	d0 | ||||
| 		add.l	d0,(sp);	jmp	(a4) | ||||
| adp_q:		move.l	(sp)+,d0 ;	add.l	d0,(sp) | ||||
| 		jmp	(a4) | ||||
| adp_1:		add.l	#1,(sp);	jmp	(a4) | ||||
| adp_2:		add.l	#2,(sp);	jmp	(a4) | ||||
| adp_s0:		move.l	d6,d0	;	move.b	(a3)+,d0 | ||||
| 		add.l	d0,(sp);	jmp	(a4) | ||||
| adp_s_1:	move.l	#-1,d0	;	move.b	(a3)+,d0 | ||||
| 		add.l	d0,(sp)	;	jmp	(a4) | ||||
| ads_l:		adroff		;	move.w	(a1),d0 | ||||
| 		bra	0f | ||||
| ads_z:		mov	(sp)+,d0 | ||||
| 0:		checksize | ||||
| 4:		move.l	(sp)+,d1 ;	add.l	d1,(sp)	;	jmp (a4) | ||||
| 2:		move.w	(sp)+,d1 ;	ext.l	d1 | ||||
| 		add.l	d1,(sp)	;	jmp	(a4) | ||||
| ads_1W:		mov	(sp)+,d0 | ||||
| #ifndef lword | ||||
| 		ext.l	d0 | ||||
| #endif | ||||
| 		add.l	d0,(sp);	jmp	(a4) | ||||
| sbs_l:		adroff		;	move.w	(a1),d0 | ||||
| 		bra	0f | ||||
| sbs_z:		mov	(sp)+,d0		!d0 contains objectsize | ||||
| 0:		checksize | ||||
| 4:		move.l	(sp)+,d1 ;	sub.l	d1,(sp) | ||||
| 		jmp	(a4) | ||||
| 2:		move.l	(sp)+,d1 ;	sub.l	d1,(sp) | ||||
| 		clr.w	(sp)+	;	jmp	(a4) | ||||
							
								
								
									
										236
									
								
								mach/mantra/int/mloop4
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										236
									
								
								mach/mantra/int/mloop4
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,236 @@ | |||
| !---------------------------------------------------------------------------- | ||||
| !		CLEARS , INCREMENTS , DECREMENTS | ||||
| !----------------------------------------------------------------------------- | ||||
| 
 | ||||
| inc_z:		move.l	sp,a0 | ||||
| 4: | ||||
| #if test | ||||
| 		comp	und,(a0) | ||||
| 		bne	3f	;	bsr	e_iund | ||||
| 3: | ||||
| #endif | ||||
| 		ad	#1,(a0)	;	bvs	9f | ||||
| 		jmp	(a4) | ||||
| #ifdef lword | ||||
| inl__1W:	move.l	a2,a0	;	sub.l	#4,a0	;	bra 4b | ||||
| inl__2W:	move.l	a2,a0	;	sub.l	#8,a0	;	bra 4b | ||||
| inl__3W:	move.l	a2,a0	;	sub.l	#12,a0	;	bra 4b | ||||
| #else | ||||
| inl__1W:	move.l	a2,a0	;	sub.l	#2,a0	;	bra 4b | ||||
| inl__2W:	move.l	a2,a0	;	sub.l	#4,a0	;	bra 4b | ||||
| inl__3W:	move.l	a2,a0	;	sub.l	#6,a0	;	bra 4b | ||||
| #endif | ||||
| inl_w_1:	move.l	#-1,d0	;	move.b	(a3)+,d0 | ||||
| 2:		asl.l	wmu,d0 | ||||
| 1:		move.l	a2,a0	;	add.l	d0,a0	;	bra 4b | ||||
| inl_pw:		adroff		;	move.w	(a1),d0 | ||||
| 6:		asl.l	wmu,d0	;	add.l	#16,d0 | ||||
| 		bra	1b  | ||||
| inl_qpw:	move.l	(sp)+,d0 ;	bra	6b | ||||
| inl_nw:		adroff		;	move.w	(a1),d0	 | ||||
| 		ext.l	d0	;	bra	2b | ||||
| inl_qnw:	move.l	(sp)+,d0 ;	bra	2b | ||||
| ine_lw:		adroff		;	move.w	(a1),d0	;	bra 5f | ||||
| ine_qw:		move.l	(sp)+,d0 ;	bra	5f | ||||
| ine_w0:		clr.w	d0	;	move.b	(a3)+,d0 | ||||
| 5:		asl.l	wmu,d0	;	move.l	d0,a0 | ||||
| 		add.l	a6,a0	;	bra	4b | ||||
| 
 | ||||
| !--------------------------------------------------------------------------- | ||||
| 
 | ||||
| dec_z:		move.l	sp,a0 | ||||
| 4: | ||||
| #if test 			 | ||||
| 				!let op , test gebruikt voor tst? | ||||
| 		comp	und,(a0)	;bne	3f | ||||
| 		bsr	e_iund | ||||
| 3: | ||||
| #endif | ||||
| 		subt	#1,(a0)	;	bvs	9f | ||||
| 		jmp	(a4) | ||||
| del_w_1:	move.l	#-1,d0	;	move.b	(a3)+,d0 | ||||
| 1:		asl.l	wmu,d0 | ||||
| 2:		move.l	a2,a0	;	add.l	d0,a0	;	bra 4b | ||||
| del_pw:		adroff		;	move.w	(a1),d0 | ||||
| 5:		asl.l	wmu,d0	;	add.l	#16,d0	;	bra 2b | ||||
| del_qpw:	move.l	(sp)+,d0 ;	bra	5b | ||||
| del_nw:		adroff		;	move.w	(a1),d0 | ||||
| 		ext.l	d0	;	bra	1f | ||||
| del_qnw:	move.l	(sp)+,d0 ;	bra	1f | ||||
| dee_w0:		clr.w	d0	;	move.b	(a3)+,d0 | ||||
| 0:		asl.l	wmu,d0	;	move.l	d0,a0 | ||||
| 		add.l	a6,a0	;	bra	4b | ||||
| dee_lw:		adroff		;	move.w	(a1),d0	;	bra 0b | ||||
| dee_qw:		move.l	(sp)+,d0 ;	bra	0b | ||||
| 
 | ||||
| 9:		bsr	e_iovfl		!error routine for integer overflow | ||||
| 		jmp	(a4) | ||||
| 
 | ||||
| !---------------------------------------------------------------------------- | ||||
| 
 | ||||
| zrl__1W:	cl	l_1(a2)	;	jmp	(a4) | ||||
| zrl__2W:	cl	l_2(a2)	;	jmp	(a4) | ||||
| zrl_w_1:	move.l	#-1,d0	;	move.b	(a3)+,d0 | ||||
| 1:		asl.l	wmu,d0	;	cl	0(a2,d0) | ||||
| 		jmp	(a4) | ||||
| zrl_nw:		adroff		;	move.w	(a1),d0	 | ||||
| 		ext.l	d0	;	bra	1b | ||||
| zrl_qnw:	move.l	(sp)+,d0 ;	bra	1b | ||||
| zrl_pw:		adroff		;	move.w	(a1),d0 | ||||
| 2:		asl.l	wmu,d0	;	cl	16(a2,d0) | ||||
| 		jmp	(a4) | ||||
| zrl_qpw:	move.l	(sp)+,d0 ;	bra	2b | ||||
| zre_lw:		adroff		;	move.w	(a1),d0	;	bra 7f | ||||
| zre_qw:		move.l	(sp)+,d0 ;	bra	7f | ||||
| zre_w0:		clr.w	d0	;	move.b	(a3)+,d0 | ||||
| 7:		asl.l	wmu,d0	;	cl	0(a6,d0) | ||||
| 		jmp	(a4) | ||||
| zrf_l:		adroff		;	move.w	(a1),d0	;	bra 8f | ||||
| zrf_z:		mov	(sp)+,d0 | ||||
| 8:		move.l	d7,d1 | ||||
| 3:		asr.w	#1,d0	;	dbcs	d1,3b | ||||
| 		bcs	e_oddz	;	sub.w	#1,d0 | ||||
| 0:		cl	-(sp)	;	dbra	d0,0b | ||||
| 		jmp	(a4) | ||||
| zer_s0:		clr.w	d0	;	move.b	(a3)+,d0	; bra 8b | ||||
| zer_l:		adroff		;	move.w	(a1),d0	;	bra 8b | ||||
| zer_z:		mov	(sp),d0	;	bra	8b | ||||
| ! The test on illegal argument takes some time , specially in 4byte case. | ||||
| 
 | ||||
| !----------------------------------------------------------------------- | ||||
| !		LOGICAL GROUP  | ||||
| !------------------------------------------------------------------------- | ||||
| 
 | ||||
| and_1W:		mov	(sp)+,d1 | ||||
| 		an	d1,(sp) | ||||
| 		jmp	(a4) | ||||
| and_l:		adroff		;	move.w	(a1),d0	;	bra 1f | ||||
| and_z:		mov	(sp)+,d0 | ||||
| 1:		ble	e_oddz	;	move.l	d0,a0 | ||||
| 		move.l	d7,d2 | ||||
| 2:		asr.l	#1,d0	;	dbcs	d2,2b	;	bcs e_oddz | ||||
| 		add.l	sp,a0	;	sub.l	#1,d0 | ||||
| 3:		mov	(sp)+,d1;	an	d1,(a0)+ | ||||
| 		dbra	d0,3b	;	jmp	(a4) | ||||
| 
 | ||||
| !------------------------------------------------------------------------------ | ||||
| 
 | ||||
| ior_1W:		mov	(sp)+,d1;	inor	d1,(sp) | ||||
| 		jmp	(a4) | ||||
| ior_s0:		clr.w	d0	;	move.b	(a3)+,d0;	bra 4f | ||||
| ior_l:		adroff		;	move.w	(a1),d0	;	bra 4f | ||||
| ior_z:		mov	(sp)+,d0 | ||||
| 4:		ble	e_oddz	;	move.l	d0,a0 | ||||
| 		move.l	d7,d2 | ||||
| 5:		asr.l	#1,d0	;	dbcs	d2,5b	;	bcs e_oddz | ||||
| 		add.l	sp,a0	;	sub.l	#1,d0 | ||||
| 		move.l	d6,d1 | ||||
| 3:		mov	(sp)+,d1 | ||||
| 		inor	d1,(a0)+;	dbra	d0,3b | ||||
| 		jmp	(a4) | ||||
| 
 | ||||
| !---------------------------------------------------------------------------- | ||||
| 
 | ||||
| xor_l:		adroff		;	move.w	(a1),d0	;	bra 6f | ||||
| xor_z:		mov	(sp)+,d0 | ||||
| 6:		ble	e_oddz	;	move.l	d0,a0 | ||||
| 		move.l	d7,d2 | ||||
| 8:		asr.l	#1,d0	;	dbcs	d2,8b	;	bcs e_oddz | ||||
| 		add.l	sp,a0	;	sub.l	#1,d0 | ||||
| 7:		mov	(sp)+,d1 | ||||
| 		exor	d1,(a0)+;	dbra	d0,7b | ||||
| 		jmp	(a4) | ||||
| 
 | ||||
| !---------------------------------------------------------------------------- | ||||
| 
 | ||||
| com_l:		adroff		;	move.w	(a1),d0	;	bra 0f | ||||
| com_z:		mov	(sp)+,d0 | ||||
| 0:		ble	e_oddz	;	move.l	d7,d2 | ||||
| 1:		asr.l	#1,d0	;	dbcs	d2,1b	;	bcs e_oddz | ||||
| 		move.l	sp,a0	;	sub.l	#1,d0 | ||||
| 2:		nt	(a0)+	;	dbra	d0,2b | ||||
| 		jmp	(a4) | ||||
| 
 | ||||
| !--------------------------------------------------------------------------- | ||||
| 
 | ||||
| rol_l:		adroff		;	move.w	(a1),d0	;	bra 3f | ||||
| rol_z:		mov	(sp)+,d0 | ||||
| 3:		ble	e_oddz	;	move.l	d7,d2 | ||||
| 4:		asr.l	#1,d0	;	dbcs	d2,4b | ||||
| 		bcs e_oddz | ||||
| 		sub.l	#1,d0 | ||||
| 		mov	(sp)+,d1 | ||||
| 		bmi	2f | ||||
| 0:		move.l	sp,a0		!d0 = #words-1 , d1 = shift count | ||||
| 5:		mov	(a0),d2	;	rotl	d1,d2 | ||||
| 		mov	d2,(a0)+;	dbra	d0,5b | ||||
| 		jmp	(a4) | ||||
| 2:		nega	d1	;	bra	0f | ||||
| 2:		nega	d1	;	bra	0b | ||||
| ror_l:		adroff		;	move.w	(a1),d0	;	bra 6f | ||||
| ror_z:		mov	(sp)+,d0 | ||||
| 6:		ble	e_oddz	;	move.l	d7,d2 | ||||
| 7:		asr.l	#1,d0	;	dbcs	d2,7b | ||||
| 		bcs	e_oddz	;	sub.l	#1,d0 | ||||
| 		mov	(sp)+,d1 | ||||
| 		bmi	2b | ||||
| 0:		move.l	sp,a0 | ||||
| 8:		mov	(a0),d2	;	rotr	d1,d2 | ||||
| 		mov	d2,(a0)+;	dbra	d0,8b | ||||
| 		jmp	(a4) | ||||
| 
 | ||||
| !----------------------------------------------------------------------------- | ||||
| !		SET GROUP | ||||
| !------------------------------------------------------------------------------ | ||||
| 
 | ||||
| set_s0:		clr.w	d0	;	move.b	(a3)+,d0 | ||||
| 0:		ble	e_oddz	;	clr.l	d1 | ||||
| 		mov	(sp)+,d1;	move.l	d0,d2 | ||||
| 		move.l	d7,d3 | ||||
| 1:		asr.l	#1,d2	;	dbcs	d3,1b | ||||
| 		bcs	e_oddz	;	sub.l	#1,d2 | ||||
| 2:		cl	-(sp)	;	dbra	d2,2b | ||||
| 		move.l	sp,a0	;	move.l	d1,d2 | ||||
| 		asr.l	#3,d2	;	cmp.l	d0,d2		!d2 byte number | ||||
| 		bmi	3f	;	bsr	e_set | ||||
| 		jmp	(a4) | ||||
| 3: | ||||
| #ifdef lword | ||||
| 		bchg	#1,d2					!0->3,1->2 | ||||
| #endif | ||||
| 		bchg	#0,d2	;	add.l	d2,a0 | ||||
| 		bset	d1,(a0)	;	jmp	(a4)	!d1 mod 8 bit set | ||||
| set_l:		adroff		;	move.w	(a1),d0 ;	bra 0b | ||||
| set_z:		mov	(sp)+,d0;	bra	0b | ||||
| 
 | ||||
| !---------------------------------------------------------------------------- | ||||
| 
 | ||||
| inn_s0:		clr.w	d0	;	move.b	(a3)+,d0 | ||||
| 0:		ble	e_oddz | ||||
| 		move.l	d6,d1	;	mov	(sp)+,d1 | ||||
| 		btst	#0,d0	;	bne	e_oddz | ||||
| #ifdef lword | ||||
| 		btst	#1,d0	;	bne	e_oddz | ||||
| #endif | ||||
| 		move.l	sp,a0	;	add.l	d0,sp | ||||
| 		move.l	d1,d2	;	asri	#3,d2 | ||||
| 		comp	d2,d0	;	bhi	3f | ||||
| 		cl	-(sp) | ||||
| !#if test | ||||
| !		bsr	e_set | ||||
| !#endif | ||||
| 		jmp	(a4) | ||||
| 3: | ||||
| #ifdef	lword | ||||
| 		bchg	#1,d2 | ||||
| #else | ||||
| 		ext.l	d2 | ||||
| #endif | ||||
| 		bchg	#0,d2	;	add.l	d2,a0 | ||||
| 		btst	d1,(a0)	;	beq	7f | ||||
| 		mov	#1,-(sp);	jmp	(a4) | ||||
| 7:		cl	-(sp)	;	jmp	(a4) | ||||
| inn_l:		adroff		;	move.w	(a1),d0	;	bra 0b | ||||
| inn_z:		mov	(sp)+,d0;	bra	0b | ||||
| 
 | ||||
| 
 | ||||
							
								
								
									
										186
									
								
								mach/mantra/int/mloop5
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										186
									
								
								mach/mantra/int/mloop5
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,186 @@ | |||
| !-----------------------------------------------------------------------------. | ||||
| !		ARRAY GROUP | ||||
| !------------------------------------------------------------------------------- | ||||
| !subroutine | ||||
| calcarr:	move.l	(sp)+,d3	!save return address | ||||
| 		move.l	(sp)+,a0	!address of array describtor | ||||
| 		mov	(sp)+,d0	!index | ||||
| 		subt	(a0)+,d0	!relative address | ||||
| 		blt	9f | ||||
| 		comp	(a0)+,d0	!check upper bound | ||||
| 		bgt	9f | ||||
| 		move.l	#0,d1 | ||||
| 		mov	(a0),d1 | ||||
| 		mulu	d1,d0		!objectsize in d1 | ||||
| 		move.l	(sp)+,a0 | ||||
| 		ad	d0,a0		!a0 address of array element | ||||
| 		move.l	d3,-(sp) | ||||
| 		rts | ||||
| 9:		bsr	e_array	;tst.l  (sp)+ ;	jmp	(a4) | ||||
| 
 | ||||
| aar_1W:		bsr	calcarr	;	move.l	a0,-(sp) | ||||
| 		jmp	(a4) | ||||
| aar_l:		adroff		;	cmp.w	wrd,(a1) | ||||
| 0:		bne	e_illins ;	bra	aar_1W | ||||
| aar_z:		comp	wrd,(sp)+  ;	bra	0b | ||||
| 
 | ||||
| lar_1W:		bsr	calcarr	;	add.l	d1,a0 | ||||
| 		asr.w	#1,d1	;	bcc	5f | ||||
| 		clr.l	d1	;	move.b	-(a0),d1  | ||||
| 		mov	d1,-(sp);	jmp	(a4) | ||||
| 5: | ||||
| #ifdef lword | ||||
| 		asr.w	#1,d1	;	bcc	6f | ||||
| 		move.w	-(a0),d1;	move.l	d1,-(sp) | ||||
| 		jmp	(a4) | ||||
| #endif | ||||
| 6:		sub.l	#1,d1 | ||||
| 7:		mov	-(a0),-(sp);	dbra	d1,7b | ||||
| 		jmp	(a4) | ||||
| 
 | ||||
| lar_l:		adroff		;	cmp.w	wrd,(a1) | ||||
| 8:		bne	e_illins;	bra	lar_1W | ||||
| lar_z:		comp	wrd,(sp)+ ;	bra	8b | ||||
| 
 | ||||
| sar_1W:		bsr	calcarr	;	asr.w	#1,d1 | ||||
| 		bcc	5f	;	testen	(sp)+ | ||||
| 		move.b	-1(sp),(a0);	jmp	(a4) | ||||
| 5: | ||||
| #ifdef lword | ||||
| 		asr.w	#1,d1	;	bcc	6f | ||||
| 		tst.w	(sp)+	;	move.w	(sp)+,(a0) | ||||
| 		jmp	(a4) | ||||
| #endif | ||||
| 6:		sub.l	#1,d1 | ||||
| 7:		mov (sp)+,(a0)+	;	dbra	d1,7b | ||||
| 		jmp	(a4) | ||||
| sar_z:		comp	wrd,(sp)+ ;	bra	1f | ||||
| sar_l:		adroff		;	cmp.w	wrd,(a1) | ||||
| 1:		bne	e_illins ;	bra	sar_1W | ||||
| 
 | ||||
| !------------------------------------------------------------------------- | ||||
| !		 CONVERT GROUP | ||||
| !-------------------------------------------------------------------------w | ||||
| 
 | ||||
| cii_z:		mov	(sp)+,d0 ;	mov	(sp)+,d1 ;  !d0 destination size | ||||
| 							!d1 source size | ||||
| #if test | ||||
| 		cmp.w	wrd,d1	;	bne	0f | ||||
| 		comp	und,(sp) ;	bne	0f | ||||
| 		bsr	e_iund | ||||
| #endif | ||||
| 0:		cmp.w	d0,d1	;	bne	1f	;	jmp (a4) | ||||
| 1:		bge	6f	;	mov	(sp)+,d2 | ||||
| 		cmp.w	#1,d1	;	bne	3f		!d1<d0 | ||||
| 		ext.w	d2 | ||||
| #ifndef lword | ||||
| 		cmp.w	#2,d0	;	bne	3f | ||||
| 		move.w	d2,-(sp);	jmp	(a4) | ||||
| #endif | ||||
| 3:		ext.l	d2	;	move.l	d2,-(sp);	jmp (a4) | ||||
| 6: | ||||
| #ifdef lword | ||||
| 		bsr	e_conv	;	add.l	#4,sp | ||||
| #else | ||||
| 		move.w	(sp)+,d2 | ||||
| #if test | ||||
| 		bne	7f	;	tst.w	(sp)	;	bge 9f | ||||
| 8:		bsr	e_conv	;	jmp	(a4) | ||||
| 7:		comp	#-1,d2	;	bne	8b | ||||
| 		tst.w	(sp)	;	bge	8b | ||||
| #endif | ||||
| #endif | ||||
| 9:		jmp	(a4) | ||||
| 
 | ||||
| cui_z:		mov	(sp)+,d0 ;	mov	(sp)+,d1 | ||||
| 		sub.w	d1,d0	;	bne	2f | ||||
| #if test | ||||
| 		testen	(sp)	;	bpl	1f | ||||
| 0:		bsr	e_conv | ||||
| #endif | ||||
| 1:		jmp	(a4) | ||||
| 2: | ||||
| #ifdef lword | ||||
| 		sub.l	d0,sp	;	bsr	e_conv | ||||
| #else | ||||
| 		bgt	3f	;	cmp.w	#-2,d0	;	beq 5f | ||||
| 		bsr	e_conv | ||||
| #if test | ||||
| 		tst.w	(sp)	;	bne	0b | ||||
| 		tst.w	2(sp)	;	bmi	0b | ||||
| #endif | ||||
| 5:		sub.l	#-2,sp	;	jmp	(a4) | ||||
| 3:		cmp.w	#2,d0	;	beq	4f | ||||
| 		bsr	e_conv | ||||
| 4:		clr.w	-(sp) | ||||
| #endif | ||||
| 		jmp	(a4) | ||||
| 
 | ||||
| ciu_z:		mov	(sp)+,d0 ;	mov	(sp)+,d1 | ||||
| #if test | ||||
| 		cmp.w	wrd,d1	;	bne	0f | ||||
| 		comp	und,(sp) ;	bne	0f | ||||
| 		bsr	e_iund | ||||
| #endif | ||||
| 0:		sub.w	d1,d0	;	bne	1f | ||||
| 		jmp	(a4) | ||||
| #ifndef lword | ||||
| 1:		bgt	4f	;	cmp.w	#-2,d0 | ||||
| 		beq	5f	;	bsr	e_conv | ||||
| 5: | ||||
| #if test | ||||
| 		move.w	(sp),d1	;	beq	6f | ||||
| 		not.w	d1	;	beq	6f | ||||
| 		bsr	e_conv | ||||
| #endif | ||||
| 6:		add.l	#2,sp	;	jmp	(a4) | ||||
| #endif | ||||
| 4:	1:	bclr	#0,d0	;	beq	2f | ||||
| #ifdef lword | ||||
| 		clr.b	2(sp) | ||||
| #else | ||||
| 		clr.b	(sp) | ||||
| #endif | ||||
| 2:		bclr	#1,d0	;	beq	3f | ||||
| #ifdef lword | ||||
| 		clr.w	(sp) | ||||
| #else | ||||
| 		clr.w	-(sp) | ||||
| #endif | ||||
| 3:		jmp	(a4) | ||||
| 
 | ||||
| cuu_z:		mov	(sp)+,d0 ;	mov	(sp)+,d1 | ||||
| 		sub.w	d1,d0	;	bne	1f | ||||
| 		jmp	(a4) | ||||
| 1: | ||||
| #ifdef lword | ||||
| 		bsr	e_conv	;	sub.l	d0,sp | ||||
| #else | ||||
| 		blt	3f | ||||
| #if test | ||||
| 			cmp.w	#2,d0	;	beq	2f | ||||
| 		bsr	e_conv | ||||
| #endif | ||||
| 2:		clr.w	-(sp)	;	jmp	(a4) | ||||
| 3: | ||||
| #if test | ||||
| 		cmp.w	#-2,d0	;	beq	4f | ||||
| 		bsr	e_conv | ||||
| #endif | ||||
| 4:		tst.w	(sp)+ | ||||
| #if test | ||||
| 		beq	5f	;	bsr	e_conv | ||||
| #endif | ||||
| #endif | ||||
| 5:		jmp	(a4) | ||||
| 
 | ||||
| !-------------------------------------------------------------------------- | ||||
| cuf_z:		cfu_z:		cff_z:		cfi_z:		cif_z: | ||||
| 		mov	(sp)+,d0 ;	subt	(sp)+,d0 | ||||
| 		ext.l	d0 | ||||
| 		sub.l	d0,sp	 | ||||
| #ifdef FLTRAP | ||||
| 		bra	flnim			!floating point not implemented | ||||
| #else | ||||
| 		jmp	(a4) | ||||
| #endif | ||||
							
								
								
									
										362
									
								
								mach/mantra/int/mloop6
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										362
									
								
								mach/mantra/int/mloop6
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,362 @@ | |||
| !---------------------------------------------------------------------------- | ||||
| !		SIGNED INTEGER ARITHMETIC | ||||
| !------------------------------------------------------------------------------ | ||||
| 
 | ||||
| adi_l:		adroff		;	move.w	(a1),d0	;	bra 1f | ||||
| adi_z:		mov	(sp)+,d0 | ||||
| 1:		sub.w	wrd,d0	;	beq	adi_1W | ||||
| 		sub.w	wrd,d0	;	beq	adi_2W | ||||
| 		bra	e_oddz | ||||
| adi_1W: | ||||
| #if test | ||||
| 		comp	und,(sp) ;	beq	6f | ||||
| 		comp	und,word(sp);	bne	7f | ||||
| 6:		bsr	e_iund | ||||
| #endif | ||||
| 7:		mov	(sp)+,d0 ;	ad	d0,(sp) | ||||
| #if test | ||||
| 		bvs	9f | ||||
| #endif | ||||
| 		jmp	(a4) | ||||
| adi_2W: | ||||
| #ifdef lword | ||||
| 		bsr	no8bar	;	add.l	#8,sp | ||||
| 		jmp	(a4) | ||||
| #else | ||||
| 		move.l	(sp)+,d0 ;	add.l	d0,(sp) | ||||
| #endif | ||||
| #if test | ||||
| 		bvs	9f | ||||
| #endif | ||||
| 		jmp	(a4) | ||||
| 
 | ||||
| !-------------------------------------------------------------------------- | ||||
| 
 | ||||
| sbi_z:		mov	(sp)+,d0 ;	bra	1f | ||||
| sbi_l:		adroff		;	move.w	(a1),d0 | ||||
| 1:		sub.w	wrd,d0	;	beq	sbi_1W | ||||
| 		sub.w	wrd,d0	;	beq	sbi_2W | ||||
| 		bra	e_oddz | ||||
| sbi_1W: | ||||
| #if test  | ||||
| 		comp	und,(sp) ;	beq	6f | ||||
| 		comp	und,word(sp) ; bne	7f | ||||
| 6:		bsr	e_iund | ||||
| #endif | ||||
| 7:		mov	(sp)+,d0 ;	subt	d0,(sp) | ||||
| #if test | ||||
| 		bvs	9f | ||||
| #endif | ||||
| 		jmp	(a4) | ||||
| sbi_2W: | ||||
| #ifdef lword | ||||
| 		add.l	#8,sp	;	bsr	no8bar | ||||
| 		jmp	(a4) | ||||
| #else | ||||
| 		move.l	(sp)+,d0 ;	sub.l	d0,(sp) | ||||
| #endif | ||||
| #if test | ||||
| 		bvs	9f | ||||
| #endif | ||||
| 		jmp	(a4) | ||||
| 9:		bsr	e_iovfl ;	jmp	(a4) | ||||
| 
 | ||||
| !---------------------------------------------------------------------------- | ||||
| 
 | ||||
| mli_z:		mov	(sp)+,d0 ;	bra	0f | ||||
| mli_l:		adroff		;	move.w	(a1),d0 | ||||
| 0:		sub.w	wrd,d0	;	beq	mli_1W | ||||
| 		sub.w	wrd,d0	;	beq	mli_2W | ||||
| 		bra	e_oddz | ||||
| mli_1W:		mov	(sp)+,d0 | ||||
| #if test | ||||
| 		comp	und,d0 ;	beq	1f | ||||
| 		comp	und,(sp) ;	bne	2f | ||||
| 1:		bsr	e_iund | ||||
| #endif | ||||
| 2: | ||||
| #ifdef lword | ||||
| 		move.l	(sp)+,d1 ;	bra	4f | ||||
| #else | ||||
| 		muls	(sp),d0 ;	move.w	d0,(sp) | ||||
| #if test | ||||
| 		bpl	3f	;	not.l	d0 | ||||
| 3:		swap	d0	;	tst.w	d0	;	bne 9b | ||||
| #endif | ||||
| 		jmp	(a4) | ||||
| #endif | ||||
| mli_2W: | ||||
| #ifdef lword | ||||
| 		bsr	no8bar	;	add.l	#4,sp | ||||
| 		move.l	(sp)+,d0 ;	add.l	#4,sp | ||||
| 		move.l	(sp)+,d1 | ||||
| #else | ||||
| 		move.l	(sp)+,d0 ;	move.l	(sp)+,d1 | ||||
| #endif | ||||
| 4:		clr.w	d5	;	tst.l	d0	;	bpl 5f | ||||
| 		neg.l	d0	;	not.w	d5 | ||||
| 5:		tst.l	d1	;	bpl	6f | ||||
| 		neg.l	d1	;	not.w	d5 | ||||
| 6:		bsr	mlu4 | ||||
| #if test  | ||||
| 		tst.l	d4	;	bne	7f | ||||
| 		tst.l	d0	;	bpl	8f | ||||
| 7:		bsr	e_iovfl | ||||
| #endif | ||||
| 8:		tst.w	d5	;	beq	0f | ||||
| 		neg.l	d0 | ||||
| 0:		move.l	d0,-(sp)  | ||||
| !next 4 lines only in case 8 byte arithmetic | ||||
| !#ifdef lword | ||||
| !		bmi	1f	;	clr.l	-(sp)	;	bra 2f | ||||
| !1:		move.l	#-1,-(sp) | ||||
| !#endif | ||||
| 2:		jmp	(a4) | ||||
| 
 | ||||
| !subroutine for unsigned 4byte multiplication . Expects multiplier in d0 and | ||||
| ! multiplicant in d1 . Returns 4 byte result in d0 . If d4=0 overflow did  | ||||
| ! not occur on the multiplication , else it did . | ||||
| 
 | ||||
| 	.define mlu4 | ||||
| 	.text | ||||
| 
 | ||||
| mlu4:		move.l	d1,d3	;	move.l	d0,d2 | ||||
| 		swap	d2	;	swap	d3 | ||||
| #if test | ||||
| 		move.l	d3,d4	;	mulu	d2,d4 | ||||
| #endif | ||||
| 		mulu	d0,d3	;	swap	d3 | ||||
| 		mulu	d1,d2	;	swap	d2 | ||||
| #if test | ||||
| 		or.w	d3,d4	;	or.w	d2,d4 | ||||
| #endif | ||||
| 		clr.w	d3	;	clr.w	d2 | ||||
| 		mulu	d1,d0	;	add.l	d3,d0 | ||||
| #if test | ||||
| 		bvc	1f	;	bset	#0,d4 | ||||
| #endif | ||||
| 1:		add.l	d2,d0 | ||||
| #if test | ||||
| 		bvc	2f	;	bset	#0,d4 | ||||
| #endif | ||||
| 2:		rts | ||||
| 
 | ||||
| !--------------------------------------------------------------------------- | ||||
| 
 | ||||
| dvi_z:		mov	(sp)+,d0 ;	bra	0f | ||||
| dvi_l:		adroff		;	move.w	(a1),d0 | ||||
| 0:		sub.w	wrd,d0	;	beq	dvi_1W | ||||
| 		sub.w	wrd,d0	;	beq	dvi_2W | ||||
| 		bra	e_oddz | ||||
| dvi_1W: | ||||
| #ifdef lword | ||||
| 		bsr	dvi4	;	move.l	d1,-(sp) | ||||
| #else | ||||
| 		bsr	dvi2	;	move.w	d1,-(sp) | ||||
| #endif | ||||
| 		jmp	(a4) | ||||
| dvi_2W: | ||||
| #ifdef lword | ||||
| 		bsr	no8bar	;	tst.l	(sp)+ | ||||
| 		move.l	(sp)+,(sp) ;	bsr	dvi4 | ||||
| 		move.l	d1,-(sp) ;	clr.l	-(sp) | ||||
| #else | ||||
| 		bsr	dvi4	;	move.l	d1,-(sp) | ||||
| #endif | ||||
| 		jmp	(a4) | ||||
| 
 | ||||
| rmi_z:		mov	(sp)+,d0 ;	bra	1f | ||||
| rmi_l:		adroff		;	move.w	(a1),d0 | ||||
| 1:		sub.l	wrd,d0	;	beq	rmi_1W | ||||
| 		sub.l	wrd,d0	;	beq	rmi_2W | ||||
| 		bra	e_oddz | ||||
| rmi_1W: | ||||
| #ifdef lword | ||||
| 		bsr	dvi4	;	move.l	d3,-(sp) | ||||
| #else | ||||
| 		bsr	dvi2	;	swap	d1 | ||||
| 		move.w	d1,-(sp) | ||||
| #endif | ||||
| 		jmp	(a4) | ||||
| rmi_2W: | ||||
| #ifdef lword | ||||
| 		bsr	no8bar	;	tst.l	(sp)+ | ||||
| 		move.l	(sp)+,(sp) ;	bsr	dvi4 | ||||
| 		move.l	d3,-(sp) ;	clr.l	-(sp) | ||||
| #else | ||||
| 		bsr	dvi4	;	move.l	d3,-(sp) | ||||
| #endif | ||||
| 		jmp	(a4) | ||||
| 
 | ||||
| ! 2byte division . In d1: quotient=low word ; remainder=high word | ||||
| dvi2:		move.l	(sp)+,d2 | ||||
| 		move.w	(sp)+,d0				!divisor | ||||
| 		move.w	(sp)+,d1 ;	ext.l	d1		!dividend | ||||
| #if test | ||||
| 		cmp.w	und,d1	;	bne	1f | ||||
| 		bsr	e_iund | ||||
| 1:		cmp.w	und,d0	;	bne	2f | ||||
| 		bsr	e_iund | ||||
| 2:		tst.w	d0	;	bne	3f | ||||
| 		bsr	e_idivz	;	move.l	und,d1	;	bra 4f | ||||
| 3: | ||||
| #endif | ||||
| 		divs	d0,d1 | ||||
| 4:		move.l	d2,-(sp) ;	rts | ||||
| 
 | ||||
| ! long signed division . quotient in d1 , remainder in d3 | ||||
| dvi4:		move.l	(sp)+,d5 | ||||
| 		move.l	(sp)+,d0		!divisor | ||||
| 		move.l	(sp)+,d1		!dividend | ||||
| #ifdef lword | ||||
| 		cmp.l	und,d0	;	beq	0f | ||||
| 		cmp.l	und,d1	;	bne	1f | ||||
| 0:		bsr	e_iund | ||||
| 1: | ||||
| #endif | ||||
| 		clr.l	d4			!sign in d4 | ||||
| 		tst.l	d0	;	bpl	1f | ||||
| 		neg.l	d0	;	not.w	d4 | ||||
| 1:		tst.l	d1	;	bpl	2f | ||||
| 		neg.l	d1 | ||||
| 		not.w	d4	;	swap	d4 | ||||
| 		not.w	d4	;	swap	d4 | ||||
| 2:		bsr	dvu4 | ||||
| 		tst.w	d4	;	beq	3f | ||||
| 		neg.l	d1			!quotient | ||||
| 3:		tst.l	d4	;	bpl	4f | ||||
| 		neg.l	d3				!remainder | ||||
| 4:		move.l	d5,-(sp) ;	rts | ||||
| 
 | ||||
| !Expects d0 divisor , d1 dividend. Gives d1 quotient ,d3 remainder | ||||
| 
 | ||||
| 	.define	dvu4 | ||||
| 	.text | ||||
| dvu4: | ||||
| #if test | ||||
| 		tst.l	d0	;	bne	1f | ||||
| 		bsr	e_idivz | ||||
| 1: | ||||
| #endif | ||||
| 		clr.l	d3	;	move.l	#32,d2 | ||||
| 3:		lsl.l	#1,d1	;	roxl.l	#1,d3 | ||||
| 		cmp.l	d0,d3	;	blt	4f | ||||
| 		sub.l	d0,d3	;	add.l	#1,d1 | ||||
| 4:		sub.w	#1,d2	;	bgt	3b | ||||
| 		rts | ||||
| 
 | ||||
| !---------------------------------------------------------------------------- | ||||
| 
 | ||||
| ngi_z:		mov	(sp)+,d0 ;	bra	0f | ||||
| ngi_l:		adroff		;	move.w	(a1),d0 | ||||
| 0:		sub.l	wrd,d0	;	bne	2f | ||||
| #if test | ||||
| 		comp	und,(sp) ;	bne	1f | ||||
| 		bsr	e_iund | ||||
| 1: | ||||
| #endif | ||||
| 		nega	(sp)	;	jmp	(a4) | ||||
| 2:		cmp.l	wrd,d0	;	beq	3f | ||||
| 		bra	e_oddz | ||||
| 3: | ||||
| #ifdef lword | ||||
| 		bsr	no8bar	;	not.l	(sp) | ||||
| 		neg.l	4(sp) | ||||
| #else | ||||
| 		neg.l	(sp) | ||||
| #endif | ||||
| #if test | ||||
| 		bvc	4f	;	bsr	e_iovfl | ||||
| 4: | ||||
| #endif | ||||
| 		jmp	(a4) | ||||
| 
 | ||||
| !-------------------------------------------------------------------------- | ||||
| 
 | ||||
| sli_z:		mov	(sp)+,d0 ;	bra	0f | ||||
| sli_l:		adroff		;	move.w	(a1),d0 | ||||
| 0:		sub.w	wrd,d0	;	beq	sli_1W | ||||
| 		sub.w	wrd,d0	;	beq	sli2 | ||||
| 		bra	e_oddz | ||||
| sli_1W:		mov	(sp)+,d0 	!d0 contains the shift count | ||||
| 		bmi	5f | ||||
| 9:		mov	(sp)+,d1		!integer to shift  | ||||
| #if test | ||||
| 		comp	und,d0	;	bne	1f | ||||
| 		bsr	e_iund | ||||
| 1: | ||||
| #endif | ||||
| 		asle	d0,d1			! ASLE | ||||
| #if test | ||||
| 		bvc	2f	;	bsr	e_iovfl | ||||
| 2: | ||||
| #endif | ||||
| 		mov	d1,-(sp) ;	jmp	(a4) | ||||
| sli2: | ||||
| #ifdef lword | ||||
| 		bsr	no8bar	;	move.l	(sp)+,d1 | ||||
| 		move.l	(sp)+,d2 ;	move.l	(sp)+,d0 | ||||
| 3:		asl.l	#1,d0	;	roxl.l	#1,d2 | ||||
| 		sub.l	#1,d1	;	bgt	3b | ||||
| 		move.l	d0,-(sp) ;	move.l	d2,-(sp) | ||||
| #else | ||||
| 		move.w	(sp)+,d0  | ||||
| 		bmi	6f | ||||
| 8:		move.l	(sp),d1 | ||||
| 		asl.l	d0,d1 | ||||
| #if test | ||||
| 		bvc	4f	;	bsr	e_iovfl | ||||
| 4: | ||||
| #endif | ||||
| 		move.l	d1,(sp) | ||||
| #endif | ||||
| 		jmp	(a4) | ||||
| 5:		nega	d0	;	bra	8f | ||||
| #ifndef	lword | ||||
| 6:		neg.w	d0	;	bra	9f | ||||
| #endif | ||||
| 
 | ||||
| !------------------------------------------------------------------------------ | ||||
| 7:		nega	d0	;	bra	9b | ||||
| #ifndef	lword | ||||
| 6:		neg.w	d0	;	bra	8b | ||||
| #endif | ||||
| 
 | ||||
| sri_z:		mov	(sp)+,d0 ;	bra	0f | ||||
| sri_l:		adroff		;	move.w	(a1),d0 | ||||
| 0:		sub.w	wrd,d0	;	bne	sri2 | ||||
| 		mov	(sp)+,d0  | ||||
| 		bmi	7b | ||||
| 8:		mov	(sp)+,d1 | ||||
| #if test | ||||
| 		comp	und,d0	;	bne	1f | ||||
| 		bsr	e_iund | ||||
| 1: | ||||
| #endif | ||||
| 		asri	d0,d1 | ||||
| #if test | ||||
| 		bvc	2f	;	bsr	e_iovfl | ||||
| 2: | ||||
| #endif | ||||
| 		mov	d1,-(sp) ;	jmp	(a4) | ||||
| sri2:		sub.w	wrd,d0	;	beq	3f | ||||
| 		bra	e_oddz | ||||
| 3: | ||||
| #ifdef lword | ||||
| 		bsr	no8bar	;	move.l	(sp)+,d1 | ||||
| 		move.l	(sp)+,d2 ;	move.l	(sp),d0 | ||||
| 		sub.l	#1,d1 | ||||
| 4:		asr.l	#1,d2	;	roxr.l	#1,d0	;	dbra d1,4b | ||||
| 		move.l	d0,(sp) ;	move.l	d2,-(sp) | ||||
| #else | ||||
| 		move.w	(sp)+,d0  | ||||
| 		bmi	6b | ||||
| 9:		move.l	(sp),d1 | ||||
| 		asr.l	d0,d1 | ||||
| #if test | ||||
| 		bvc	5f	;	bsr	e_iovfl | ||||
| 5: | ||||
| #endif | ||||
| 		move.l	d1,(sp) | ||||
| #endif | ||||
| 		jmp	(a4) | ||||
							
								
								
									
										120
									
								
								mach/mantra/int/mloop7
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										120
									
								
								mach/mantra/int/mloop7
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,120 @@ | |||
| !------------------------------------------------------------------------------ | ||||
| !		UNSIGNED ARITHMETIC | ||||
| !----------------------------------------------------------------------------- | ||||
| 
 | ||||
| adu_z:		mov	(sp)+,d0 ;	bra	0f | ||||
| adu_l:		adroff		;	move.w	(a1),d0 | ||||
| 0:		checksize | ||||
| 2:		move.w	(sp)+,d1 ;	add.w	d1,(sp) | ||||
| 		jmp	(a4) | ||||
| 4:		move.l	(sp)+,d1;	add.l	d1,(sp) | ||||
| 		jmp	(a4) | ||||
| 
 | ||||
| sbu_z:		mov	(sp)+,d0 ;	bra	0f | ||||
| sbu_l:		adroff		;	move.w	(a1),d0 | ||||
| 0:		checksize | ||||
| 2:		move.w	(sp)+,d1 ;	sub.w	d1,(sp) | ||||
| 		jmp	(a4) | ||||
| 4:		move.w	(sp)+,d1 ;	sub.l	d1,(sp) | ||||
| 		jmp	(a4) | ||||
| 
 | ||||
| !------------------------------------------------------------------------------ | ||||
| 
 | ||||
| mlu_z:		mov	(sp)+,d0 ;	bra	0f | ||||
| mlu_l:		adroff		;	move.w	(a1),d0 | ||||
| 0:		checksize | ||||
| 2:		move.w	(sp)+,d0 ;	mulu	(sp),d0 | ||||
| 		move.w	d0,(sp)	;	jmp	(a4) | ||||
| 4:		move.l	(sp)+,d0 ;	move.l	(sp),d1 | ||||
| 		bsr	mlu4	;	move.l	d0,(sp) | ||||
| 		jmp	(a4) | ||||
| 
 | ||||
| !---------------------------------------------------------------------------- | ||||
| 
 | ||||
| dvu_z:		mov	(sp)+,d0 ;	bra	0f | ||||
| dvu_l:		adroff		;	move.w	(a1),d0 | ||||
| 0:		checksize | ||||
| 2:		move.w	(sp)+,d1 ;	beq	3f | ||||
| 		move.w	(sp),d0 ;	divu	d1,d0 | ||||
| 		move.w	d0,(sp) ;	jmp	(a4) | ||||
| 3:		bsr	e_idivz	;	move.w	#-1,(sp) | ||||
| 		jmp	(a4) | ||||
| 4:		move.l	(sp)+,d0 ;	move.l	(sp),d1 | ||||
| 		bsr	dvu4	;	move.l	d1,(sp) | ||||
| 		jmp	(a4) | ||||
| 
 | ||||
| !---------------------------------------------------------------------------- | ||||
| 
 | ||||
| rmu_z:		mov	(sp)+,d0 ;	bra	0f | ||||
| rmu_l:		adroff		;	move.w	(a1),d0 | ||||
| 0:		checksize | ||||
| 2:		move.w	(sp)+,d1 ;	beq	3f | ||||
| 		move.w	(sp),d0 ;	divu	d1,d0 | ||||
| 		swap	d0	;	move.w	d0,(sp) | ||||
| 		jmp	(a4) | ||||
| 3:		bsr	e_idivz	;	clr.w	(sp) | ||||
| 		jmp	(a4) | ||||
| 4:		move.l	(sp)+,d0 ;	move.l	(sp),d1 | ||||
| 		bsr	dvu4	;	move.l	d3,(sp) | ||||
| 		jmp	(a4) | ||||
| 
 | ||||
| !------------------------------------------------------------------------. | ||||
| 
 | ||||
| slu_z:		mov	(sp)+,d0 ;	bra	0f | ||||
| slu_l:		adroff		;	move.w	(a1),d0 | ||||
| 0:		checksize | ||||
| 2:		move.w	(sp)+,d0  | ||||
| 		bmi	7f | ||||
| 3:		move.w	(sp),d1 | ||||
| 		lsl.w	d0,d1	;	move.w	d1,(sp) | ||||
| 		jmp	(a4) | ||||
| 4:		mov	(sp)+,d0  | ||||
| 		bmi	9f | ||||
| 5:		move.l	(sp),d1 | ||||
| 		lsl.l	d0,d1	;	move.l	d1,(sp) | ||||
| 		jmp	(a4) | ||||
| 
 | ||||
| 7:		neg.w	d0	;	bra	3f | ||||
| 9:		nega	d0	;	bra	5f | ||||
| 7:		neg.w	d0	;	bra	3b | ||||
| 9:		nega	d0	;	bra	5b | ||||
| 
 | ||||
| sru_z:		mov	(sp)+,d0 ;	bra	0f | ||||
| sru_l:		adroff		;	move.w	(a1),d0 | ||||
| 0:		checksize | ||||
| 2:		move.w	(sp)+,d0  | ||||
| 		bmi	7b | ||||
| 3:		move.w	(sp),d1 | ||||
| 		lsr.w	d0,d1	;	move.w	d1,(sp) | ||||
| 		jmp	(a4) | ||||
| 4:		mov	(sp)+,d0  | ||||
| 		bmi	9b | ||||
| 5:		move.l	(sp),d1 | ||||
| 		lsr.l	d0,d1	;	move.l	d1,(sp) | ||||
| 		jmp	(a4) | ||||
| 
 | ||||
| !------------------------------------------------------------------------------ | ||||
| !	DUMMY FLOATING POINT ROUTINES | ||||
| !------------------------------------------------------------------------------ | ||||
| adf_l:	sbf_l:	mlf_l:	dvf_l: | ||||
| 		adroff		;	move.w	(a1),d0 | ||||
| 1:		add.l	d0,sp	 | ||||
| #ifdef FLTRAP | ||||
| 		bra	flnim | ||||
| #else | ||||
| 		jmp	(a4) | ||||
| #endif | ||||
| adf_z:	sbf_z:	mlf_z:	dvf_z: | ||||
| 		mov	(sp)+,d0 ;	bra	1b | ||||
| adf_s0:	sbf_s0:	mlf_s0:	dvf_s0: | ||||
| 		move.l	#0,d0	;	move.b	(a3)+,d0 | ||||
| 		bra	1b | ||||
| fef_l:		sub.l	wrd,sp | ||||
| fif_l:	ngf_l:	adroff | ||||
| fef_z:	 | ||||
| #ifdef FLTRAP | ||||
| 		bra	flnim | ||||
| #else | ||||
| 		jmp	(a4) | ||||
| #endif | ||||
| ngf_z:	fif_z:	add.l	wrd,sp	;	bra	fef_z | ||||
							
								
								
									
										234
									
								
								mach/mantra/int/mloop8
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										234
									
								
								mach/mantra/int/mloop8
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,234 @@ | |||
| !------------------------------------------------------------------------- | ||||
| !		TEST AND BRANCH GROUP | ||||
| !------------------------------------------------------------------------- | ||||
| 
 | ||||
| tlt_z:	testen	(sp)+	; blt	true	; cl	-(sp)	; jmp	(a4) | ||||
| tle_z:	testen	(sp)+	; ble	true	; cl	-(sp)	; jmp	(a4) | ||||
| teq_z:	testen	(sp)+	; beq	true	; cl	-(sp)	; jmp	(a4) | ||||
| tne_z:	testen	(sp)+	; bne	true	; cl	-(sp)	; jmp	(a4) | ||||
| tge_z:	testen	(sp)+	; bge	true	; cl	-(sp)	; jmp	(a4) | ||||
| tgt_z:	testen	(sp)+	; bgt	true	; cl	-(sp)	; jmp	(a4) | ||||
| 
 | ||||
| true:		mov	#1,-(sp) ;	jmp	(a4) | ||||
| 
 | ||||
| zlt_s0:		testen	(sp)+	;	blt	bra_s0	; bra nobr2 | ||||
| zlt_l:		testen	(sp)+	;	blt	bra_l	; bra nobr3 | ||||
| zlt_q:		move.l	(sp)+,d0 | ||||
| 		testen	(sp)+	;	blt	1f	; jmp (a4) | ||||
| zle_s0:		testen	(sp)+	;	ble	bra_s0	; bra nobr2 | ||||
| zle_l:		testen	(sp)+	;	ble	bra_l	; bra nobr3 | ||||
| zle_q:		move.l	(sp)+,d0 | ||||
| 		testen	(sp)+	;	ble	1f	; jmp (a4) | ||||
| zeq_s0:		testen	(sp)+	;	beq	bra_s0	; bra nobr2 | ||||
| zeq_s1:		testen	(sp)+	;	beq	bra_s1	; bra nobr2 | ||||
| zeq_l:		testen	(sp)+	;	beq	bra_l	; bra nobr3 | ||||
| zeq_q:		move.l	(sp)+,d0 | ||||
| 		testen	(sp)+	;	beq	1f	; jmp (a4) | ||||
| zne_s0:		testen	(sp)+	;	bne	bra_s0	; bra nobr2 | ||||
| zne_s_1:	testen	(sp)+	;	bne	bra_s_1	; bra nobr2 | ||||
| zne_l:		testen	(sp)+	;	bne	bra_l	; bra nobr3 | ||||
| zne_q:		move.l	(sp)+,d0 | ||||
| 		testen	(sp)+	;	bne	1f	; jmp (a4) | ||||
| zge_s0:		testen	(sp)+	;	bge	bra_s0	; bra nobr2 | ||||
| zge_l:		testen	(sp)+	;	bge	bra_l	; bra nobr3 | ||||
| zge_q:		move.l	(sp)+,d0 | ||||
| 		testen	(sp)+	;	bge	1f	; jmp (a4) | ||||
| zgt_s0:		testen	(sp)+	;	bgt	bra_s0	; bra nobr2 | ||||
| zgt_l:		testen	(sp)+	;	bgt	bra_l	; bra nobr3 | ||||
| zgt_q:		move.l	(sp)+,d0 | ||||
| 		testen	(sp)+	;	bgt	1f	; jmp (a4) | ||||
| 
 | ||||
| blt_s0:		comp	(sp)+,(sp)+ ;	blt bra_s0 ;	bra nobr2 | ||||
| blt_l:		comp	(sp)+,(sp)+ ;	blt bra_l ;	bra nobr3 | ||||
| blt_q:		move.l	(sp)+,d0 | ||||
| 		comp	(sp)+,(sp)+ ;	blt 1f ;	jmp (a4) | ||||
| ble_s0:		comp	(sp)+,(sp)+ ;	ble bra_s0 ;	bra nobr2 | ||||
| ble_l:		comp	(sp)+,(sp)+ ;	ble bra_l ;	bra nobr3 | ||||
| ble_q:		move.l	(sp)+,d0 | ||||
| 		comp	(sp)+,(sp)+ ;	ble 1f ;	jmp (a4) | ||||
| beq_s0:		comp	(sp)+,(sp)+ ;	beq bra_s0 ;	bra nobr2 | ||||
| beq_l:		comp	(sp)+,(sp)+ ;	beq bra_l ;	bra nobr3 | ||||
| beq_q:		move.l	(sp)+,d0 | ||||
| 		comp	(sp)+,(sp)+ ;	beq 1f ;	jmp (a4) | ||||
| bne_s0:		comp	(sp)+,(sp)+ ;	bne bra_s0 ;	bra nobr2 | ||||
| bne_l:		comp	(sp)+,(sp)+ ;	bne bra_l ;	bra nobr3 | ||||
| bne_q:		move.l	(sp)+,d0 | ||||
| 		comp	(sp)+,(sp)+ ;	bne 1f ;	jmp (a4) | ||||
| bge_s0:		comp	(sp)+,(sp)+ ;	bge bra_s0 ;	bra nobr2 | ||||
| bge_l:		comp	(sp)+,(sp)+ ;	bge bra_l ;	bra nobr3 | ||||
| bge_q:		move.l	(sp)+,d0 | ||||
| 		comp	(sp)+,(sp)+ ;	bge 1f ;	jmp (a4) | ||||
| bgt_s0:		comp	(sp)+,(sp)+ ;	bgt bra_s0 ;	bra nobr2 | ||||
| bgt_l:		comp	(sp)+,(sp)+ ;	bgt bra_l ;	bra nobr3 | ||||
| bgt_q:		move.l	(sp)+,d0 | ||||
| 		comp	(sp)+,(sp)+ ;	bgt 1f ;	jmp (a4) | ||||
| 
 | ||||
| bra_s0: | ||||
| 			move.l	d6,d0 | ||||
| 0:			move.b	(a3)+,d0 | ||||
| 1:			add.l	d0,a3	;	jmp	(a4) | ||||
| bra_l:		move.b	(a3)+,-(sp) ;	move.b	(a3)+,1(sp) | ||||
| 		move.w	(sp)+,d0 ;	ext.l	d0 | ||||
| 		bra	1b | ||||
| bra_q: | ||||
| 		move.l	(sp)+,d0 ;	bra	1b | ||||
| bra_s1:		move.w	#0x100,d0 ;	bra	0b | ||||
| bra_s_1:	move.l	#-1,d0	;	bra	0b | ||||
| bra_s_2:	move.l	#-0x200,d0 ;	bra	0b | ||||
| nobr2:		add.l	#1,a3	;	jmp	(a4) | ||||
| nobr3:		add.l	#2,a3	;	jmp	(a4) | ||||
| 
 | ||||
| !--------------------------------------------------------------------------- | ||||
| !		COMPARE GROUP | ||||
| !----------------------------------------------------------------------------- | ||||
| 
 | ||||
| cmi_z:		mov	(sp)+,d0 ;	bra	0f | ||||
| cmi_l:		adroff		;	move.w	(a1),d0 | ||||
| 0:		sub.w	wrd,d0 ;	beq	cmi_1W | ||||
| 		sub.w	wrd,d0 ;	beq	cmi_2W | ||||
| 		bra	e_oddz | ||||
| cmi_1W:		comp	(sp)+,(sp)+ ;	bgt	1f	;	beq 2f | ||||
| 3:		mov	#-1,-(sp) ;	jmp	(a4) | ||||
| 1:		mov	#1,-(sp) ;	jmp	(a4) | ||||
| 2:		cl	-(sp)	;	jmp	(a4) | ||||
| cmi_2W: | ||||
| #ifdef	lword | ||||
| 		bsr	no8bar	;	bra	e_oddz | ||||
| #endif | ||||
| 		cmp.l	(sp)+,(sp)+ ;	blt	3b	;	beq 2b | ||||
| 		bra	1b | ||||
| 
 | ||||
| cmu_z:		mov	(sp)+,d0 ;	bra	4f | ||||
| cmu_l:		adroff		;	move.w	(a1),d0 | ||||
| 4:		sub.w	wrd,d0	;	bne	5f | ||||
| 		comp	(sp)+,(sp)+ ;	bcs	3b | ||||
| 		beq	2b	;	bra	1b | ||||
| 5:		sub.w	wrd,d0	;	bne	e_oddz | ||||
| #ifdef lword | ||||
| 		bsr	no8bar	;	bra	e_oddz | ||||
| #endif | ||||
| cmp_z:		cmp.l	(sp)+,(sp)+ ;	bcs	3b | ||||
| 		beq	2b	;	bra	1b | ||||
| 
 | ||||
| cms_l:		adroff		;	move.w	(a1),d0 | ||||
| 		bra	0f | ||||
| cms_z:		mov	(sp)+,d0 ;	bra	0f | ||||
| cms_s0:		move.l	d6,d0	;	move.b	(a3)+,d0 | ||||
| 0:		move.l	d0,d1	;	move.l	sp,a0 | ||||
| 		asri	wmu,d1	;	subt	#1,d1 | ||||
| 		add.l	d0,sp	;	move.l	sp,d2 | ||||
| 1:		comp	(a0)+,(sp)+ ;	bne	2f | ||||
| 		dbra	d1,1b | ||||
| 		mov	d6,-(sp) ;	jmp	(a4) | ||||
| 2:		add.l	d0,d2	;	move.l	d2,sp | ||||
| 		move.l	#1,d1	;	mov	d1,-(sp) | ||||
| 		jmp	(a4) | ||||
| 
 | ||||
| 
 | ||||
| !		DUMMY FLOAT ROUTINES. POINTER ADJUSTMENT AND WARNING | ||||
| 
 | ||||
| cmf_s0:		move.l	d6,d0	;	move.b	(a3)+,d0 | ||||
| 9:		add.w	d0,d0	;	add.l	d0,sp | ||||
| 		cl	-(sp) | ||||
| #ifdef FLTRAP | ||||
| 		bra	flnim	 | ||||
| #else | ||||
| 		jmp	(a4) | ||||
| #endif | ||||
| cmf_l:		adroff		;	move.w	(a1),d0	;	bra 9b | ||||
| cmf_z:		mov	(sp)+,d0 ;	bra	9b | ||||
| 
 | ||||
| !------------------------------------------------------------------------- | ||||
| !		CALL AND RETURN GROUP | ||||
| !---------------------------------------------------------------------------- | ||||
| 
 | ||||
| cai_z:		move.l	(sp)+,d0 ;	bra	1f | ||||
| cal_q:		move.l	(sp)+,d0 ;	bra	1f | ||||
| cal_l:		adroff		;	move.w	(a1),d0	;	bra 1f | ||||
| cal_s0:		move.w	d6,d0	;	move.b	(a3)+,d0 ;	bra 1f | ||||
| cal_1:	cal_2:	cal_3:	cal_4:	cal_5:	cal_6:	cal_7:	cal_8: | ||||
| cal_9:	cal_10:	cal_11:	cal_12:	cal_13:	cal_14:	cal_15:	cal_16: | ||||
| cal_17:	cal_18:	cal_19:	cal_20:	cal_21:	cal_22:	cal_23:	cal_24: | ||||
| cal_25:	cal_26:	cal_27:	cal_28: | ||||
| 		asr.w	#2,d0	;	sub.w	#0x3F,d0 | ||||
| lblcal: | ||||
| 1:		cmp.l	nproc,d0 ;	bhi	e_badpc | ||||
| 		asl.l	#3,d0 | ||||
| #if	flow + count + prof | ||||
| 		move.l	d0,d1	;	asl.l	#1,d1 | ||||
| 		add.l	d1,d0				!PROC DES. 24 BYTES | ||||
| #endif | ||||
| 		move.l	(a6),-(sp) | ||||
| 		move.l	4(a6),-(sp) ;	move.l	a3,-(sp) | ||||
| 		link	a2,#0	;	move.l	d0,a0 | ||||
| 		add.l	pd,a0				!a0 points at proc. des. | ||||
| #if	prof+count+flow | ||||
| 		tst.l	20(a0)		!A FILE NAME DEFINED IN THIS PROC | ||||
| 		bne	4f		!YES ? CONTINUE | ||||
| 		move.l	8(sp),20(a0)	!NO ? TAKE OLD FILE NAME | ||||
| 4:		move.l	curproc,8(sp)	!SAVE OLD PROCEDURE DESCRIPTOR | ||||
| 		move.l	a0,curproc	!CONTINUE WITH NEW ONE | ||||
| 		move.l	8(a0),d0	!COUNT POINTER MINUS LINE NUMBER | ||||
| 		sub.l	12(a0),d0	!OF FIRST LINE IN countfld | ||||
| 		move.l	d0,countfld | ||||
| #endif | ||||
| 		move.l	(a0)+,d1 ;	sub.l	d1,sp | ||||
| 		claimstack	;	add.l	d1,sp | ||||
| 		tst.l	d1	;	beq	3f | ||||
| 		sub.l	#1,d1 	;	asr.l	wmu,d1 | ||||
| 2:		mov	und,-(sp) ;	dbra	d1,2b | ||||
| 3:		move.l	(a0),a3 ;	jmp	(a4) | ||||
| 
 | ||||
| ret_l:		adroff		;	move.w	(a1),d0 | ||||
| 		bra	1f | ||||
| ret_s0:		move.l	d6,d0	;	move.b	(a3)+,d0 | ||||
| 		bra	1f | ||||
| ret_1W:		move.w	d6,d0	;	bra	5f | ||||
| 1:		blt	e_oddz	;	beq	ret_0 | ||||
| 		comp	#32,d0	;	ble	2f | ||||
| 		bsr	e_badlfr | ||||
| 2:		sub.w	#1,d0	;	asr.w	wmu,d0 | ||||
| 5:		move.w	d0,retsize			!RETSIZE CONTAINS  | ||||
| 3:		mov	(sp)+,(a1)+ ;	dbra	d0,3b	! #WORDS-1 | ||||
| 		lea	retarea,a1 ;	bra	4f | ||||
| ret_0:		move.w	#-1,retsize | ||||
| 4:		unlk	a2	;	cmp.l	a2,d6 | ||||
| 		beq	hlt_z ;	move.l	(sp)+,a3 | ||||
| 		move.l	(sp)+,a0		!FILE OR PROC DES BASE IN a0 | ||||
| #if	count+flow+prof | ||||
| 		move.l	a0,curproc		!SAVE PROC DES BASE CUR PROC | ||||
| 		move.l	8(a0),d0		!d0 IS COUNT | ||||
| 		sub.l	12(a0),d0		!d0 IS COUNT-FIRST LINE | ||||
| 		move.l	d0,countfld		!RESTORE POINTER | ||||
| 		add.l	(sp),d0			!ADD LINE NUMBER | ||||
| 		move.l	d0,countptr | ||||
| #if	prof | ||||
| 		beq	5f | ||||
| 		asl.l	#2,d0 | ||||
| 		add.l	ltime,d0 | ||||
| 		move.l	d0,profile		!profile POINTS AT COUNT  | ||||
| 5: | ||||
| #endif | ||||
| 		move.l	20(a0),a0		!POINTER TO FILE NAME IN a0 | ||||
| #endif | ||||
| 		move.l	a0,4(a6)			!OLD FILE ADDRESS | ||||
| 		move.l	(sp)+,(a6)			!OLD LINE NUMBER | ||||
| 		jmp	(a4) | ||||
| 
 | ||||
| lfr_1W:		move.w	d6,d0	;	move.l	wrd,d1 | ||||
| 0:		cmp.w	retsize,d0 ;	beq	1f | ||||
| 		bsr	e_badlfr | ||||
| 1:		add.l	d1,a1 | ||||
| 2:		mov	-(a1),-(sp) ;	dbra	d0,2b | ||||
| 5:		jmp	(a4) | ||||
| lfr_l:		move.b	(a3)+,-(sp) ;	move.b	(a3)+,1(sp) | ||||
| 		move.w	(sp)+,d0 ;	bra	3f | ||||
| lfr_s0:		move.l	d6,d0	;	move.b	(a3)+,d0 | ||||
| 3:		move.l	d7,d2	;	move.l	d0,d1 | ||||
| 4:		asr.w	#1,d0	;	bcs	e_illins | ||||
| 		dbra	d2,4b	;	beq	5b | ||||
| 		sub.w	#1,d0	;	bra	0b | ||||
| lfr_2W:		move.l	wrd,d1	;	add.l	d1,d1 | ||||
| 		move.l	#1,d0	;	bra	0b | ||||
| 
 | ||||
| e_badlfr:	mov	0xD,-(sp) ;	bra	error | ||||
							
								
								
									
										296
									
								
								mach/mantra/int/mloop9
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										296
									
								
								mach/mantra/int/mloop9
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,296 @@ | |||
| !--------------------------------------------------------------------------- | ||||
| !		MISCELLANEOUS | ||||
| !---------------------------------------------------------------------------- | ||||
| ass_z:		mov	(sp)+,d0 ;	bra	5f | ||||
| ass_l:		move.b	(a3)+,-(sp) ;	move.b	(a3)+,1(sp) | ||||
| 		move.w	(sp)+,d0 | ||||
| 5:		checksize | ||||
| 		bra	e_oddz | ||||
| 4:		move.l	(sp)+,d0 ;	bpl	3f | ||||
| 		asr.l	wmu,d0	;	bra	8f | ||||
| 2:		move.w	(sp)+,d0 ;	bpl	3f | ||||
| 		asr.w	#1,d0	;	ext.l	d0 | ||||
| 		bra	8f | ||||
| 
 | ||||
| asp_1W:		asp_2W:		asp_3W:		asp_4W:		asp_5W: | ||||
| 		sub.w	#176,d0 | ||||
| #ifndef	lword | ||||
| 		asr.l	#1,d0 | ||||
| #endif | ||||
| 3:		add.l	d0,sp	;	jmp	(a4) | ||||
| asp_w0:		move.l	d6,d0	;	move.b	(a3)+,d0 | ||||
| 5:		asl.l	wmu,d0 ;	bra	3b | ||||
| asp_lw:		move.b	(a3)+,-(sp) ;	move.b	(a3)+,1(sp) | ||||
| 		move.w	(sp)+,d0  ;	ext.l	d0 | ||||
| 6:		bmi	8f | ||||
| 		asl.l	wmu,d0	;	bra	3b | ||||
| 8:		neg.l	d0	;	sub.l	#1,d0 | ||||
| 1:		mov	und,-(sp) ;	dbra	d0,1b | ||||
| 		jmp	(a4) | ||||
| asp_qw:		move.l	(sp)+,d0 ;	bra	6b | ||||
| 
 | ||||
| !----------------------------------------------------------------------------- | ||||
| bls_z:		mov	(sp)+,d0 ;	bra	0f | ||||
| bls_l:		adroff		;	move.w	(a1),d0 | ||||
| 0:		checksize | ||||
| 2:		move.w	(sp)+,d0 ;	bra	0f | ||||
| 4:		move.l	(sp)+,d0 ;	bra	0f | ||||
| 
 | ||||
| blm_q:		move.l	(sp)+,d0 ;	bra	0f | ||||
| blm_l:		adroff		;	move.w	(a1),d0 | ||||
| 		bra	0f | ||||
| blm_s0:		move.l	d6,d0	;	move.b	(a3)+,d0 | ||||
| 0:		move.l	d0,d2	;	asr.w	wmu,d2 | ||||
| 		beq	5f	;	move.l	a1,d1 | ||||
| 		sub.w	#1,d2	;	move.l	(sp)+,a0	!dest. address | ||||
| 		move.l	(sp)+,a1 ;	cmp.l	a0,a1 | ||||
| !a1 contains source address. beware of overlap of pieces | ||||
| 		beq	3f	;	bcs	2f | ||||
| 1:		mov	(a1)+,(a0)+ ;	dbra	d2,1b | ||||
| 3:		move.l	d1,a1 | ||||
| 5:		jmp	(a4) | ||||
| 2:		add.l	d0,a1	;	add.l	d0,a0 | ||||
| 4:		mov	-(a1),-(a0) ;	dbra	d2,4b | ||||
| 		bra	3b | ||||
| 
 | ||||
| !---------------------------------------------------------------------------- | ||||
| csa_z:		mov	(sp)+,d0 ;	bra	0f | ||||
| csa_l:		adroff		;	move.w	(a1),d0 | ||||
| 0:		sub.l	wrd,d0	;	bne	e_illins | ||||
| csa_1W:		move.l	(sp)+,a0 ;	mov	(sp)+,d0 | ||||
| 		ext.l	d0 | ||||
| 		add.l	#4,a0	;	subt	(a0),d0 | ||||
| 		blt	6f | ||||
| 		comp	word(a0),d0 ;	bhi	6f | ||||
| 		asl.l	#2,d0	;	add.l	wrd,d0 | ||||
| 		move.l	word(a0,d0),d1 ;	bne	5f | ||||
| 6:		sub.l	#4,a0	;	move.l	(a0),d1 | ||||
| 		beq	e_case | ||||
| 5:		move.l	d1,a3	;	jmp	(a4) | ||||
| 
 | ||||
| csb_z:		mov	(sp)+,d0 ;	bra	0f | ||||
| csb_l:		adroff		;	move.w	(a1),d0 | ||||
| 0:		comp	wrd,d0 ;	bne	e_illins | ||||
| csb_1W:		move.l	(sp)+,a0 ;	mov	(sp)+,d0 | ||||
| 		mov	4(a0),d1 ;	sub.l	#1,d1 | ||||
| 		move.l	a0,a3 | ||||
| !Use a3 as a general register | ||||
| 		move.l	wrd,d2 ;	add.l	#4,d2 | ||||
| 1:		add.l	d2,a0	;	comp	(a0),d0 | ||||
| 		dbeq	d1,1b	;	bne	2f | ||||
| 		move.l	word(a0),d1 ;	beq	e_case | ||||
| 		move.l	d1,a3	;	jmp	(a4) | ||||
| 2:		move.l	(a3),d1	;	beq	e_case | ||||
| 		move.l	d1,a3	;	jmp	(a4) | ||||
| 
 | ||||
| !----------------------------------------------------------------------------- | ||||
| dch_z:		move.l	(sp)+,a0 ;	move.l	(a0),-(sp) | ||||
| 		move.l	ml,a0	;	cmp.l	(sp),a0 | ||||
| 		bls	e_badptr ;	jmp	(a4) | ||||
| 
 | ||||
| lpb_z:		add.l	#16,(sp) ;	jmp	(a4) | ||||
| 
 | ||||
| !---------------------------------------------------------------------------- | ||||
| 
 | ||||
| dup_1W:		mov	(sp),-(sp) ;	jmp	(a4) | ||||
| dup_l:		adroff		;	move.w	(a1),d0 | ||||
| 		bra	1f | ||||
| dus_z:		mov	(sp)+,d0 ;	bra	0f | ||||
| dus_l:		adroff		;	move.w	(a1),d0 | ||||
| 0:		checksize | ||||
| 2:		move.w	(sp)+,d0 ;	bra	1f | ||||
| 4:		move.l	(sp)+,d0 | ||||
| 1:		ble	e_oddz ;	bclr	#0,d0 | ||||
| 		move.l	sp,a0	;	add.l	d0,a0 | ||||
| 		asr.l	wmu,d0	;	sub.l	#1,d0 | ||||
| 3:		mov	-(a0),-(sp) ;	dbra	d0,3b | ||||
| 		jmp	(a4) | ||||
| !We do not test if d0 is indeed a word multiple . This can eventually be done | ||||
| !in the usual way. | ||||
| 
 | ||||
| !----------------------------------------------------------------------------- | ||||
| exg_z:		mov	(sp)+,d0 ;	bra	0f | ||||
| exg_l:		adroff		;	move.w	(a1),d0 | ||||
| 		bra	0f  | ||||
| exg_s0:		move.l	d6,d0	;	move.b	(a3)+,d0 | ||||
| 0:		move.l	d7,d1	;	move.l	d0,a0 | ||||
| 1:		asri	#1,d0	;	dbcs	d1,1b | ||||
| 		bcs	e_oddz	;	sub.l	#1,d0 | ||||
| 		add.l	a0,sp	;	add.l	sp,a0 | ||||
| 2:		mov	-(sp),d1 ;	mov	-(a0),(sp) | ||||
| 		mov	d1,(a0)	;	dbra	d0,2b | ||||
| 		jmp	(a4) | ||||
| 
 | ||||
| gto_q:		move.l	(sp)+,a0 ;	bra	3f | ||||
| gto_l:		move.l	d6,a0	;	move.b	(a3)+,-(sp) | ||||
| 		move.b	(a3)+,1(sp) ;	move.w	(sp)+,a0 | ||||
| 3:		add.l	a6,a0	;	move.l	(a0)+,a3 | ||||
| 		move.l	(a0)+,sp ;	move.l	(a0),a2 | ||||
| 		jmp	(a4) | ||||
| 
 | ||||
| lim_z:		move.w	ignmask,-(sp) ;	jmp	(a4) | ||||
| sim_z:		move.w	(sp)+,ignmask ;	jmp	(a4) | ||||
| 
 | ||||
| 	.bss | ||||
| ignmask:  .space 2 | ||||
| 	.define ignmask | ||||
| 	.text | ||||
| 
 | ||||
| !--------------------------------------------------------------------------- | ||||
| lor_s0:		move.l	d6,d0	;	move.b	(a3)+,d0 | ||||
| 		bne	1f	;	move.l	a2,-(sp) | ||||
| 		jmp	(a4) | ||||
| 1:		sub.w	#1,d0	;	bne	2f | ||||
| 		move.l	sp,-(sp) ;	jmp	(a4) | ||||
| 2:		sub.w	#1,d0	;	bne	e_illins | ||||
| 		move.l	hp,-(sp) ;	jmp	(a4) | ||||
| 
 | ||||
| str_s0:		move.l	d6,d0	;	move.b	(a3)+,d0 | ||||
| 		bne	1f	;	move.l	(sp)+,a2 | ||||
| 		jmp	(a4) | ||||
| 1:		sub.w	#1,d0	;	bne	2f | ||||
| 		move.l	(sp)+,sp ;	claimstack | ||||
| 		jmp	(a4) | ||||
| 2:		sub.w	#1,d0	;	bne	e_illins | ||||
| 		move.l	(sp)+,d1 ;	cmp.l	nd,d1 | ||||
| 		bcc	3f					!break | ||||
| 		cmp.l	tblmax,d1 ;	bcs	4f | ||||
| 5:		move.l	d1,hp	;	jmp	(a4) | ||||
| 3:		move.l	d1,-(sp) ;	add.l	#1280,(sp) | ||||
| 		bsr	_break ;	testen	(sp)+ | ||||
| 4:		bne	e_heap	;	bra	5b | ||||
| 
 | ||||
| !---------------------------------------------------------------------------- | ||||
| rck_z:		mov	(sp)+,d0 ;	bra	0f | ||||
| rck_l:		adroff		;	move.w	(a1),d0 | ||||
| 0:		sub.l	wrd,d0	;	beq	rck_1W | ||||
| 		sub.l	wrd,d0	;	bne	e_oddz | ||||
| 		move.l	(sp)+,a0 | ||||
| 		mov	(sp),d0	;	comp	(a0),d0 ;	blt	9f | ||||
| 		add.l	wrd,a0	;	bra	1f | ||||
| rck_1W:		move.l	(sp)+,a0 | ||||
| 		mov	(sp),d0	;	comp	(a0),d0 ;	blt	9f | ||||
| 1:		comp	word(a0),d0 ;	bgt	9f | ||||
| 		jmp	(a4) | ||||
| 9:		bra	e_range | ||||
| !Temp. solution until trp_z is implemented | ||||
| 
 | ||||
| !-------------------------------------------------------------------------- | ||||
| nop_z: | ||||
| lblnop:		lea	nopln+16,a0 ;	move.l	(a6),d1 | ||||
| 		bsr	itoa	 | ||||
| 		lea	nopln+33,a0 ;	move.l	sp,d1 | ||||
| 		bsr	itoa | ||||
| 		move.l	#45,-(sp) | ||||
| 		pea	nopln 	;	mov	#1,-(sp) | ||||
| 		bsr	_write | ||||
| 		add.l	wrd+4,sp | ||||
| 		jmp	(a4) | ||||
| 
 | ||||
| 	.data | ||||
| nopln:	.asciz	"line number nop              sp             \n" | ||||
| 	.align 2 | ||||
| 	.text | ||||
| !unsigned to ascii for integers  , a0 is address of first character | ||||
| ! d1 contains integer. Output is 11 characters of which the first is a space. | ||||
| 
 | ||||
| 	.define itoa | ||||
| 	.text | ||||
| 
 | ||||
| itoa:		move.l	#9,d4	;	add.l	#11,a0 | ||||
| 		move.l	#10,d0 | ||||
| 0:		bsr	dvu4	;	add.w	#48,d3 | ||||
| 		move.b	d3,-(a0) ;	tst.l	d1 | ||||
| 		dbeq	d4,0b | ||||
| 1:		move.b	#32,-(a0) ;	dbra	d4,1b | ||||
| 		rts | ||||
| 
 | ||||
| !------------------------------------------------------------------------------ | ||||
| fil_q:		move.l	(sp)+,a0 ;	bra	3f | ||||
| fil_l:		adroff		;	move.w	(a1),d0 | ||||
| 		move.l	d0,a0 | ||||
| 3:		add.l	a6,a0	;	cmp.l	4(a6),a0 | ||||
| 		beq	0f | ||||
| #if	flow+count+prof | ||||
| 		move.l	curproc,a5 | ||||
| 		move.l	8(a5),d0 | ||||
| 		sub.l	12(a5),d0 | ||||
| 		move.l	d0,countfld		!START COUNTPTR FOR THIS PROC | ||||
| 		move.l	a0,20(a5)		!FILE POINTER IN PROC DES | ||||
| #endif | ||||
| 		move.l	a0,4(a6) | ||||
| 0:		jmp	(a4) | ||||
| 
 | ||||
| !----------------------------------------------------------------------------- | ||||
| lni_z:		add.l	#1,(a6) | ||||
| #if	count+flow+prof | ||||
| 		add.l	#1,countptr | ||||
| #if	prof | ||||
| 		add.l	#4,profile | ||||
| #endif | ||||
| #endif | ||||
| 		bra	8f | ||||
| lin_l:		adroff		;	move.w	(a1),d0 ;	bra 1f | ||||
| lin_q:		move.l	(sp)+,d0 ;	bra	1f | ||||
| lin_s0:		move.l	#0,d0	;	move.b	(a3)+,d0 | ||||
| 1:		cmp.l	(a6),d0 ;	beq	9f | ||||
| 		move.l	d0,(a6) | ||||
| #if	count+flow+prof | ||||
| 		move.l	countfld,d1 | ||||
| 		add.l	d0,d1 | ||||
| 		move.l	d1,countptr | ||||
| #if	prof | ||||
| 		asl.l	#2,d1 | ||||
| 		add.l	ltime,d1 | ||||
| 		move.l	d1,profile | ||||
| #endif | ||||
| #endif | ||||
| 8: | ||||
| #if	last | ||||
| 		bsr	nexttab	;	move.l	4(a6),(a5)+	!store new line | ||||
| 		move.l	(a6),(a5)		!number in buffer lasttable | ||||
| #endif | ||||
| #if	count | ||||
| 		move.l	countptr,d1	!LINE NUMBER IN d1 | ||||
| 		asl.l	#2,d1		!MULTIPLY BY 4 | ||||
| 		move.l	lcount,a0 | ||||
| 		add.l	#1,0(a0,d1)	!ADD 1 TO THE CORRESPONDING COUNT | ||||
| #endif | ||||
| #if	flow | ||||
| 		move.l	countptr,d1	!LINE NUMBER IN d1 | ||||
| 		move.l	#8,d0 | ||||
| 		bsr	dvu4 | ||||
| !QUOTIENT IN d1 REST IN d3 | ||||
| 		move.l	lflow,a0 | ||||
| 		bset	d3,0(a0,d1) | ||||
| !ATTENTION BIT 0 CORR TO LINE 0 | ||||
| #endif | ||||
| !9:		bra	nop_z | ||||
| 9:		jmp	(a4) | ||||
| !---------------------------------------------------------------------------- | ||||
| mon_z:		mov	(sp)+,d0 ;	bmi	e_badmon | ||||
| 		cmp.l	#64,d0	;	bge	e_badmon | ||||
| 		move.l	a4,-(sp) ;	asl.l	#2,d0 | ||||
| 		add.l	#syscal,d0 ;	move.l	d0,a0 | ||||
| 		move.l	(a0),a0	;	jmp	(a0) | ||||
| 
 | ||||
| 	.data | ||||
| syscal: | ||||
| .long	e_badmon ; .long hlt_z ; .long	_fork ; .long	_read | ||||
| .long	_write ; .long	_open ; .long	_close ; .long	_wait | ||||
| .long	_creat ; .long	_link ; .long	_unlink ; .long e_badmon | ||||
| .long	_chdir ; .long	e_badmon ; .long _mknod ; .long	_chmod | ||||
| .long	_chown ; .long	_break ; .long _stat ; .long	_lseek | ||||
| .long	_getpid ; .long _mount ; .long	_umount ; .long	_setuid | ||||
| .long	_getuid ; .long	_stime ; .long	_ptrace ; .long	_alarm | ||||
| .long	_fstat ; .long	_pause ; .long	_utime ; .long	e_badmon | ||||
| .long	e_badmon ; .long _access ; .long _nice ; .long	_ftime | ||||
| .long	_sync ; .long	_kill ; .long	e_badmon ; .long e_badmon | ||||
| .long	e_badmon ; .long _dup ; .long	_pipe ; .long	_times | ||||
| .long	_profil ; .long e_badmon ; .long _setgid ; .long _getgid | ||||
| .long	_sigtrp ; .long e_badmon ; .long e_badmon ; .long _acct | ||||
| .long	e_badmon ; .long _lock ; .long	_ioctl ; .long	e_badmon | ||||
| .long	_mpxcall ; .long e_badmon ; .long e_badmon ; .long _exece | ||||
| .long	_umask ; .long	_chroot ; .long	e_badmon ; .long e_badmon | ||||
| 
 | ||||
| 	.text | ||||
							
								
								
									
										341
									
								
								mach/mantra/int/mloopa
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										341
									
								
								mach/mantra/int/mloopa
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,341 @@ | |||
| e_array:	cl	-(sp)	 ;	bra	error | ||||
| e_range:	mov	#0x1,-(sp) ;	bra	error | ||||
| e_set:		mov	#0x2,-(sp) ;	bra	error | ||||
| e_iovfl:	mov	#0x3,-(sp) ;	bra	error | ||||
| e_fovfl:	mov	#0x4,-(sp) ;	bra	error | ||||
| e_funfl:	mov	#0x5,-(sp) ;	bra	error | ||||
| e_idivz:	mov	#0x6,-(sp) ;	bra	error | ||||
| e_fdivz:	mov	#0x7,-(sp) ;	bra	error | ||||
| e_iund:		mov	#0x8,-(sp) ;	bra	error | ||||
| e_fund:		mov	#0x9,-(sp) ;	bra	error | ||||
| e_conv:		mov	#0xA,-(sp) ;	bra	error | ||||
| e_stack:	mov	#0x10,-(sp) ;	bra	fatal | ||||
| e_heap:		mov	#0x11,-(sp) ;	bra	fatal | ||||
| e_illins:	mov	#0x12,-(sp) ;	bra	fatal | ||||
| e_oddz:		mov	#0x13,-(sp) ;	bra	fatal | ||||
| e_case:		mov	#0x11,-(sp) ;	bra	fatal | ||||
| e_memflt:	mov	#0x15,-(sp) ;	bra	fatal | ||||
| e_badptr:	mov	#0x16,-(sp) ;	bra	fatal | ||||
| e_badpc:	mov	#0x17,-(sp) ;	bra	fatal | ||||
| e_badlae:	mov	#0x18,-(sp) ;	bra	error | ||||
| e_badmon:	mov	#0x19,-(sp) ;	bra	error | ||||
| e_badlin:	mov	#0x1A,-(sp) ;	bra 	error | ||||
| e_badgto:	mov	#0x1B,-(sp) ;	bra	error | ||||
| 
 | ||||
| flnim:		mov	#0xB,-(sp) ;	bra	error | ||||
| no8bar:		mov	#0xC,-(sp) ;	bra	error | ||||
| 	.define e_memflt | ||||
| !--------------------------------------------------------------------------- | ||||
| !		ERRORS AND TRAPS | ||||
| !---------------------------------------------------------------------------- | ||||
| fatal:		clr.l	-(sp)			!dummy return address | ||||
| 		pea	hlt_z			!RETURN FROM FATAL HALTS | ||||
| 		mov	8(sp),-(sp) | ||||
| 
 | ||||
| error:		movem.l	d0/d1/d2/d3/d4/d5/d6/d7/a0/a1/a2/a3/a4/a5/a6,-(sp) | ||||
| 		mov	60(sp),d0		!ERROR NUMBER IN d0 | ||||
| 		lea	retsize,a5 | ||||
| 		move.l	#16,d1 | ||||
| 1:		move.w	-(a5),-(sp) | ||||
| 		dbra	d1,1b | ||||
| 		cmp.w	#0xB,d0 | ||||
| 		bge	0f		!FATAL ERROR , START ERROR HANDLING | ||||
| 		move.l	#0x1,d1 | ||||
| 		asl.l	d0,d1 | ||||
| 		move.w	ignmask,d2 | ||||
| 		not.w	d2 | ||||
| 		and.w	d2,d1 | ||||
| 		bne	0f | ||||
| 		move.l	#16,d1 | ||||
| 		lea	retsize,a5 | ||||
| 1:		move.w	(sp)+,(a5)+ | ||||
| 		dbra	d1,1b | ||||
| 		movem.l	(sp)+,d0/d1/d2/d3/d4/d5/d6/d7/a0/a1/a2/a3/a4/a5/a6 | ||||
| 
 | ||||
| 		add.l	wrd,sp		!REMOVE ERROR NUMBER | ||||
| 		rts | ||||
| 
 | ||||
| 0:		move.l	uerrorp,a0 | ||||
| 		cmp.l	#-1,a0 | ||||
| 		beq	notrap | ||||
| 		mov	d0,-(sp) | ||||
| 		move.l	uerrorp,-(sp) | ||||
| 		move.l	#-1,uerrorp		!USER MUST SET TRAP AGAIN | ||||
| 		bra	cai_z | ||||
| 
 | ||||
| !----------------------------------------------------------------------------- | ||||
| rtt_z:		move.l	a2,sp | ||||
| 		add.l	#0x10,sp		!REMOVE RETURN STATUS BLOCK | ||||
| 		add.l	wrd,sp			!REMOVE  ERROR NUMBER | ||||
| 		move.l	#16,d0 | ||||
| 		lea	retsize,a5 | ||||
| 1:		move.w	(sp)+,(a5)+ | ||||
| 		dbra	d0,1b | ||||
| 		movem.l	(sp)+,d0/d1/d2/d3/d4/d5/d6/d7/a0/a1/a2/a3/a4/a5/a6 | ||||
| 		add.l	wrd,sp | ||||
| 		rts | ||||
| 
 | ||||
| trp_z:		sub.l	#4,sp | ||||
| 		mov	4(sp),(sp)		!COPY ERROR NUMBER | ||||
| 		move.l	a4,word(sp)		!RETURN ADDRESS TO MAIN LOOP | ||||
| 		bra	error | ||||
| 
 | ||||
| sig_z:		move.l	(sp),d0 | ||||
| 		move.l	uerrorp,(sp) | ||||
| 		move.l	d0,uerrorp | ||||
| 		jmp	(a4) | ||||
| 
 | ||||
| 	.data | ||||
| uerrorp:	.long	0x-1 | ||||
| 	.text | ||||
| 
 | ||||
| !----------------------------------------------------------------------------- | ||||
| !FIRST INFORMATION ABOUT THE KIND OF THE ERROR | ||||
| notrap:		add.l	#38,sp | ||||
| 		movem.l	(sp)+,d1/d2/d3/d4/d5/d6/d7/a0/a1/a2/a3/a4/a5/a6 | ||||
| notrap1:	comp	#28,d0			!ERROR NUMBER STILL IN d0 | ||||
| !still to make a routine that prints the number of a user set error | ||||
| 1:		mulu	#21,d0 | ||||
| 		lea	emerr,a0 | ||||
| 		move.l	#20,-(sp) | ||||
| 		pea	0(a0,d0) | ||||
| 		mov	#2,-(sp)		!STANDARD ERROR | ||||
| 		bsr	_write | ||||
| 		add.l	wrd+4,sp | ||||
| !NEXT INFORMATION ABOUT THE LINE NUMBER | ||||
| 		move.l	(a6),d1 | ||||
| 		lea	emess+14,a0 | ||||
| 		bsr	itoa | ||||
| 		move.l	#30,-(sp) | ||||
| 		pea	emess | ||||
| 		mov	#2,-(sp) | ||||
| 		bsr	_write | ||||
| 		add.l	wrd+4,sp | ||||
| !NOW INFORMATION ABOUT THE FILES | ||||
| 2:		move.l	4(a6),a0 | ||||
| 		cmp.l	#0,a0 | ||||
| 		beq	5f | ||||
| 		move.l	a0,a5 | ||||
| 		sub.l	#4,sp | ||||
| 		move.l	a5,-(sp) | ||||
| 		move.l	#-1,d0 | ||||
| 1:		add.l	#1,d0 | ||||
| 		tst.b	(a5)+ | ||||
| 		bne	1b | ||||
| 		move.l	d0,4(sp) | ||||
| 		mov	#2,-(sp) | ||||
| 		bsr	_write | ||||
| 		add.l	wrd+4,sp | ||||
| 5:		move.w	#0x0A,-(sp) | ||||
| 		move.l	#2,-(sp) | ||||
| 		pea	4(sp) | ||||
| 		mov	#2,-(sp) | ||||
| 		bsr	_write | ||||
| 		add.l	wrd+6,sp | ||||
| 		comp	#0xB,(sp) | ||||
| 		beq	1f | ||||
| 
 | ||||
| 		move.l	#-1,argc | ||||
| 		clr.l	-(sp)		!dummy return address | ||||
| 		bra	hlt_z | ||||
| 
 | ||||
| 1:		add.l	wrd,sp | ||||
| 		jmp	(a4) | ||||
| 
 | ||||
| !--------------------------------------------------------------------------- | ||||
| !		EXIT HANDLING | ||||
| !-------------------------------------------------------------------------- | ||||
| hlt_z:		add.l	#4,sp		!remove return address | ||||
| #if	prof | ||||
| 	.data | ||||
| emprof:	.asciz	"em_profile\0" | ||||
| 	.align 2 | ||||
| 	.bss | ||||
| profile: .space 4 | ||||
| ltime:	.space 4 | ||||
| profsiz: .space	4 | ||||
| 	.text | ||||
| 		mov	#0x1B6,-(sp) | ||||
| 		pea	emprof | ||||
| 		bsr	_creat | ||||
| 		testen	(sp)+ | ||||
| 		mov	(sp)+,d0 | ||||
| 		move.l	profsiz,-(sp) | ||||
| 		move.l	ltime,-(sp)		!LTIME IS POINTER AT TABLE | ||||
| 		mov	d0,-(sp) | ||||
| 		bsr	_write | ||||
| 		add.l	wrd+4,sp | ||||
| #endif | ||||
| #if flow | ||||
| 		mov	#0x1B6,-(sp) | ||||
| 		pea	emflow | ||||
| 		bsr	_creat | ||||
| 		testen	(sp)+ | ||||
| 		mov	(sp)+,d0 | ||||
| 		move.l	flowsiz,-(sp) | ||||
| 		move.l	lflow,-(sp) | ||||
| 		mov	d0,-(sp) | ||||
| 		bsr	_write | ||||
| 		add.l	wrd+4,sp | ||||
| 	.data | ||||
| emflow:	.asciz	"em_flow\0" | ||||
| 	.align 2 | ||||
| 	.bss | ||||
| lflow:	.space 4 | ||||
| flowsiz: .space 4 | ||||
| 	.text | ||||
| #endif | ||||
| #if	count | ||||
| 		mov	#0x1B6,-(sp) | ||||
| 		pea	emcount | ||||
| 		bsr	_creat | ||||
| 		testen	(sp)+ | ||||
| 		mov	(sp)+,d0 | ||||
| 		move.l	countsiz,-(sp) | ||||
| 		move.l	lcount,-(sp) | ||||
| 		mov	d0,-(sp) | ||||
| 		bsr	_write | ||||
| 		add.l	wrd+4,sp | ||||
| 	.data | ||||
| emcount: .asciz	"em_count\0" | ||||
| 	.align 2 | ||||
| 	.bss | ||||
| lcount: .space 4 | ||||
| countsiz: .space 4 | ||||
| #endif | ||||
| #if opfreq | ||||
| 	.data | ||||
| emopf:	.asciz	"em_opfreq\0" | ||||
| 	.align | ||||
| 	.bss | ||||
| counttab:  .space	1884 | ||||
| 	.text | ||||
| 		mov	#0x1B6,-(sp) | ||||
| 		pea	emopf | ||||
| 		bsr	_creat | ||||
| 		testen	(sp)+ | ||||
| 		mov	(sp)+,d0 | ||||
| 		move.l	#1884,-(sp) | ||||
| 		pea	counttab | ||||
| 		mov	d0,-(sp) | ||||
| 		bsr	_write | ||||
| 		add.l	wrd+4,sp | ||||
| #endif | ||||
| #if count+flow+prof | ||||
| 	.bss | ||||
| countfld: .space 4			!COUNT NUMBER - NUMBER OF LINE 1 OF PROC | ||||
| countptr: .space 4			!COUNT NUMBER OF CURRENT LINE | ||||
| #endif | ||||
| #if	last | ||||
| 	.text | ||||
| 		mov	#0x1B6,-(sp) | ||||
| 		pea	emlast | ||||
| 		bsr	_creat | ||||
| 		testen	(sp)+ | ||||
| 		mov	(sp)+,d6	!d6 contains file descriptor | ||||
| 		cmp.l	#-1,linused-4	!test if buffer is fully used | ||||
| 		beq	0f | ||||
| 		bsr	nexttab | ||||
| 		bra	1f | ||||
| 0:		lea	lasttable,a5 | ||||
| 1:		tst.l	(a5) | ||||
| 		bne	2f		!exists entry in table | ||||
| 		move.l	#22,-(sp)	!here case no lines processed | ||||
| 		pea	mess1 | ||||
| 		mov	d6,-(sp) | ||||
| 		bsr	_write | ||||
| 		add.l	wrd+4,sp | ||||
| 		bra	9f | ||||
| 2:		move.l	#7,-(sp)	!announce new file name | ||||
| 		pea	mess2 | ||||
| 		mov	d6,-(sp) | ||||
| 		bsr	_write | ||||
| 		add.l	wrd+4,sp | ||||
| 		move.l	(a5),d7 | ||||
| 		move.l	d7,a0		!keep file pointer in d7 | ||||
| 		clr.l	(a5)+		!this will stop the printing | ||||
| 		move.l	#-1,d1		!d1 will contain length of file name | ||||
| 3:		add.l	#1,d1 | ||||
| 		tst.b	(a0)+ | ||||
| 		bne	3b | ||||
| 		move.l	d1,-(sp) | ||||
| 		move.l	d7,-(sp) | ||||
| 		mov	d6,-(sp) | ||||
| 		bsr	_write | ||||
| 		add.l	wrd+4,sp | ||||
| 4:		move.l	(a5),d1		!next print line numbers | ||||
| 		lea	mess3,a0 | ||||
| 		bsr	itoa | ||||
| 		move.l	#12,-(sp) | ||||
| 		pea	mess3 | ||||
| 		mov	d6,-(sp) | ||||
| 		bsr	_write | ||||
| 		add.l	wrd+4,sp | ||||
| 		bsr	nexttab | ||||
| 		tst.l	(a5)		!in case 0 no more lines | ||||
| 		beq	9f | ||||
| 		cmp.l	(a5),d7 | ||||
| 		bne	2b		!new file name | ||||
| 		clr.l	(a5)+		!skip file name | ||||
| 		bra	4b		!only new line | ||||
| 9: | ||||
| 	.data | ||||
| emlast:	.asciz	"em_last" | ||||
| mess1:	.asciz	"no line processed yet\n" | ||||
| mess2:	.asciz	"\nfile :" | ||||
| mess3:	.asciz	"           \n" | ||||
| 	.align 2 | ||||
| 	.bss | ||||
| lasttable:  .space  128 | ||||
| linused:    .space  4 | ||||
| #endif | ||||
| 	.text | ||||
| halt:		bsr	_exit | ||||
| 
 | ||||
| 	.data | ||||
| emerr: | ||||
| .asciz	"ARRAY BOUND ERROR  \n" | ||||
| .asciz	"RANGE BOUND ERROR  \n" | ||||
| .asciz	"SET BOUND ERROR    \n" | ||||
| .asciz	"INTEGER OVERFLOW   \n" | ||||
| .asciz	"FLOATING OVERFLOW  \n" | ||||
| .asciz	"FLOATING UNDERFLOW \n" | ||||
| .asciz	"INT. DIV. BY ZERO  \n" | ||||
| .asciz	"DIVIDE BY 0.0      \n" | ||||
| .asciz	"UNDEFINED INTEGER  \n" | ||||
| .asciz	"UNDEFINED FLOAT    \n" | ||||
| .asciz	"CONVERSION ERROR   \n" | ||||
| .asciz	"NO FLOATING POINT  \n" | ||||
| .asciz	"NO 8 BYTE ARITH.   \n" | ||||
| .asciz	"NO LOAD FILE       \n" | ||||
| .asciz	"LOAD FILE ERROR    \n" | ||||
| .asciz	"PROGRAM TOO LARGE  \n" | ||||
| .asciz	"STACK OVERFLOW     \n" | ||||
| .asciz	"HEAP OVERFLOW      \n" | ||||
| .asciz	"ILLEGAL INSTRUCTION\n" | ||||
| .asciz	"ILLEGAL SIZE ARG.  \n" | ||||
| .asciz	"CASE  ERROR        \n" | ||||
| .asciz	"ADDRESS NON EX. MEM\n" | ||||
| .asciz	"BAD POINTER USED   \n" | ||||
| .asciz	"PR COUNT. OUT RANGE\n" | ||||
| .asciz	"BAD ARG. OF LAE    \n" | ||||
| .asciz	"BAD MONITOR CALL   \n" | ||||
| .asciz	"ARG OF LIN TOO HIGH\n" | ||||
| .asciz	"GTO DESCR. ERROR   \n" | ||||
| .asciz	"BAD RETURN SIZE    \n" | ||||
| emess: | ||||
| .asciz	"ON SOURCE LINE             OF\n" | ||||
| .align 2 | ||||
| !----------------------------------------------------------------------------- | ||||
| !	SUBROUTINES FOR THE INTERPRETOR | ||||
| !------------------------------------------------------------------------------ | ||||
| 	.text | ||||
| #if	last | ||||
| nexttab:	move.l  linused,a5 | ||||
| 		add.l	#8,a5 | ||||
| 		cmp.l	#linused,a5	!top of buffer reached? | ||||
| 		bne	1f		!if so back to bottom | ||||
| 		sub.l	#128,a5 | ||||
| 1:		move.l	a5,linused | ||||
| 		rts | ||||
| #endif | ||||
							
								
								
									
										58
									
								
								mach/mantra/int/mloopb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								mach/mantra/int/mloopb
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,58 @@ | |||
| _sigtrp:	mov	(sp)+,d1	!trapno in d1 | ||||
| 		mov	(sp)+,d4	!signo in d4 | ||||
| 		extend	d4 | ||||
| 		extend	d1 | ||||
| 		comp	#16,d4 | ||||
| 		bhi	sig_bad | ||||
| 		tst.l	d4 | ||||
| 		beq	sig_bad | ||||
| 		move.l	d4,a0 | ||||
| 		add.l	a0,a0 | ||||
| 		add.l	a0,a0 | ||||
| 		lea	sig_trp-4(a0),a5 | ||||
| 		move.l	(a5),d2		!previous trap number in d2 | ||||
| 		comp	#256,d1		!-2 and -1 special | ||||
| 		bcc	1f | ||||
| 		move.l	sig_adr-4(a0),d3	!Get the pointer to the trap-  | ||||
| 		bne	2f		!procedure to give as argument to | ||||
| sig_bad:	mov	22,-(sp)	!_signal. If pointer 0 trapping is | ||||
| 		mov	22,-(sp)	!not legal | ||||
| 		jmp	(a4) | ||||
| 1:		comp	#-3,d1		!-2:reset default , -3: ignore | ||||
| 		bmi	sig_bad | ||||
| 		move.l	d1,d3 | ||||
| 		ad	#2,d3		!0:reset default for signal, -1: ignore | ||||
| 2:		move.l	d1,(a5)		!set new trapno | ||||
| 		move.l	d3,-(sp)		!set arguments to signal: | ||||
| 		mov	d4,-(sp)		!pointer ,signo to be trapped | ||||
| 		bsr	_signal | ||||
| 		cl	-(sp)		!set code for no error | ||||
| 	.data | ||||
| sig_adr:	.long	sig1 ;	.long	sig2 ;	.long sig3 ;	.long	0 | ||||
| 		.long	0 ;	.long	0 ;	.long 0 ;	.long	0 | ||||
| 		.long	0 ;	.long	0 ;	.long sig11 ;	.long	sig12 | ||||
| 		.long	sig13 ;	.long	sig14 ;	.long sig15 ;	.long	sig16 | ||||
| sig_trp:	.long	-2  ;	.long	-2  ;	.long	-2  ;	.long	-2   | ||||
| 		.long	-2  ;	.long	-2  ;	.long	-2  ;	.long	-2   | ||||
| 		.long	-2  ;	.long	-2  ;	.long	21  ;	.long	25   | ||||
| 		.long	-2  ;	.long	-2  ;	.long	-2  ;	.long	-2   | ||||
| 	.text | ||||
| !the next procedures map the catched signal to em errors. The em error | ||||
| !procedure will handle this. | ||||
| sig1:	sig2:	sig3:	sig8:	sig13:	sig14:	sig15:	sig16:	 | ||||
| 		pea	retutrap | ||||
| 		mov	d1,-(sp) | ||||
| 		bra	error | ||||
| retutrap:	rtr | ||||
| 
 | ||||
| sig12:		pea	sig12 | ||||
| 		mov	#12,-(sp) | ||||
| 		bsr	_signal | ||||
| 		bsr	e_badmon | ||||
| 		rtr | ||||
| sig11:		move.l	4(a1),d0 | ||||
| 		sub.l	sp,d0 | ||||
| 		bcs	e_memflt	!in this case error handling possible | ||||
| 		move.l	ml,sp		!refresh stack and stop . | ||||
| 		bra	notrap1 | ||||
| 
 | ||||
							
								
								
									
										503
									
								
								mach/mantra/int/mloopc
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										503
									
								
								mach/mantra/int/mloopc
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,503 @@ | |||
| !THIS FILE CONTAINS THE SYSTEM CALLS FOR PMDS-II AS SUBROUTINES FOR THE | ||||
| !EM-INTERPRETER. a1 CONTAINS A POINTER TO THE RETURN AREA . EACH SUBROUTINE | ||||
| !EXPECTS ITS DATA IN THE FORM EM PRODUCES AND GIVES ITS RESULTS AS EM  | ||||
| !REQUIRES | ||||
| 
 | ||||
| _exit:		move.l	(sp),(a1) | ||||
| #ifndef lword | ||||
| 		bsr	st241 | ||||
| #endif | ||||
| 		trap	#0 | ||||
| 	.short	1 | ||||
| 
 | ||||
| _fork:		move.l	(sp),(a1) | ||||
| 		trap	#0 | ||||
| 	.short	2 | ||||
| 		lea	4(sp),sp | ||||
| 		bcs	2f | ||||
| 		tst.l	d0		!PID OF CHILD IN PARENT, 0 IN CHILD | ||||
| 		bne	1f | ||||
| 		trap	#0 | ||||
| 	.short	20 | ||||
| 		mov	d1,-(sp)	!PID OF PARENT IN d1 | ||||
| 		mov	#1,-(sp)	!(PID OF CHILD IN D0),FLAG 1 IN CHILD | ||||
| 		bra	0f | ||||
| 1:		mov	d0,-(sp)	!PID OF CHILD IN d0 | ||||
| 		cl	-(sp)		!FLAG 0 IN PARENT | ||||
| 0:		cl	-(sp) | ||||
| 		bra	3f | ||||
| 2:		mov	d0,-(sp) | ||||
| 		mov	d0,-(sp) | ||||
| 3:		move.l	(a1),a0 | ||||
| 		jmp	(a0) | ||||
| !_fork is special | ||||
| 
 | ||||
| _read:		move.l	(sp),(a1) | ||||
| #ifndef lword | ||||
| 		bsr	st241 | ||||
| #endif | ||||
| 		trap	#0 | ||||
| 	.short	3 | ||||
| sys0:		lea	16(sp),sp | ||||
| 		bcc	1f | ||||
| 		mov	d0,-(sp) | ||||
| 		mov	d0,-(sp) | ||||
| 		bra	2f | ||||
| 1:		move.l	d0,-(sp) | ||||
| 		cl	-(sp) | ||||
| 2:		move.l	(a1),a0 | ||||
| 		jmp	(a0) | ||||
| 
 | ||||
| _write:		move.l	(sp),(a1) | ||||
| #ifndef lword | ||||
| 		bsr	st241 | ||||
| #endif | ||||
| 		trap	#0 | ||||
| 	.short	4 | ||||
| 		bra	sys0 | ||||
| 
 | ||||
| _open:		move.l	(sp),(a1) | ||||
| #ifndef lword | ||||
| 		bsr	st243 | ||||
| #endif | ||||
| 		trap	#0 | ||||
| 	.short	5 | ||||
| sys1:		lea	12(sp),sp | ||||
| sys5:		bcc	1f | ||||
| 		mov	d0,-(sp) | ||||
| 		mov	d0,-(sp) | ||||
| 		bra	2f | ||||
| 1:		mov	d0,-(sp) | ||||
| 		cl	-(sp) | ||||
| 2:		move.l	(a1),a0 | ||||
| 		jmp	(a0) | ||||
| 
 | ||||
| _close:		move.l	(sp),(a1) | ||||
| #ifndef lword | ||||
| 		bsr	st241 | ||||
| #endif | ||||
| 		trap	#0 | ||||
| 	.short	6 | ||||
| sys3:		lea	8(sp),sp | ||||
| sys4:		bcc	1f | ||||
| 		mov	d0,-(sp) | ||||
| 		mov	d0,-(sp) | ||||
| 		bra	2f | ||||
| 1:		cl	-(sp) | ||||
| 2:		move.l	(a1),a0 | ||||
| 		jmp	(a0) | ||||
| 
 | ||||
| _wait:		move.l	(sp),(a1) | ||||
| 		trap	#0 | ||||
| 	.short	7 | ||||
| sys6:		lea	4(sp),sp | ||||
| 		bcc	1f | ||||
| 		mov	d0,-(sp) | ||||
| 		mov	d0,-(sp) | ||||
| 		bra	2f | ||||
| 1:		mov	d1,-(sp)		! ?? | ||||
| 		mov	d0,-(sp) | ||||
| 		cl	-(sp) | ||||
| 2:		move.l	(a1),a0 | ||||
| 		jmp	(a0) | ||||
| 
 | ||||
| _creat:		move.l	(sp),(a1) | ||||
| #ifndef lword | ||||
| 		bsr	st243 | ||||
| #endif | ||||
| 		trap	#0 | ||||
| 	.short	8 | ||||
| 		bra	sys1 | ||||
| 
 | ||||
| _link:		move.l	(sp),(a1) | ||||
| 		trap	#0 | ||||
| 	.short	9 | ||||
| 		lea	12(sp),sp | ||||
| 		bra	sys4 | ||||
| 
 | ||||
| _unlink:	move.l	(sp),(a1) | ||||
| 		trap	#0 | ||||
| 	.short	10 | ||||
| 		bra	sys3 | ||||
| 
 | ||||
| _chdir:		move.l	(sp),(a1) | ||||
| 		trap	#0 | ||||
| 	.short	12 | ||||
| 		bra	sys3 | ||||
| 
 | ||||
| _mknod:		move.l	(sp),(a1) | ||||
| #ifndef lword | ||||
| 		bsr	st244 | ||||
| #endif | ||||
| 		trap	#0 | ||||
| 	.short	14 | ||||
| 		lea	16(sp),sp | ||||
| 		bra	sys4 | ||||
| 
 | ||||
| _chmod:		move.l	(sp),(a1) | ||||
| #ifndef lword | ||||
| 		bsr	st243 | ||||
| #endif | ||||
| 		trap	#0 | ||||
| 	.short	15 | ||||
| 		lea	12(sp),sp | ||||
| 		bra	sys4 | ||||
| 
 | ||||
| _chown:		move.l	(sp),(a1) | ||||
| #ifndef lword | ||||
| 		bsr	st244 | ||||
| #endif | ||||
| 		trap	#0 | ||||
| 	.short	16 | ||||
| 		lea	16(sp),sp | ||||
| 		bra	sys4 | ||||
| 
 | ||||
| _break:		move.l	(sp),(a1) | ||||
| 		trap	#0 | ||||
| 	.short	17 | ||||
| 		lea	8(sp),sp | ||||
| 		bcc	1f | ||||
| 		mov	d0,-(sp) | ||||
| 		mov	d0,-(sp) | ||||
| 		bra	2f | ||||
| 1:		move.l	-4(sp),nd | ||||
| 		cl	-(sp) | ||||
| 2:		move.l	(a1),a0 | ||||
| 		jmp	(a0) | ||||
| 
 | ||||
| 	.data | ||||
| nd:	.long	endbss | ||||
| 	.text | ||||
| 
 | ||||
| _stat:		move.l	(sp),(a1) | ||||
| 		trap	#0 | ||||
| 	.short	18 | ||||
| 		lea	12(sp),sp | ||||
| 		bra	sys4 | ||||
| 
 | ||||
| _lseek:		move.l	(sp),(a1) | ||||
| #ifndef lword | ||||
| 		bsr	st245 | ||||
| #endif | ||||
| 		trap	#0 | ||||
| 	.short	19 | ||||
| 		lea	16(sp),sp | ||||
| 		bcc	1f | ||||
| 		mov	d0,-(sp) | ||||
| 		mov	d0,-(sp) | ||||
| 		bra	2f | ||||
| 1:		move.l	d1,-(sp) | ||||
| 		mov	d0,-(sp) | ||||
| 		cl	-(sp) | ||||
| 2:		move.l	(a1),a0 | ||||
| 		jmp	(a0) | ||||
| 
 | ||||
| 
 | ||||
| _getpid:	move.l	(sp),(a1) | ||||
| 		trap	#0 | ||||
| 	.short	20 | ||||
| 		add.l	#4,sp | ||||
| 		mov	d0,-(sp) | ||||
| 		move.l	(a1),a0 | ||||
| 		jmp	(a0) | ||||
| 
 | ||||
| _mount:		move.l	(sp),(a1) | ||||
| #ifndef lword | ||||
| 		bsr	st246 | ||||
| #endif | ||||
| 		trap	#0 | ||||
| 	.short	21 | ||||
| 		lea	16(sp),sp | ||||
| 		bra	sys4 | ||||
| 
 | ||||
| _umount:	move.l	(sp),(a1) | ||||
| 		trap	#0 | ||||
| 	.short	22 | ||||
| 		bra	sys3 | ||||
| 
 | ||||
| _setuid:	move.l	(sp),(a1) | ||||
| #ifndef lword | ||||
| 		bsr	st241 | ||||
| #endif | ||||
| 		trap	#0 | ||||
| 	.short	23 | ||||
| 		bra	sys3 | ||||
| 
 | ||||
| _getuid:	move.l	(sp),(a1) | ||||
| 		trap	#0 | ||||
| 	.short	24 | ||||
| sys7:		add.l	#4,sp | ||||
| 		mov	d1,-(sp) | ||||
| 		mov	d0,-(sp) | ||||
| 		move.l	(a1),a0 | ||||
| 		jmp	(a0) | ||||
| 
 | ||||
| _stime:		move.l	(sp),(a1) | ||||
| 		trap	#0 | ||||
| 	.short	25 | ||||
| 		bra	sys3 | ||||
| 
 | ||||
| _ptrace:	move.l	(sp),(a1) | ||||
| #ifndef lword | ||||
| 		bsr	st247 | ||||
| #endif | ||||
| 		trap	#0 | ||||
| 	.short	26 | ||||
| 		lea	20(sp),sp | ||||
| 		bra	sys5 | ||||
| 
 | ||||
| _alarm:		move.l	(sp),(a1) | ||||
| #ifndef lword | ||||
| 		sub.l	#2,sp | ||||
| 		clr.w	4(sp) | ||||
| #endif | ||||
| 		trap	#0 | ||||
| 	.short	27 | ||||
| 		lea	8(sp),sp | ||||
| 		mov	d0,-(sp) | ||||
| 		move.l	(a1),a0 | ||||
| 		jmp	(a0) | ||||
| 
 | ||||
| _fstat:		move.l	(sp),(a1) | ||||
| #ifndef lword | ||||
| 		bsr	st241 | ||||
| #endif | ||||
| 		trap	#0 | ||||
| 	.short	28 | ||||
| 		lea	12(sp),sp | ||||
| 		bra	sys4 | ||||
| 
 | ||||
| _pause:		trap	#0 | ||||
| 	.short	29 | ||||
| 		rts | ||||
| 
 | ||||
| _utime:		move.l	(sp),(a1) | ||||
| 		trap	#0 | ||||
| 	.short	30 | ||||
| 		lea	12(sp),sp | ||||
| 		bra	sys4 | ||||
| 
 | ||||
| _access:	move.l	(sp),(a1) | ||||
| #ifndef lword | ||||
| 		bsr	st248 | ||||
| #endif | ||||
| 		trap	#0 | ||||
| 	.short	33 | ||||
| 		lea	12(sp),sp | ||||
| 		bra	sys4 | ||||
| 
 | ||||
| _nice: | ||||
| #ifndef lword | ||||
| 		bsr	241 | ||||
| #endif | ||||
| 		trap	#0 | ||||
| 	.short	34 | ||||
| 		move.l	(sp)+,(sp) | ||||
| 		rts | ||||
| 
 | ||||
| _ftime:		move.l	(sp),(a1) | ||||
| 		trap	#0 | ||||
| 	.short	35 | ||||
| 		bra	sys3 | ||||
| 
 | ||||
| _sync:		trap	#0 | ||||
| 	.short	36 | ||||
| 		rts | ||||
| 
 | ||||
| _kill:		move.l	(sp),(a1) | ||||
| #ifndef lword | ||||
| 		bsr	st248 | ||||
| #endif | ||||
| 		trap	#0 | ||||
| 	.short	37 | ||||
| 		lea	12(sp),sp | ||||
| 		bra	sys4 | ||||
| 
 | ||||
| _dup:		move.l	(sp),(a1) | ||||
| #ifndef lword | ||||
| 		bsr	st248 | ||||
| #endif | ||||
| 		trap	#0 | ||||
| 	.short	38 | ||||
| 		bra	sys1 | ||||
| 
 | ||||
| _pipe:		move.l	(sp),(a1) | ||||
| 		trap	#0 | ||||
| 	.short	42 | ||||
| 		bra	sys6 | ||||
| 
 | ||||
| _times:		trap	#0 | ||||
| 	.short	43 | ||||
| 		move.l	(sp),a0 | ||||
| 		add.l	#8,sp | ||||
| 		jmp	(a0) | ||||
| 
 | ||||
| _profil:	trap	#0 | ||||
| 	.short	44 | ||||
| 		move.l	(sp),a0 | ||||
| 		lea	20(sp),sp | ||||
| 		jmp	(a0) | ||||
| 
 | ||||
| _setgid:	move.l	(sp),(a1) | ||||
| #ifndef	lword | ||||
| 		bsr	st241  | ||||
| #endif | ||||
| 		trap	#0 | ||||
| 	.short	46 | ||||
| 		bra	sys3 | ||||
| 
 | ||||
| _getgid:	move.l	(sp),(a1) | ||||
| 		trap	#0 | ||||
| 	.short	47 | ||||
| 		bra	sys7 | ||||
| 
 | ||||
| 
 | ||||
| _signal:	move.l	(sp)+,retaddr | ||||
| 		mov	(sp)+,d4 | ||||
| 		extend	d4 | ||||
| 		move.l	d4,-(sp) | ||||
| 		move.l	retaddr,-(sp) | ||||
| 		trap	#0 | ||||
| 	.short	48 | ||||
| 		mov	d0,-(sp) | ||||
| 		bne	1f | ||||
| 		mov	d0,-(sp) | ||||
| 1:		move.l	retaddr,a0 | ||||
| 		jmp	(a0) | ||||
| 	.data | ||||
| retaddr:  .long	0 | ||||
| 	.text | ||||
| 
 | ||||
| _acct:		move.l	(sp),(a1) | ||||
| 		trap	#0 | ||||
| 	.short	51 | ||||
| 		bra	sys3 | ||||
| _lock:		move.l	(sp),(a1) | ||||
| #ifndef	lword | ||||
| 		bsr	st241 | ||||
| #endif | ||||
| 		trap	#0 | ||||
| 	.short	53 | ||||
| 		bra	sys3 | ||||
| 
 | ||||
| _ioctl:		move.l	(sp),(a1) | ||||
| #ifndef	lword | ||||
| 		bsr	st248 | ||||
| #endif | ||||
| 		trap	#0 | ||||
| 	.short	54 | ||||
| 		lea	16(sp),sp | ||||
| 		bra	sys4 | ||||
| 
 | ||||
| _mpxcall:	move.l	(sp),(a1) | ||||
| #ifndef	lword | ||||
| 		bsr	st241 | ||||
| #endif | ||||
| 		trap	#0 | ||||
| 	.short	56 | ||||
| 		lea	12(sp),sp | ||||
| 		bra	sys4 | ||||
| 
 | ||||
| _exece:		move.l	(sp),(a1) | ||||
| 		trap	#0 | ||||
| 	.short	59 | ||||
| 		lea	16(sp),sp | ||||
| 		bra	sys4 | ||||
| 
 | ||||
| _umask:		move.l	(sp),(a1) | ||||
| #ifndef	lword | ||||
| 		bsr	st241 | ||||
| #endif | ||||
| 		trap	#0 | ||||
| 	.short	60 | ||||
| 		add.l	#8,sp | ||||
| 		mov	d0,-(sp) | ||||
| 		move.l	(a1),a0 | ||||
| 		jmp	(a0) | ||||
| 
 | ||||
| _chroot:	move.l	(sp),(a1) | ||||
| 		trap	#0 | ||||
| 	.short	61 | ||||
| 		bra	sys3 | ||||
| 
 | ||||
| 
 | ||||
| !---------------------------------------------------------------------------- | ||||
| !		STACK ADJUSTMENT FOR THE TWO BYTE INTERPRETER | ||||
| !----------------------------------------------------------------------------- | ||||
| #ifndef lword | ||||
| 
 | ||||
| st241:		sub.l	#2,sp | ||||
| 		move.l	2(sp),(sp) | ||||
| 		move.l	6(sp),4(sp) | ||||
| 		move.w	10(sp),d0 | ||||
| 		ext.l	d0 | ||||
| 		move.l	d0,8(sp) | ||||
| 		rts | ||||
| 
 | ||||
| st243:		sub.l	#2,sp | ||||
| 		move.l	2(sp),(sp) | ||||
| 		move.l	6(sp),4(sp) | ||||
| 		move.l	10(sp),8(sp) | ||||
| 		move.w	14(sp),d0 | ||||
| 		ext.l	d0 | ||||
| 		move.l	d0,12(sp) | ||||
| 		rts | ||||
| 
 | ||||
| st244:		move.l	(sp),-(sp) | ||||
| 		move.l	8(sp),4(sp) | ||||
| 		move.l	12(sp),8(sp) | ||||
| 		move.w	16(sp),d0 | ||||
| 		ext.l	d0 | ||||
| 		move.l	d0,12(sp) | ||||
| 		move.w	18(sp),d0 | ||||
| 		ext.l	d0 | ||||
| 		move.l	d0,16(sp) | ||||
| 		rts | ||||
| 
 | ||||
| st245:		move.l	(sp),-(sp) | ||||
| 		move.l	8(sp),4(sp) | ||||
| 		move.w	12(sp),d0 | ||||
| 		ext.l	d0 | ||||
| 		move.l	d0,8(sp) | ||||
| 		move.l	14(sp),12(sp) | ||||
| 		move.w	18(sp),d0 | ||||
| 		ext.l	d0 | ||||
| 		move.l	d0,16(sp) | ||||
| 		rts | ||||
| 
 | ||||
| st246:		sub.l	#2,sp | ||||
| 		move.l	2(sp),(sp) | ||||
| 		move.l	6(sp),4(sp) | ||||
| 		move.l	10(sp),8(sp) | ||||
| 		move.l	14(sp),12(sp) | ||||
| 		move.w	18(sp),d0 | ||||
| 		ext.l	d0 | ||||
| 		move.l	d0,16(sp) | ||||
| 		rts | ||||
| 
 | ||||
| st247:		sub.l	#6,sp | ||||
| 		move.l	6(sp),(sp) | ||||
| 		move.l	10(sp),4(sp) | ||||
| 		move.w	14(sp),d0 | ||||
| 		ext.l	d0 | ||||
| 		move.l	d0,8(sp) | ||||
| 		move.w	16(sp),d0 | ||||
| 		ext.l	d0 | ||||
| 		move.l	d0,12(sp) | ||||
| 		move.l	18(sp),16(sp) | ||||
| 		move.w	22(sp),d0 | ||||
| 		ext.l	d0 | ||||
| 		move.l	d0,20(sp) | ||||
| 		rts | ||||
| 
 | ||||
| st248:		move.l	(sp),-(sp) | ||||
| 		move.l	8(sp),4(sp) | ||||
| 		move.w	12(sp),d0 | ||||
| 		ext.l	d0 | ||||
| 		move.l	d0,8(sp) | ||||
| 		move.w	14(sp),d0 | ||||
| 		ext.l	d0 | ||||
| 		move.l	d0,12(sp) | ||||
| 		rts | ||||
| 
 | ||||
| #endif | ||||
							
								
								
									
										6
									
								
								mach/mantra/int/mloope
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								mach/mantra/int/mloope
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,6 @@ | |||
| 	.text | ||||
| end: | ||||
| 	.bss | ||||
| endbss: | ||||
| 	.data | ||||
| enddata: | ||||
							
								
								
									
										3
									
								
								mach/mantra/int/prep
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										3
									
								
								mach/mantra/int/prep
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,3 @@ | |||
| rm temp.c | ||||
| cat header deffile $1 >> temp.c | ||||
| cpp -P temp.c >$2 | ||||
		Loading…
	
	Add table
		
		Reference in a new issue