131 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			131 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
#include <m2_traps.h>
 | 
						|
;
 | 
						|
; (c) copyright 1988 by the Vrije Universiteit, Amsterdam, The Netherlands.
 | 
						|
; See the copyright notice in the ACK home directory, in the file "Copyright".
 | 
						|
;
 | 
						|
;
 | 
						|
; Module:	CARDINAL operations with overflow checking
 | 
						|
; Author:	Ceriel J.H. Jacobs
 | 
						|
; Version:	$Header$
 | 
						|
;
 | 
						|
 | 
						|
 mes 2,EM_WSIZE,EM_PSIZE
 | 
						|
 | 
						|
 exp $addu
 | 
						|
 exp $subu
 | 
						|
 exp $mulu
 | 
						|
#if EM_WSIZE < EM_LSIZE
 | 
						|
 exp $addul
 | 
						|
 exp $subul
 | 
						|
 exp $mulul
 | 
						|
#endif
 | 
						|
 | 
						|
 pro $addu,0
 | 
						|
 loc -1
 | 
						|
 lol 0
 | 
						|
 sbu EM_WSIZE
 | 
						|
 lol EM_WSIZE
 | 
						|
 cmu EM_WSIZE
 | 
						|
 zge *1
 | 
						|
 loc M2_UOVFL
 | 
						|
 trp
 | 
						|
1
 | 
						|
 lol 0
 | 
						|
 lol EM_WSIZE
 | 
						|
 adu EM_WSIZE
 | 
						|
 stl EM_WSIZE
 | 
						|
 ret 0
 | 
						|
 end 0
 | 
						|
 | 
						|
#if EM_WSIZE < EM_LSIZE
 | 
						|
 pro $addul,0
 | 
						|
 ldc -1
 | 
						|
 ldl 0
 | 
						|
 sbu EM_LSIZE
 | 
						|
 ldl EM_LSIZE
 | 
						|
 cmu EM_LSIZE
 | 
						|
 zge *1
 | 
						|
 loc M2_UOVFL
 | 
						|
 trp
 | 
						|
1
 | 
						|
 ldl 0
 | 
						|
 ldl EM_LSIZE
 | 
						|
 adu EM_LSIZE
 | 
						|
 sdl EM_LSIZE
 | 
						|
 ret 0
 | 
						|
 end 0
 | 
						|
#endif
 | 
						|
 | 
						|
 pro $mulu,0
 | 
						|
 lol 0
 | 
						|
 zeq *1
 | 
						|
 loc -1
 | 
						|
 lol 0
 | 
						|
 dvu EM_WSIZE
 | 
						|
 lol EM_WSIZE
 | 
						|
 cmu EM_WSIZE
 | 
						|
 zge *1
 | 
						|
 loc M2_UOVFL
 | 
						|
 trp
 | 
						|
1
 | 
						|
 lol 0
 | 
						|
 lol EM_WSIZE
 | 
						|
 mlu EM_WSIZE
 | 
						|
 stl EM_WSIZE
 | 
						|
 ret 0
 | 
						|
 end 0
 | 
						|
 | 
						|
#if EM_WSIZE < EM_LSIZE
 | 
						|
 pro $mulul,0
 | 
						|
 ldl 0
 | 
						|
 ldc 0
 | 
						|
 cmu EM_LSIZE
 | 
						|
 zeq *1
 | 
						|
 ldc -1
 | 
						|
 ldl 0
 | 
						|
 dvu EM_LSIZE
 | 
						|
 ldl EM_LSIZE
 | 
						|
 cmu EM_LSIZE
 | 
						|
 zge *1
 | 
						|
 loc M2_UOVFL
 | 
						|
 trp
 | 
						|
1
 | 
						|
 ldl 0
 | 
						|
 ldl EM_LSIZE
 | 
						|
 mlu EM_LSIZE
 | 
						|
 sdl EM_LSIZE
 | 
						|
 ret 0
 | 
						|
 end 0
 | 
						|
#endif
 | 
						|
 | 
						|
 pro $subu,0
 | 
						|
 lol EM_WSIZE
 | 
						|
 lol 0
 | 
						|
 cmu EM_WSIZE
 | 
						|
 zge *1
 | 
						|
 loc M2_UUVFL
 | 
						|
 trp
 | 
						|
1
 | 
						|
 lol EM_WSIZE
 | 
						|
 lol 0
 | 
						|
 sbu EM_WSIZE
 | 
						|
 stl EM_WSIZE
 | 
						|
 ret 0
 | 
						|
 end 0
 | 
						|
 | 
						|
#if EM_WSIZE < EM_LSIZE
 | 
						|
 pro $subul,0
 | 
						|
 ldl EM_LSIZE
 | 
						|
 ldl 0
 | 
						|
 cmu EM_LSIZE
 | 
						|
 zge *1
 | 
						|
 loc M2_UUVFL
 | 
						|
 trp
 | 
						|
1
 | 
						|
 ldl EM_LSIZE
 | 
						|
 ldl 0
 | 
						|
 sbu EM_LSIZE
 | 
						|
 sdl EM_LSIZE
 | 
						|
 ret 0
 | 
						|
 end 0
 | 
						|
#endif
 |