Home | History | Annotate | Download | only in add-test
      1 ;
      2 ; Copyright 1992 by Jutta Degener and Carsten Bormann, Technische
      3 ; Universitaet Berlin.  See the accompanying file "COPYRIGHT" for
      4 ; details.  THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
      5 ;
      6 ;
      7 ;	Lines starting with ' (in the first col) are echoed.
      8 ;	Lines starting with " (in the first col) are echoed to stderr.
      9 ;	Lines starting with ; or empty lines are ignored.
     10 ;
     11 ;	The part after (including) a trailing '=' is what you expect;
     12 ;	there will be output if the result is different.
     13 ;
     14 ;	-  and +  by itself mean MIN_WORD and MAX_WORD, respectively;
     15 ;	-- and ++ mean MIN_LONGWORD and MAX_LONGWORD.
     16 ;
     17 
     18 'test the basic arithmetic operations used for the rpe-ltd filtering.
     19 '
     20 'add ================
     21 '  basic
     22 
     23 	add  0  0 	=  0
     24 	add  7  4	= 11
     25 	add  4  6 	= 10
     26 	add  1  1 	=  2
     27 
     28 '  negative operands
     29 
     30 	add  -7  4	= -3
     31 	add   4 -6 	= -2
     32 	add  -1 -3 	= -4
     33 	add   7 -4	=  3
     34 	add  -4  6 	=  2
     35 
     36 '  positive overflow
     37 ; (max-word = 32767)
     38 	add  + 1	= +
     39 	add  + +	= +
     40 	add  -1 + 	= 32766
     41 	add  32766 2	= +
     42 	add  1 32766  	= +
     43 
     44 '  underflow
     45 ; (min-word = 32768)
     46 
     47 	add  - -1	= -
     48 	add  - -	= -
     49 	add  1 -	= -32767  
     50 	add  -32767 -2	= -
     51 	add  -1 -32766 	= -32767
     52 	add  -32767 -1	= -
     53 	add  - +	= -1
     54 	add  + -	= -1
     55 	add  0 -	= -
     56 	add  0 +	= +
     57 '
     58 
     59 'L_add ================
     60 '  basic 
     61 
     62 	L_add  0  0 	=  0
     63 	L_add  7  4	= 11
     64 	L_add  4  6 	= 10
     65 	L_add  1  1 	=  2
     66 
     67 '  negative operands
     68 
     69 	L_add  -7  4	= -3
     70 	L_add   4 -6 	= -2
     71 	L_add  -1 -3 	= -4
     72 	L_add   7 -4	=  3
     73 	L_add  -4  6 	=  2
     74 	L_add   0 -1 	= -1
     75 
     76 '  positive overflow
     77 ; (max-longword = 2147483647)
     78 	L_add  ++ 1	= ++
     79 	L_add  ++ ++	= ++
     80 	L_add  -1 ++ 	= 2147483646
     81 	L_add  2147483646 2 = ++
     82 	L_add  1 2147483645 = 2147483646
     83 
     84 '  underflow
     85 ; (min-longword = -2147483648)
     86 
     87 	L_add  -- -1	= --
     88 	L_add  -- --	= --
     89 	L_add  1 --	= -2147483647
     90 	L_add  -2147483647 -2	= --
     91 	L_add  -1 -2147483646 	= -2147483647
     92 	L_add  -2147483647 -1	= --
     93 	L_add  -- ++	= -1
     94 	L_add  ++ --	= -1
     95 	L_add  0 --	= --
     96 	L_add  0 ++	= ++
     97 '
     98 
     99 'sub ================
    100 '  basic 
    101 
    102 	sub  0  0 	=  0
    103 	sub  7  4	=  3
    104 	sub  4  6 	= -2
    105 	sub  1  0 	=  1
    106 
    107 '  negative operands
    108 
    109 	sub  -7  4	= -11
    110 	sub   4 -6 	=  10
    111 	sub  -1 -3 	=  2
    112 	sub   7 -4	=  11
    113 	sub  -4  6 	= -10
    114 
    115 '  positive overflow
    116 ; (max-word = 32767)
    117 	sub  1 -	= +
    118 	sub  + +	= 0
    119 	sub  + 0	= +
    120 	sub  + -1 	= +
    121 	sub  + 1 	= 32766
    122 	sub  1 + 	= -32766 
    123 	sub  0 +  	= -32767
    124 
    125 '  underflow
    126 ; (min-word = 32768)
    127 
    128 	sub  - -1	= -32767
    129 	sub  - 1	= -
    130 	sub  - -	= 0
    131 	sub  - +	= -
    132 	sub  + -	= +
    133 	sub  1 -	= +
    134 	sub  -1 -	= +
    135 	sub  -32767 2	= -
    136 	sub  0 -	= +
    137 ' 
    138 
    139 'L_sub ================
    140 '  basic 
    141 
    142 	L_sub  0  0 	=  0
    143 	L_sub  7  4	=  3
    144 	L_sub  4  6 	= -2
    145 	L_sub  1  0 	=  1
    146 
    147 '  negative operands
    148 
    149 	L_sub  -7  4	= -11
    150 	L_sub   4 -6 	=  10
    151 	L_sub  -1 -3 	=  2
    152 	L_sub   7 -4	=  11
    153 	L_sub  -4  6 	= -10
    154 
    155 '  positive overflow
    156 	L_sub  1 --	= ++
    157 	L_sub  ++ ++	= 0
    158 	L_sub  ++ 0	= ++
    159 	L_sub  ++ -1 	= ++
    160 	L_sub  ++ 1 	=  2147483646
    161 	L_sub  1 ++ 	= -2147483646
    162 	L_sub  0 ++  	= -2147483647
    163 
    164 '  underflow
    165 
    166 	L_sub  -- -1	= -2147483647
    167 	L_sub  -- 1	= --
    168 	L_sub  -- --	= 0
    169 	L_sub  -- ++	= --
    170 	L_sub  + --	= ++
    171 	L_sub  1 --	= ++
    172 	L_sub  -1 --	= ++
    173 	L_sub  -2147483647 2 = --
    174 	L_sub  0 --	= ++
    175 
    176 '
    177 'abs ================
    178 '  basic 
    179 
    180 	abs	   0	=   0
    181 	abs	   2	=   2
    182 	abs	-459	= 459
    183 
    184 '  overflow
    185 
    186 	abs	 +	=   +
    187 	abs	 -	=   +
    188 	abs 	-32767  =   +
    189 	abs 	 32766  = 32766
    190 	abs 	-32766  = 32766
    191 
    192 '
    193 'mult ================
    194 ;  actually, a * b >> 15
    195 
    196 '  basic 
    197 	mult	0  0		= 0
    198 	mult	0x100 0x100	= 2
    199 	mult	4711 0x4000	= 2355
    200 
    201 '  negative operands
    202 	mult	-1  0		=  0
    203 
    204 	mult	-0x100   0x100	= -2
    205 	mult	 0x100  -0x100	= -2
    206 	mult	-0x100  -0x100	=  2
    207 
    208 	mult	-4711   0x4000	= -2356
    209 	mult	 4711  -0x4000	= -2356
    210 	mult	-4711  -0x4000	=  2355
    211 
    212 '  overflow
    213 	mult	+ + 	 = 32766
    214 	mult	+ 0x4000 = 0x3fff
    215 	mult	0x4000 + = 0x3fff
    216 	mult	+ 1	 = 0
    217 	mult	+ 2	 = 1
    218 	mult	+ 3	 = 2
    219 
    220 '  underflow
    221 	mult	- - 	 = +
    222 	mult	- + 	 = -32767
    223 	mult	+ - 	 = -32767
    224 	mult	- 1	 = -1
    225 	mult	- 2	 = -2
    226 	mult	- 3	 = -3
    227 
    228 '
    229 'mult_r ================
    230 ;  actually, (a * b + 16384) >> 15
    231 
    232 '  basic 
    233 	mult_r	0  0		= 0
    234 	mult_r	0x100 0x100	= 2
    235 	mult_r	4711 0x4000	= 2356
    236 
    237 '  negative operands
    238 	mult_r	-1  0		=  0
    239 
    240 	mult_r	-0x100   0x100	= -2
    241 	mult_r	 0x100  -0x100	= -2
    242 	mult_r	-0x100  -0x100	=  2
    243 
    244 	mult_r	-4711   0x4000	= -2355
    245 	mult_r	 4711  -0x4000	= -2355
    246 	mult_r	-4711  -0x4000	=  2356
    247 
    248 '  overflow
    249 	mult_r	+ + 	 = 32766
    250 	mult_r	+ 32766	 = 32765
    251 	mult_r	32766 +	 = 32765
    252 	mult_r	+ 0x4000 = 0x4000
    253 	mult_r	0x4000 + = 0x4000
    254 	mult_r	+ 0x4001 = 0x4000
    255 	mult_r	0x4001 + = 0x4000
    256 	mult_r	+ 2	 = 2
    257 	mult_r	+ 1	 = 1
    258 	mult_r	1 +	 = 1
    259 	mult_r	+ 0	 = 0
    260 	mult_r	0 +	 = 0
    261 
    262 '  underflow
    263 	mult_r	- - 	 = +
    264 	mult_r	- + 	 = -32767
    265 	mult_r	+ - 	 = -32767
    266 	mult_r	- 1	 = -1
    267 	mult_r	- 2	 = -2
    268 	mult_r	- 3	 = -3
    269 
    270 '
    271 'L_mult ================
    272 ;  actually, (a * b) << 1
    273 ;  assert (a != MIN_WORD && b != MIN_WORD)
    274 
    275 '  basic 
    276 	L_mult	0  0	= 0
    277 	L_mult	2  3	= 12
    278 	L_mult	4711 5	= 47110
    279 
    280 '  negative operands
    281 
    282 	L_mult	-2  3	= -12
    283 	L_mult	 2 -3	= -12
    284 	L_mult	-2 -3	=  12
    285 	L_mult -4711  5	= -47110
    286 	L_mult	4711 -5	= -47110
    287 	L_mult -4711 -5	=  47110
    288 
    289 '  overflow
    290 	L_mult	+ + 	 = 2147352578
    291 	L_mult	+ -32767 = -2147352578
    292 	L_mult	-32767 + = -2147352578
    293 	L_mult	+ 2	 = 131068
    294 	L_mult	+ 1	 = 65534
    295 	L_mult	1 +	 = 65534
    296 	L_mult	+ 0	 = 0
    297 	L_mult	0 +	 = 0
    298 
    299 '
    300 'div ================
    301 ;  actually, (32767 * a) / b
    302 ;  assert (a > 0 && b >= a)
    303 
    304 '  basic 
    305 	div	1 1		= +
    306 	div	4711 4711 	= +
    307 	div	5 10		= 0x4000
    308 	div	5 20		= 0x2000
    309 	div	5 40		= 0x1000
    310 
    311 '  overflow
    312 	div	+ + 		= +
    313 	div	0x4000 +	= 0x4000
    314 	div	1 +		= 1
    315 	div	1 2		= 0x4000
    316 '
    317 'norm ================
    318 
    319 '  positive
    320 	norm	1		= 30
    321 	norm	2		= 29
    322 	norm	3		= 29
    323 	norm	4		= 28
    324 	norm	5		= 28
    325 ; etc, etc...
    326 	norm	0x08000000	= 3
    327 	norm	0x10000000	= 2
    328 	norm	0x20000000	= 1
    329 	norm	0x20000001	= 1
    330 	norm	0x3fffffff	= 1
    331 	norm	0x40000000	= 0
    332 	norm	0x40000001	= 0
    333 	norm	0x4ffffffe	= 0
    334 	norm	++		= 0
    335 
    336 '  negative
    337 	norm	-1		= 31
    338 	norm	-2		= 30
    339 	norm	-3		= 29
    340 	norm	-4		= 29
    341 	norm	-5		= 28
    342 ; etc, etc...
    343 	norm	0x4fffffff	= 0
    344 	norm	--		= 0
    345 '
    346 '>> ================
    347 
    348 '  basic 
    349 	>>	1 1		= 0
    350 	>>	4 2		= 1
    351 	>>	0x1100 5	= 0x88
    352 
    353 '  negative operand
    354 
    355 	>>	1 -1		= 2
    356 	>>	1 -2		= 4
    357 	>>	0x88 -5		= 0x1100
    358 
    359 '  overflow
    360 	>>	-1 4711		= -1
    361 	>>	1  4711		= 0
    362 	>>	-4711 4711 	= -1
    363 	>>	4711 4711 	= 0
    364 	>>	+ 1		=  16383
    365 	>>	- 1		= -16384
    366 '
    367 'L_>> ================
    368 
    369 '  basic 
    370 	L_>>	1 1		= 0
    371 	L_>>	4 2		= 1
    372 	L_>>	0x1100 5	= 0x88
    373 
    374 '  negative operand
    375 
    376 	L_>>	1 -1		= 2
    377 	L_>>	1 -2		= 4
    378 	L_>>	0x88 -5		= 0x1100
    379 
    380 '  overflow
    381 	L_>>	-1 4711		= -1
    382 	L_>>	1  4711		= 0
    383 	L_>>	-4711 4711 	= -1
    384 	L_>>	4711 4711 	= 0
    385 	L_>>	++ 1		=  1073741823
    386 	L_>>	-- 1		= -1073741824
    387 
    388 '
    389 '<< ================
    390 
    391 '  basic 
    392 	<<	1 1		= 2
    393 	<<	4 2		= 16
    394 	<<	0x0088 5	= 0x1100
    395 
    396 '  negative operand
    397 
    398 	<<	1 -1		= 0
    399 	<<	4 -2		= 1
    400 	<<	0x1100 -5	= 0x0088
    401 
    402 '  overflow
    403 	<<	-1 4711		= 0
    404 	<<	1  4711		= 0
    405 	<<	-4711 4711 	= 0
    406 	<<	4711 4711 	= 0
    407 	<<	4711 -4711 	= 0
    408 	<<	-4711 -4711 	= -1
    409 	<<	+ 1		= 0xfffe
    410 	<<	-1 1		= 0xfffe
    411 	<<	- 1		= 0
    412 '
    413 'L_<< ================
    414 
    415 '  basic 
    416 	L_<<	1 1		= 2
    417 	L_<<	4 2		= 16
    418 	L_<<	0x0088 5	= 0x1100
    419 
    420 '  negative operand
    421 
    422 	L_<<	1 -1		= 0
    423 	L_<<	4 -2		= 1
    424 	L_<<	0x1100 -5	= 0x0088
    425 
    426 '  overflow
    427 	L_<<	-1 4711		= 0
    428 	L_<<	1  4711		= 0
    429 	L_<<	-4711 4711 	= 0
    430 	L_<<	4711 4711 	= 0
    431 	L_<<	4711 -4711 	= 0
    432 	L_<<	-4711 -4711 	= -1
    433 	L_<<	++ 1		= -2
    434 	L_<<	-1 1		= -2
    435 	L_<<	-- 1		= 0
    436 
    437 'macros
    438 '
    439 'add ================
    440 '  basic
    441 
    442 	M_add  0  0 	=  0
    443 	M_add  7  4	= 11
    444 	M_add  4  6 	= 10
    445 	M_add  1  1 	=  2
    446 
    447 '  negative operands
    448 
    449 	M_add  -7  4	= -3
    450 	M_add   4 -6 	= -2
    451 	M_add  -1 -3 	= -4
    452 	M_add   7 -4	=  3
    453 	M_add  -4  6 	=  2
    454 
    455 '  positive overflow
    456 ; (max-word = 32767)
    457 	M_add  + 1	= +
    458 	M_add  + +	= +
    459 	M_add  -1 + 	= 32766
    460 	M_add  32766 2	= +
    461 	M_add  1 32766  	= +
    462 
    463 '  underflow
    464 ; (min-word = 32768)
    465 
    466 	M_add  - -1	= -
    467 	M_add  - -	= -
    468 	M_add  1 -	= -32767  
    469 	M_add  -32767 -2 = -
    470 	M_add  -1 -32766 = -32767
    471 	M_add  -32767 -1 = -
    472 	M_add  - +	= -1
    473 	M_add  + -	= -1
    474 	M_add  0 -	= -
    475 	M_add  0 +	= +
    476 '
    477 
    478 'L_add ================
    479 '  basic 
    480 
    481 	M_L_add  0  0 	=  0
    482 	M_L_add  7  4	= 11
    483 	M_L_add  4  6 	= 10
    484 	M_L_add  1  1 	=  2
    485 
    486 '  negative operands
    487 
    488 	M_L_add  -7  4	= -3
    489 	M_L_add   4 -6 	= -2
    490 	M_L_add  -1 -3 	= -4
    491 	M_L_add   7 -4	=  3
    492 	M_L_add  -4  6 	=  2
    493 	M_L_add   0 -1 	= -1
    494 
    495 '  positive overflow
    496 ; (max-longword = 2147483647)
    497 	M_L_add  ++ 1	= ++
    498 	M_L_add  ++ ++	= ++
    499 	M_L_add  -1 ++ 	= 2147483646
    500 	M_L_add  2147483646 2 = ++
    501 	M_L_add  1 2147483645 = 2147483646
    502 
    503 '  underflow
    504 ; (min-longword = -2147483648)
    505 
    506 	M_L_add  -- -1	= --
    507 	M_L_add  -- --	= --
    508 	M_L_add  1 --	= -2147483647
    509 	M_L_add  -2147483647 -2	= --
    510 	M_L_add  -1 -2147483646 	= -2147483647
    511 	M_L_add  -2147483647 -1	= --
    512 	M_L_add  -- ++	= -1
    513 	M_L_add  ++ --	= -1
    514 	M_L_add  0 --	= --
    515 	M_L_add  0 ++	= ++
    516 '
    517 
    518 'sub ================
    519 '  basic 
    520 
    521 	M_sub  0  0 	=  0
    522 	M_sub  7  4	=  3
    523 	M_sub  4  6 	= -2
    524 	M_sub  1  0 	=  1
    525 
    526 '  negative operands
    527 
    528 	M_sub  -7  4	= -11
    529 	M_sub   4 -6 	=  10
    530 	M_sub  -1 -3 	=  2
    531 	M_sub   7 -4	=  11
    532 	M_sub  -4  6 	= -10
    533 
    534 '  positive overflow
    535 ; (max-word = 32767)
    536 	M_sub  1 -	= +
    537 	M_sub  + +	= 0
    538 	M_sub  + 0	= +
    539 	M_sub  + -1 	= +
    540 	M_sub  + 1 	= 32766
    541 	M_sub  1 + 	= -32766 
    542 	M_sub  0 +  	= -32767
    543 
    544 '  underflow
    545 ; (min-word = 32768)
    546 
    547 	M_sub  - -1	= -32767
    548 	M_sub  - 1	= -
    549 	M_sub  - -	= 0
    550 	M_sub  - +	= -
    551 	M_sub  + -	= +
    552 	M_sub  1 -	= +
    553 	M_sub  -1 -	= +
    554 	M_sub  -32767 2	= -
    555 	M_sub  0 -	= +
    556 ' 
    557 '
    558 'abs ================
    559 '  basic 
    560 
    561 	M_abs	   0	=   0
    562 	M_abs	   2	=   2
    563 	M_abs	-459	= 459
    564 
    565 '  overflow
    566 
    567 	M_abs	 +	=   +
    568 	M_abs	 -	=   +
    569 	M_abs 	-32767  =   +
    570 	M_abs 	 32766  = 32766
    571 	M_abs 	-32766  = 32766
    572 
    573 '
    574 'mult ================
    575 ;  actually, a * b >> 15
    576 
    577 '  basic 
    578 	M_mult	0  0		= 0
    579 	M_mult	0x100 0x100	= 2
    580 	M_mult	4711 0x4000	= 2355
    581 
    582 '  negative operands
    583 	M_mult	-1  0		=  0
    584 
    585 	M_mult	-0x100   0x100	= -2
    586 	M_mult	 0x100  -0x100	= -2
    587 	M_mult	-0x100  -0x100	=  2
    588 
    589 	M_mult	-4711   0x4000	= -2356
    590 	M_mult	 4711  -0x4000	= -2356
    591 	M_mult	-4711  -0x4000	=  2355
    592 
    593 '  overflow
    594 	M_mult	+ + 	 = 32766
    595 	M_mult	+ 0x4000 = 0x3fff
    596 	M_mult	0x4000 + = 0x3fff
    597 	M_mult	+ 1	 = 0
    598 	M_mult	+ 2	 = 1
    599 	M_mult	+ 3	 = 2
    600 
    601 '  underflow
    602 ;	M_mult - - 	= +			assert !(a == b && b == MIN_WORD)
    603  	M_mult - -32767	= +
    604  	M_mult -32767 -	= +
    605 	M_mult	- + 	= -32767
    606 	M_mult	+ - 	= -32767
    607 	M_mult	- 1	= -1
    608 	M_mult	- 2	= -2
    609 	M_mult	- 3	= -3
    610 
    611 '
    612 'mult_r ================
    613 ;  actually, (a * b + 16384) >> 15
    614 
    615 '  basic 
    616 	M_mult_r 0  0		= 0
    617 	M_mult_r 0x100 0x100	= 2
    618 	M_mult_r 4711 0x4000	= 2356
    619 
    620 '  negative operands
    621 	M_mult_r -1  0		=  0
    622 
    623 	M_mult_r -0x100   0x100	= -2
    624 	M_mult_r  0x100  -0x100	= -2
    625 	M_mult_r -0x100  -0x100	=  2
    626 
    627 	M_mult_r -4711   0x4000	= -2355
    628 	M_mult_r  4711  -0x4000	= -2355
    629 	M_mult_r -4711  -0x4000	=  2356
    630 
    631 '  overflow
    632 	M_mult_r + + 	 = 32766
    633 	M_mult_r + 32766  = 32765
    634 	M_mult_r 32766 +  = 32765
    635 	M_mult_r + 0x4000 = 0x4000
    636 	M_mult_r 0x4000 + = 0x4000
    637 	M_mult_r + 0x4001 = 0x4000
    638 	M_mult_r 0x4001 + = 0x4000
    639 	M_mult_r + 2	 = 2
    640 	M_mult_r + 1	 = 1
    641 	M_mult_r 1 +	 = 1
    642 	M_mult_r + 0	 = 0
    643 	M_mult_r 0 +	 = 0
    644 
    645 '  underflow
    646 ;	M_mult_r - - 	 = +			assert !(a == b && b == MIN_WORD)
    647  	M_mult_r - -32767 = +
    648  	M_mult_r -32767 - = +
    649 	M_mult_r - + 	 = -32767
    650 	M_mult_r + - 	 = -32767
    651 	M_mult_r - 1	 = -1
    652 	M_mult_r - 2	 = -2
    653 	M_mult_r - 3	 = -3
    654 
    655 '
    656 'L_mult ================
    657 ;  actually, (a * b) << 1
    658 ;  assert (a != MIN_WORD && b != MIN_WORD)
    659 
    660 '  basic 
    661 	M_L_mult	0  0	= 0
    662 	M_L_mult	2  3	= 12
    663 	M_L_mult	4711 5	= 47110
    664 
    665 '  negative operands
    666 
    667 	M_L_mult	-2  3	= -12
    668 	M_L_mult	 2 -3	= -12
    669 	M_L_mult	-2 -3	=  12
    670 	M_L_mult -4711  5	= -47110
    671 	M_L_mult	4711 -5	= -47110
    672 	M_L_mult -4711 -5	=  47110
    673 
    674 '  overflow
    675  	M_L_mult	+ + 	 = 2147352578
    676 	M_L_mult	+ -32767 = -2147352578
    677 	M_L_mult	-32767 + = -2147352578
    678 	M_L_mult	+ 2	 = 131068
    679 	M_L_mult	+ 1	 = 65534
    680 	M_L_mult	1 +	 = 65534
    681 	M_L_mult	+ 0	 = 0
    682 	M_L_mult	0 +	 = 0
    683 
    684