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