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