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