683 lines
11 KiB
Text
683 lines
11 KiB
Text
;
|
|
; Copyright 1992 by Jutta Degener and Carsten Bormann, Technische
|
|
; Universitaet Berlin. See the accompanying file "COPYRIGHT" for
|
|
; details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
|
|
;
|
|
;
|
|
; Lines starting with ' (in the first col) are echoed.
|
|
; Lines starting with " (in the first col) are echoed to stderr.
|
|
; Lines starting with ; or empty lines are ignored.
|
|
;
|
|
; The part after (including) a trailing '=' is what you expect;
|
|
; there will be output if the result is different.
|
|
;
|
|
; - and + by itself mean MIN_WORD and MAX_WORD, respectively;
|
|
; -- and ++ mean MIN_LONGWORD and MAX_LONGWORD.
|
|
;
|
|
|
|
'test the basic arithmetic operations used for the rpe-ltd filtering.
|
|
'
|
|
'add ================
|
|
' basic
|
|
|
|
add 0 0 = 0
|
|
add 7 4 = 11
|
|
add 4 6 = 10
|
|
add 1 1 = 2
|
|
|
|
' negative operands
|
|
|
|
add -7 4 = -3
|
|
add 4 -6 = -2
|
|
add -1 -3 = -4
|
|
add 7 -4 = 3
|
|
add -4 6 = 2
|
|
|
|
' positive overflow
|
|
; (max-word = 32767)
|
|
add + 1 = +
|
|
add + + = +
|
|
add -1 + = 32766
|
|
add 32766 2 = +
|
|
add 1 32766 = +
|
|
|
|
' underflow
|
|
; (min-word = 32768)
|
|
|
|
add - -1 = -
|
|
add - - = -
|
|
add 1 - = -32767
|
|
add -32767 -2 = -
|
|
add -1 -32766 = -32767
|
|
add -32767 -1 = -
|
|
add - + = -1
|
|
add + - = -1
|
|
add 0 - = -
|
|
add 0 + = +
|
|
'
|
|
|
|
'L_add ================
|
|
' basic
|
|
|
|
L_add 0 0 = 0
|
|
L_add 7 4 = 11
|
|
L_add 4 6 = 10
|
|
L_add 1 1 = 2
|
|
|
|
' negative operands
|
|
|
|
L_add -7 4 = -3
|
|
L_add 4 -6 = -2
|
|
L_add -1 -3 = -4
|
|
L_add 7 -4 = 3
|
|
L_add -4 6 = 2
|
|
L_add 0 -1 = -1
|
|
|
|
' positive overflow
|
|
; (max-longword = 2147483647)
|
|
L_add ++ 1 = ++
|
|
L_add ++ ++ = ++
|
|
L_add -1 ++ = 2147483646
|
|
L_add 2147483646 2 = ++
|
|
L_add 1 2147483645 = 2147483646
|
|
|
|
' underflow
|
|
; (min-longword = -2147483648)
|
|
|
|
L_add -- -1 = --
|
|
L_add -- -- = --
|
|
L_add 1 -- = -2147483647
|
|
L_add -2147483647 -2 = --
|
|
L_add -1 -2147483646 = -2147483647
|
|
L_add -2147483647 -1 = --
|
|
L_add -- ++ = -1
|
|
L_add ++ -- = -1
|
|
L_add 0 -- = --
|
|
L_add 0 ++ = ++
|
|
'
|
|
|
|
'sub ================
|
|
' basic
|
|
|
|
sub 0 0 = 0
|
|
sub 7 4 = 3
|
|
sub 4 6 = -2
|
|
sub 1 0 = 1
|
|
|
|
' negative operands
|
|
|
|
sub -7 4 = -11
|
|
sub 4 -6 = 10
|
|
sub -1 -3 = 2
|
|
sub 7 -4 = 11
|
|
sub -4 6 = -10
|
|
|
|
' positive overflow
|
|
; (max-word = 32767)
|
|
sub 1 - = +
|
|
sub + + = 0
|
|
sub + 0 = +
|
|
sub + -1 = +
|
|
sub + 1 = 32766
|
|
sub 1 + = -32766
|
|
sub 0 + = -32767
|
|
|
|
' underflow
|
|
; (min-word = 32768)
|
|
|
|
sub - -1 = -32767
|
|
sub - 1 = -
|
|
sub - - = 0
|
|
sub - + = -
|
|
sub + - = +
|
|
sub 1 - = +
|
|
sub -1 - = +
|
|
sub -32767 2 = -
|
|
sub 0 - = +
|
|
'
|
|
|
|
'L_sub ================
|
|
' basic
|
|
|
|
L_sub 0 0 = 0
|
|
L_sub 7 4 = 3
|
|
L_sub 4 6 = -2
|
|
L_sub 1 0 = 1
|
|
|
|
' negative operands
|
|
|
|
L_sub -7 4 = -11
|
|
L_sub 4 -6 = 10
|
|
L_sub -1 -3 = 2
|
|
L_sub 7 -4 = 11
|
|
L_sub -4 6 = -10
|
|
|
|
' positive overflow
|
|
L_sub 1 -- = ++
|
|
L_sub ++ ++ = 0
|
|
L_sub ++ 0 = ++
|
|
L_sub ++ -1 = ++
|
|
L_sub ++ 1 = 2147483646
|
|
L_sub 1 ++ = -2147483646
|
|
L_sub 0 ++ = -2147483647
|
|
|
|
' underflow
|
|
|
|
L_sub -- -1 = -2147483647
|
|
L_sub -- 1 = --
|
|
L_sub -- -- = 0
|
|
L_sub -- ++ = --
|
|
L_sub + -- = ++
|
|
L_sub 1 -- = ++
|
|
L_sub -1 -- = ++
|
|
L_sub -2147483647 2 = --
|
|
L_sub 0 -- = ++
|
|
|
|
'
|
|
'abs ================
|
|
' basic
|
|
|
|
abs 0 = 0
|
|
abs 2 = 2
|
|
abs -459 = 459
|
|
|
|
' overflow
|
|
|
|
abs + = +
|
|
abs - = +
|
|
abs -32767 = +
|
|
abs 32766 = 32766
|
|
abs -32766 = 32766
|
|
|
|
'
|
|
'mult ================
|
|
; actually, a * b >> 15
|
|
|
|
' basic
|
|
mult 0 0 = 0
|
|
mult 0x100 0x100 = 2
|
|
mult 4711 0x4000 = 2355
|
|
|
|
' negative operands
|
|
mult -1 0 = 0
|
|
|
|
mult -0x100 0x100 = -2
|
|
mult 0x100 -0x100 = -2
|
|
mult -0x100 -0x100 = 2
|
|
|
|
mult -4711 0x4000 = -2356
|
|
mult 4711 -0x4000 = -2356
|
|
mult -4711 -0x4000 = 2355
|
|
|
|
' overflow
|
|
mult + + = 32766
|
|
mult + 0x4000 = 0x3fff
|
|
mult 0x4000 + = 0x3fff
|
|
mult + 1 = 0
|
|
mult + 2 = 1
|
|
mult + 3 = 2
|
|
|
|
' underflow
|
|
mult - - = +
|
|
mult - + = -32767
|
|
mult + - = -32767
|
|
mult - 1 = -1
|
|
mult - 2 = -2
|
|
mult - 3 = -3
|
|
|
|
'
|
|
'mult_r ================
|
|
; actually, (a * b + 16384) >> 15
|
|
|
|
' basic
|
|
mult_r 0 0 = 0
|
|
mult_r 0x100 0x100 = 2
|
|
mult_r 4711 0x4000 = 2356
|
|
|
|
' negative operands
|
|
mult_r -1 0 = 0
|
|
|
|
mult_r -0x100 0x100 = -2
|
|
mult_r 0x100 -0x100 = -2
|
|
mult_r -0x100 -0x100 = 2
|
|
|
|
mult_r -4711 0x4000 = -2355
|
|
mult_r 4711 -0x4000 = -2355
|
|
mult_r -4711 -0x4000 = 2356
|
|
|
|
' overflow
|
|
mult_r + + = 32766
|
|
mult_r + 32766 = 32765
|
|
mult_r 32766 + = 32765
|
|
mult_r + 0x4000 = 0x4000
|
|
mult_r 0x4000 + = 0x4000
|
|
mult_r + 0x4001 = 0x4000
|
|
mult_r 0x4001 + = 0x4000
|
|
mult_r + 2 = 2
|
|
mult_r + 1 = 1
|
|
mult_r 1 + = 1
|
|
mult_r + 0 = 0
|
|
mult_r 0 + = 0
|
|
|
|
' underflow
|
|
mult_r - - = +
|
|
mult_r - + = -32767
|
|
mult_r + - = -32767
|
|
mult_r - 1 = -1
|
|
mult_r - 2 = -2
|
|
mult_r - 3 = -3
|
|
|
|
'
|
|
'L_mult ================
|
|
; actually, (a * b) << 1
|
|
; assert (a != MIN_WORD && b != MIN_WORD)
|
|
|
|
' basic
|
|
L_mult 0 0 = 0
|
|
L_mult 2 3 = 12
|
|
L_mult 4711 5 = 47110
|
|
|
|
' negative operands
|
|
|
|
L_mult -2 3 = -12
|
|
L_mult 2 -3 = -12
|
|
L_mult -2 -3 = 12
|
|
L_mult -4711 5 = -47110
|
|
L_mult 4711 -5 = -47110
|
|
L_mult -4711 -5 = 47110
|
|
|
|
' overflow
|
|
L_mult + + = 2147352578
|
|
L_mult + -32767 = -2147352578
|
|
L_mult -32767 + = -2147352578
|
|
L_mult + 2 = 131068
|
|
L_mult + 1 = 65534
|
|
L_mult 1 + = 65534
|
|
L_mult + 0 = 0
|
|
L_mult 0 + = 0
|
|
|
|
'
|
|
'div ================
|
|
; actually, (32767 * a) / b
|
|
; assert (a > 0 && b >= a)
|
|
|
|
' basic
|
|
div 1 1 = +
|
|
div 4711 4711 = +
|
|
div 5 10 = 0x4000
|
|
div 5 20 = 0x2000
|
|
div 5 40 = 0x1000
|
|
|
|
' overflow
|
|
div + + = +
|
|
div 0x4000 + = 0x4000
|
|
div 1 + = 1
|
|
div 1 2 = 0x4000
|
|
'
|
|
'norm ================
|
|
|
|
' positive
|
|
norm 1 = 30
|
|
norm 2 = 29
|
|
norm 3 = 29
|
|
norm 4 = 28
|
|
norm 5 = 28
|
|
; etc, etc...
|
|
norm 0x08000000 = 3
|
|
norm 0x10000000 = 2
|
|
norm 0x20000000 = 1
|
|
norm 0x20000001 = 1
|
|
norm 0x3fffffff = 1
|
|
norm 0x40000000 = 0
|
|
norm 0x40000001 = 0
|
|
norm 0x4ffffffe = 0
|
|
norm ++ = 0
|
|
|
|
' negative
|
|
norm -1 = 31
|
|
norm -2 = 30
|
|
norm -3 = 29
|
|
norm -4 = 29
|
|
norm -5 = 28
|
|
; etc, etc...
|
|
norm 0x4fffffff = 0
|
|
norm -- = 0
|
|
'
|
|
'>> ================
|
|
|
|
' basic
|
|
>> 1 1 = 0
|
|
>> 4 2 = 1
|
|
>> 0x1100 5 = 0x88
|
|
|
|
' negative operand
|
|
|
|
>> 1 -1 = 2
|
|
>> 1 -2 = 4
|
|
>> 0x88 -5 = 0x1100
|
|
|
|
' overflow
|
|
>> -1 4711 = -1
|
|
>> 1 4711 = 0
|
|
>> -4711 4711 = -1
|
|
>> 4711 4711 = 0
|
|
>> + 1 = 16383
|
|
>> - 1 = -16384
|
|
'
|
|
'L_>> ================
|
|
|
|
' basic
|
|
L_>> 1 1 = 0
|
|
L_>> 4 2 = 1
|
|
L_>> 0x1100 5 = 0x88
|
|
|
|
' negative operand
|
|
|
|
L_>> 1 -1 = 2
|
|
L_>> 1 -2 = 4
|
|
L_>> 0x88 -5 = 0x1100
|
|
|
|
' overflow
|
|
L_>> -1 4711 = -1
|
|
L_>> 1 4711 = 0
|
|
L_>> -4711 4711 = -1
|
|
L_>> 4711 4711 = 0
|
|
L_>> ++ 1 = 1073741823
|
|
L_>> -- 1 = -1073741824
|
|
|
|
'
|
|
'<< ================
|
|
|
|
' basic
|
|
<< 1 1 = 2
|
|
<< 4 2 = 16
|
|
<< 0x0088 5 = 0x1100
|
|
|
|
' negative operand
|
|
|
|
<< 1 -1 = 0
|
|
<< 4 -2 = 1
|
|
<< 0x1100 -5 = 0x0088
|
|
|
|
' overflow
|
|
<< -1 4711 = 0
|
|
<< 1 4711 = 0
|
|
<< -4711 4711 = 0
|
|
<< 4711 4711 = 0
|
|
<< 4711 -4711 = 0
|
|
<< -4711 -4711 = -1
|
|
<< + 1 = 0xfffe
|
|
<< -1 1 = 0xfffe
|
|
<< - 1 = 0
|
|
'
|
|
'L_<< ================
|
|
|
|
' basic
|
|
L_<< 1 1 = 2
|
|
L_<< 4 2 = 16
|
|
L_<< 0x0088 5 = 0x1100
|
|
|
|
' negative operand
|
|
|
|
L_<< 1 -1 = 0
|
|
L_<< 4 -2 = 1
|
|
L_<< 0x1100 -5 = 0x0088
|
|
|
|
' overflow
|
|
L_<< -1 4711 = 0
|
|
L_<< 1 4711 = 0
|
|
L_<< -4711 4711 = 0
|
|
L_<< 4711 4711 = 0
|
|
L_<< 4711 -4711 = 0
|
|
L_<< -4711 -4711 = -1
|
|
L_<< ++ 1 = -2
|
|
L_<< -1 1 = -2
|
|
L_<< -- 1 = 0
|
|
|
|
'macros
|
|
'
|
|
'add ================
|
|
' basic
|
|
|
|
M_add 0 0 = 0
|
|
M_add 7 4 = 11
|
|
M_add 4 6 = 10
|
|
M_add 1 1 = 2
|
|
|
|
' negative operands
|
|
|
|
M_add -7 4 = -3
|
|
M_add 4 -6 = -2
|
|
M_add -1 -3 = -4
|
|
M_add 7 -4 = 3
|
|
M_add -4 6 = 2
|
|
|
|
' positive overflow
|
|
; (max-word = 32767)
|
|
M_add + 1 = +
|
|
M_add + + = +
|
|
M_add -1 + = 32766
|
|
M_add 32766 2 = +
|
|
M_add 1 32766 = +
|
|
|
|
' underflow
|
|
; (min-word = 32768)
|
|
|
|
M_add - -1 = -
|
|
M_add - - = -
|
|
M_add 1 - = -32767
|
|
M_add -32767 -2 = -
|
|
M_add -1 -32766 = -32767
|
|
M_add -32767 -1 = -
|
|
M_add - + = -1
|
|
M_add + - = -1
|
|
M_add 0 - = -
|
|
M_add 0 + = +
|
|
'
|
|
|
|
'L_add ================
|
|
' basic
|
|
|
|
M_L_add 0 0 = 0
|
|
M_L_add 7 4 = 11
|
|
M_L_add 4 6 = 10
|
|
M_L_add 1 1 = 2
|
|
|
|
' negative operands
|
|
|
|
M_L_add -7 4 = -3
|
|
M_L_add 4 -6 = -2
|
|
M_L_add -1 -3 = -4
|
|
M_L_add 7 -4 = 3
|
|
M_L_add -4 6 = 2
|
|
M_L_add 0 -1 = -1
|
|
|
|
' positive overflow
|
|
; (max-longword = 2147483647)
|
|
M_L_add ++ 1 = ++
|
|
M_L_add ++ ++ = ++
|
|
M_L_add -1 ++ = 2147483646
|
|
M_L_add 2147483646 2 = ++
|
|
M_L_add 1 2147483645 = 2147483646
|
|
|
|
' underflow
|
|
; (min-longword = -2147483648)
|
|
|
|
M_L_add -- -1 = --
|
|
M_L_add -- -- = --
|
|
M_L_add 1 -- = -2147483647
|
|
M_L_add -2147483647 -2 = --
|
|
M_L_add -1 -2147483646 = -2147483647
|
|
M_L_add -2147483647 -1 = --
|
|
M_L_add -- ++ = -1
|
|
M_L_add ++ -- = -1
|
|
M_L_add 0 -- = --
|
|
M_L_add 0 ++ = ++
|
|
'
|
|
|
|
'sub ================
|
|
' basic
|
|
|
|
M_sub 0 0 = 0
|
|
M_sub 7 4 = 3
|
|
M_sub 4 6 = -2
|
|
M_sub 1 0 = 1
|
|
|
|
' negative operands
|
|
|
|
M_sub -7 4 = -11
|
|
M_sub 4 -6 = 10
|
|
M_sub -1 -3 = 2
|
|
M_sub 7 -4 = 11
|
|
M_sub -4 6 = -10
|
|
|
|
' positive overflow
|
|
; (max-word = 32767)
|
|
M_sub 1 - = +
|
|
M_sub + + = 0
|
|
M_sub + 0 = +
|
|
M_sub + -1 = +
|
|
M_sub + 1 = 32766
|
|
M_sub 1 + = -32766
|
|
M_sub 0 + = -32767
|
|
|
|
' underflow
|
|
; (min-word = 32768)
|
|
|
|
M_sub - -1 = -32767
|
|
M_sub - 1 = -
|
|
M_sub - - = 0
|
|
M_sub - + = -
|
|
M_sub + - = +
|
|
M_sub 1 - = +
|
|
M_sub -1 - = +
|
|
M_sub -32767 2 = -
|
|
M_sub 0 - = +
|
|
'
|
|
'
|
|
'abs ================
|
|
' basic
|
|
|
|
M_abs 0 = 0
|
|
M_abs 2 = 2
|
|
M_abs -459 = 459
|
|
|
|
' overflow
|
|
|
|
M_abs + = +
|
|
M_abs - = +
|
|
M_abs -32767 = +
|
|
M_abs 32766 = 32766
|
|
M_abs -32766 = 32766
|
|
|
|
'
|
|
'mult ================
|
|
; actually, a * b >> 15
|
|
|
|
' basic
|
|
M_mult 0 0 = 0
|
|
M_mult 0x100 0x100 = 2
|
|
M_mult 4711 0x4000 = 2355
|
|
|
|
' negative operands
|
|
M_mult -1 0 = 0
|
|
|
|
M_mult -0x100 0x100 = -2
|
|
M_mult 0x100 -0x100 = -2
|
|
M_mult -0x100 -0x100 = 2
|
|
|
|
M_mult -4711 0x4000 = -2356
|
|
M_mult 4711 -0x4000 = -2356
|
|
M_mult -4711 -0x4000 = 2355
|
|
|
|
' overflow
|
|
M_mult + + = 32766
|
|
M_mult + 0x4000 = 0x3fff
|
|
M_mult 0x4000 + = 0x3fff
|
|
M_mult + 1 = 0
|
|
M_mult + 2 = 1
|
|
M_mult + 3 = 2
|
|
|
|
' underflow
|
|
; M_mult - - = + assert !(a == b && b == MIN_WORD)
|
|
M_mult - -32767 = +
|
|
M_mult -32767 - = +
|
|
M_mult - + = -32767
|
|
M_mult + - = -32767
|
|
M_mult - 1 = -1
|
|
M_mult - 2 = -2
|
|
M_mult - 3 = -3
|
|
|
|
'
|
|
'mult_r ================
|
|
; actually, (a * b + 16384) >> 15
|
|
|
|
' basic
|
|
M_mult_r 0 0 = 0
|
|
M_mult_r 0x100 0x100 = 2
|
|
M_mult_r 4711 0x4000 = 2356
|
|
|
|
' negative operands
|
|
M_mult_r -1 0 = 0
|
|
|
|
M_mult_r -0x100 0x100 = -2
|
|
M_mult_r 0x100 -0x100 = -2
|
|
M_mult_r -0x100 -0x100 = 2
|
|
|
|
M_mult_r -4711 0x4000 = -2355
|
|
M_mult_r 4711 -0x4000 = -2355
|
|
M_mult_r -4711 -0x4000 = 2356
|
|
|
|
' overflow
|
|
M_mult_r + + = 32766
|
|
M_mult_r + 32766 = 32765
|
|
M_mult_r 32766 + = 32765
|
|
M_mult_r + 0x4000 = 0x4000
|
|
M_mult_r 0x4000 + = 0x4000
|
|
M_mult_r + 0x4001 = 0x4000
|
|
M_mult_r 0x4001 + = 0x4000
|
|
M_mult_r + 2 = 2
|
|
M_mult_r + 1 = 1
|
|
M_mult_r 1 + = 1
|
|
M_mult_r + 0 = 0
|
|
M_mult_r 0 + = 0
|
|
|
|
' underflow
|
|
; M_mult_r - - = + assert !(a == b && b == MIN_WORD)
|
|
M_mult_r - -32767 = +
|
|
M_mult_r -32767 - = +
|
|
M_mult_r - + = -32767
|
|
M_mult_r + - = -32767
|
|
M_mult_r - 1 = -1
|
|
M_mult_r - 2 = -2
|
|
M_mult_r - 3 = -3
|
|
|
|
'
|
|
'L_mult ================
|
|
; actually, (a * b) << 1
|
|
; assert (a != MIN_WORD && b != MIN_WORD)
|
|
|
|
' basic
|
|
M_L_mult 0 0 = 0
|
|
M_L_mult 2 3 = 12
|
|
M_L_mult 4711 5 = 47110
|
|
|
|
' negative operands
|
|
|
|
M_L_mult -2 3 = -12
|
|
M_L_mult 2 -3 = -12
|
|
M_L_mult -2 -3 = 12
|
|
M_L_mult -4711 5 = -47110
|
|
M_L_mult 4711 -5 = -47110
|
|
M_L_mult -4711 -5 = 47110
|
|
|
|
' overflow
|
|
M_L_mult + + = 2147352578
|
|
M_L_mult + -32767 = -2147352578
|
|
M_L_mult -32767 + = -2147352578
|
|
M_L_mult + 2 = 131068
|
|
M_L_mult + 1 = 65534
|
|
M_L_mult 1 + = 65534
|
|
M_L_mult + 0 = 0
|
|
M_L_mult 0 + = 0
|
|
|