| ; |
| ; 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 |
| |