ack/lang/m2/libm2/ChkCards.e
2007-02-25 22:49:23 +00:00

132 lines
1.5 KiB
Plaintext

#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