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