This source file includes following definitions.
- getbits36
- getbits36_1
- getbits36_2
- getbits36_3
- getbits36_4
- getbits36_5
- getbits36_6
- getbits36_7
- getbits36_8
- getbits36_9
- getbits36_10
- getbits36_12
- getbits36_14
- getbits36_15
- getbits36_16
- getbits36_18
- getbits36_24
- getbits36_28
- setbits36
- setbits36_1
- setbits36_4
- setbits36_5
- setbits36_6
- setbits36_8
- setbits36_9
- setbits36_16
- setbits36_24
- putbits36
- putbits36_1
- putbits36_2
- putbits36_3
- putbits36_4
- putbits36_5
- putbits36_6
- putbits36_7
- putbits36_8
- putbits36_9
- putbits36_10
- putbits36_12
- putbits36_13
- putbits36_14
- putbits36_15
- putbits36_16
- putbits36_17
- putbits36_18
- putbits36_23
- putbits36_24
- putbits36_28
- putbits72
- getbits18
- putbits18
- setmask
- clrmask
   1 
   2 
   3 
   4 
   5 
   6 
   7 
   8 
   9 
  10 
  11 
  12 
  13 
  14 
  15 
  16 
  17 
  18 
  19 
  20 
  21 
  22 
  23 
  24 typedef struct config_value_list_s
  25   {
  26     const char * value_name;
  27     int64_t value;
  28   } config_value_list_t;
  29 
  30 typedef struct config_list_s
  31   {
  32     const char * name;  
  33     int64_t min, max;   
  34     config_value_list_t * value_list;
  35   } config_list_t;
  36 
  37 typedef struct config_state_s
  38   {
  39     char * copy;
  40     char * statement_save;
  41   } config_state_t;
  42 
  43 int cfg_parse (const char * tag, const char * cptr, config_list_t * clist, config_state_t * state, int64_t * result);
  44 void cfg_parse_done (config_state_t * state);
  45 
  46 struct opcode_s * get_iwb_info (DCDstruct *i);
  47 char * dump_flags(char * buffer, word18 flags);
  48 char *disassemble(char * result, word36 instruction);
  49 char *get_mod_string(char * msg, word6 tag);
  50 word72 convert_to_word72 (word36 even, word36 odd);
  51 void convert_to_word36 (word72 src, word36 *even, word36 *odd);
  52 
  53 word36 compl36(word36 op1, word18 *flags, bool * ovf);
  54 word18 compl18(word18 op1, word18 *flags, bool * ovf);
  55 
  56 void copyBytes(int posn, word36 src, word36 *dst);
  57 void copyChars(int posn, word36 src, word36 *dst);
  58 
  59 void putByte(word36 *dst, word9 data, int posn);
  60 void putChar(word36 *dst, word6 data, int posn);
  61 
  62 void cmp36(word36 op1, word36 op2, word18 *flags);
  63 void cmp36wl(word36 A, word36 Y, word36 Q, word18 *flags);
  64 void cmp18(word18 op1, word18 op2, word18 *flags);
  65 void cmp72(word72 op1, word72 op2, word18 *flags);
  66 
  67 char *strlower(char *q);
  68 int strmask(char *str, char *mask);
  69 char *Strtok(char *, char *);
  70 char *stripquotes(char *s);
  71 char *trim(char *s);
  72 char *ltrim(char *s);
  73 char *rtrim(char *s);
  74 
  75 
  76 
  77 
  78 
  79 
  80 
  81 
  82 
  83 
  84 
  85 
  86 
  87 
  88 
  89 
  90 
  91 
  92 
  93 
  94 
  95 
  96 
  97 
  98 
  99 
 100 
 101 
 102 
 103 
 104 
 105 
 106 
 107 
 108 
 109 
 110 
 111 
 112 
 113 
 114 
 115 
 116 
 117 
 118 
 119 
 120 
 121 static inline word36 getbits36(word36 x, uint i, uint n) {
     
 122     
 123     int shift = 35-(int)i-(int)n+1;
 124     if (shift < 0 || shift > 35) {
 125         sim_printf ("getbits36: bad args (%012llu,i=%d,n=%d)\n", (unsigned long long)x, i, n);
 126         return 0;
 127     } else
 128         return (x >> (unsigned) shift) & ~ (~0U << n);
 129 }
 130 
 131 static inline word1 getbits36_1 (word36 x, uint i)
     
 132   {
 133     
 134     int shift = 35-(int)i;
 135     if (shift < 0 || shift > 35) {
 136         sim_printf ("getbits36_1: bad args (%012llu,i=%d)\n", (unsigned long long)x, i);
 137         return 0;
 138     } else
 139         return (x >> (unsigned) shift) & 01;
 140   }
 141 
 142 static inline word2 getbits36_2 (word36 x, uint i)
     
 143   {
 144     
 145     int shift = 35-(int)i-(int)2+1;
 146     if (shift < 0 || shift > 35) {
 147         sim_printf ("getbits36_2: bad args (%012llu,i=%d)\n", (unsigned long long)x, i);
 148         return 0;
 149     } else
 150         return (x >> (unsigned) shift) & 03;
 151   }
 152 
 153 static inline word3 getbits36_3 (word36 x, uint i)
     
 154   {
 155     
 156     int shift = 35-(int)i-(int)3+1;
 157     if (shift < 0 || shift > 35) {
 158         sim_printf ("getbits36_3: bad args (%012llu,i=%d)\n", (unsigned long long)x, i);
 159         return 0;
 160     } else
 161         return (x >> (unsigned) shift) & 07;
 162   }
 163 
 164 static inline word4 getbits36_4 (word36 x, uint i)
     
 165   {
 166     
 167     int shift = 35-(int)i-(int)4+1;
 168     if (shift < 0 || shift > 35) {
 169         sim_printf ("getbits36_4: bad args (%012llu,i=%d)\n", (unsigned long long)x, i);
 170         return 0;
 171     } else
 172         return (x >> (unsigned) shift) & 017;
 173   }
 174 
 175 static inline word5 getbits36_5 (word36 x, uint i)
     
 176   {
 177     
 178     int shift = 35-(int)i-(int)5+1;
 179     if (shift < 0 || shift > 35) {
 180         sim_printf ("getbits36_5: bad args (%012llu,i=%d)\n", (unsigned long long)x, i);
 181         return 0;
 182     } else
 183         return (x >> (unsigned) shift) & 037;
 184   }
 185 
 186 static inline word6 getbits36_6 (word36 x, uint i)
     
 187   {
 188     
 189     int shift = 35-(int)i-(int)6+1;
 190     if (shift < 0 || shift > 35) {
 191         sim_printf ("getbits36_6: bad args (%012llu,i=%d)\n", (unsigned long long)x, i);
 192         return 0;
 193     } else
 194         return (x >> (unsigned) shift) & 077;
 195   }
 196 
 197 static inline word7 getbits36_7 (word36 x, uint i)
     
 198   {
 199     
 200     int shift = 35-(int)i-(int)7+1;
 201     if (shift < 0 || shift > 35) {
 202         sim_printf ("getbits36_7: bad args (%012llu,i=%d)\n", (unsigned long long)x, i);
 203         return 0;
 204     } else
 205         return (x >> (unsigned) shift) & 0177;
 206   }
 207 
 208 static inline word8 getbits36_8 (word36 x, uint i)
     
 209   {
 210     
 211     int shift = 35-(int)i-(int)8+1;
 212     if (shift < 0 || shift > 35) {
 213         sim_printf ("getbits36_8: bad args (%012llu,i=%d)\n", (unsigned long long)x, i);
 214         return 0;
 215     } else
 216         return (x >> (unsigned) shift) & 0377;
 217   }
 218 
 219 static inline word9 getbits36_9 (word36 x, uint i)
     
 220   {
 221     
 222     int shift = 35-(int)i-(int)9+1;
 223     if (shift < 0 || shift > 35) {
 224         sim_printf ("getbits36_9: bad args (%012llu,i=%d)\n", (unsigned long long)x, i);
 225         return 0;
 226     } else
 227         return (x >> (unsigned) shift) & 0777;
 228   }
 229 
 230 static inline word10 getbits36_10 (word36 x, uint i)
     
 231   {
 232     
 233     int shift = 35-(int)i-(int)10+1;
 234     if (shift < 0 || shift > 35) {
 235         sim_printf ("getbits36_10: bad args (%012llu,i=%d)\n", (unsigned long long)x, i);
 236         return 0;
 237     } else
 238         return (x >> (unsigned) shift) & 01777;
 239   }
 240 
 241 static inline word12 getbits36_12 (word36 x, uint i)
     
 242   {
 243     
 244     int shift = 35-(int)i-(int)12+1;
 245     if (shift < 0 || shift > 35) {
 246         sim_printf ("getbits36_12: bad args (%012llu,i=%d)\n", (unsigned long long)x, i);
 247         return 0;
 248     } else
 249         return (x >> (unsigned) shift) & 07777;
 250   }
 251 
 252 static inline word14 getbits36_14 (word36 x, uint i)
     
 253   {
 254     
 255     int shift = 35-(int)i-(int)14+1;
 256     if (shift < 0 || shift > 35) {
 257         sim_printf ("getbits36_14: bad args (%012llu,i=%d)\n", (unsigned long long)x, i);
 258         return 0;
 259     } else
 260         return (x >> (unsigned) shift) & 037777;
 261   }
 262 
 263 static inline word15 getbits36_15 (word36 x, uint i)
     
 264   {
 265     
 266     int shift = 35-(int)i-(int)15+1;
 267     if (shift < 0 || shift > 35) {
 268         sim_printf ("getbits36_15: bad args (%012llu,i=%d)\n", (unsigned long long)x, i);
 269         return 0;
 270     } else
 271         return (x >> (unsigned) shift) & 077777;
 272   }
 273 
 274 static inline word16 getbits36_16 (word36 x, uint i)
     
 275   {
 276     
 277     int shift = 35-(int)i-(int)16+1;
 278     if (shift < 0 || shift > 35) {
 279         sim_printf ("getbits36_16: bad args (%012llu,i=%d)\n", (unsigned long long)x, i);
 280         return 0;
 281     } else
 282         return (x >> (unsigned) shift) & 0177777;
 283   }
 284 
 285 static inline word18 getbits36_18 (word36 x, uint i)
     
 286   {
 287     
 288     int shift = 35-(int)i-(int)18+1;
 289     if (shift < 0 || shift > 35) {
 290         sim_printf ("getbits36_18: bad args (%012llu,i=%d)\n", (unsigned long long)x, i);
 291         return 0;
 292     } else
 293         return (x >> (unsigned) shift) & 0777777;
 294   }
 295 
 296 static inline word24 getbits36_24 (word36 x, uint i)
     
 297   {
 298     
 299     int shift = 35-(int)i-(int)24+1;
 300     if (shift < 0 || shift > 35) {
 301         sim_printf ("getbits36_24: bad args (%012llu,i=%d)\n", (unsigned long long)x, i);
 302         return 0;
 303     } else
 304         return (x >> (unsigned) shift) & MASK24;
 305   }
 306 
 307 static inline word28 getbits36_28 (word36 x, uint i)
     
 308   {
 309     
 310     int shift = 35-(int)i-(int)28+1;
 311     if (shift < 0 || shift > 35) {
 312         sim_printf ("getbits36_28: bad args (%012llu,i=%d)\n", (unsigned long long)x, i);
 313         return 0;
 314     } else
 315         return (x >> (unsigned) shift) & 01777777777;
 316   }
 317 
 318 static inline word36 setbits36(word36 x, uint p, uint n, word36 val)
     
 319 {
 320     int shift = 36 - (int) p - (int) n;
 321     if (shift < 0 || shift > 35) {
 322         sim_printf ("setbits36: bad args (%012llu,pos=%d,n=%d)\n", (unsigned long long)x, p, n);
 323         return 0;
 324     }
 325     word36 mask = ~ (~0U<<n);  
 326     mask <<= (unsigned) shift;  
 327     
 328     
 329     word36 result = (x & ~ mask) | ((val&MASKBITS(n)) << (36 - p - n));
 330     return result;
 331 }
 332 
 333 static inline word36 setbits36_1 (word36 x, uint p, word1 val)
     
 334 {
 335     const int n = 1;
 336     int shift = 36 - (int) p - (int) n;
 337     if (shift < 0 || shift > 35) {
 338         sim_printf ("setbits36_1: bad args (%012llu,pos=%d)\n", (unsigned long long)x, p);
 339         return 0;
 340     }
 341     word36 mask = ~ (~0U<<n);  
 342     word36 smask = mask << (unsigned) shift;  
 343     
 344     
 345     word36 result = (x & ~ smask) | (((word36) val & mask) << shift);
 346     return result;
 347 }
 348 
 349 static inline word36 setbits36_4 (word36 x, uint p, word4 val)
     
 350 {
 351     const int n = 4;
 352     int shift = 36 - (int) p - (int) n;
 353     if (shift < 0 || shift > 35) {
 354         sim_printf ("setbits36_4: bad args (%012llu,pos=%d)\n", (unsigned long long)x, p);
 355         return 0;
 356     }
 357     word36 mask = ~ (~0U<<n);  
 358     word36 smask = mask << (unsigned) shift;  
 359     
 360     
 361     word36 result = (x & ~ smask) | (((word36) val & mask) << shift);
 362     return result;
 363 }
 364 
 365 static inline word36 setbits36_5 (word36 x, uint p, word5 val)
     
 366 {
 367     const int n = 5;
 368     int shift = 36 - (int) p - (int) n;
 369     if (shift < 0 || shift > 35) {
 370         sim_printf ("setbits36_5: bad args (%012llu,pos=%d)\n", (unsigned long long)x, p);
 371         return 0;
 372     }
 373     word36 mask = ~ (~0U<<n);  
 374     word36 smask = mask << (unsigned) shift;  
 375     
 376     
 377     word36 result = (x & ~ smask) | (((word36) val & mask) << shift);
 378     return result;
 379 }
 380 
 381 static inline word36 setbits36_6 (word36 x, uint p, word6 val)
     
 382 {
 383     const int n = 6;
 384     int shift = 36 - (int) p - (int) n;
 385     if (shift < 0 || shift > 35) {
 386         sim_printf ("setbits36_6: bad args (%012llu,pos=%d)\n", (unsigned long long)x, p);
 387         return 0;
 388     }
 389     word36 mask = ~ (~0U<<n);  
 390     word36 smask = mask << (unsigned) shift;  
 391     
 392     
 393     word36 result = (x & ~ smask) | (((word36) val & mask) << shift);
 394     return result;
 395 }
 396 
 397 static inline word36 setbits36_8 (word36 x, uint p, word8 val)
     
 398 {
 399     const int n = 8;
 400     int shift = 36 - (int) p - (int) n;
 401     if (shift < 0 || shift > 35) {
 402         sim_printf ("setbits36_8: bad args (%012llu,pos=%d)\n", (unsigned long long)x, p);
 403         return 0;
 404     }
 405     word36 mask = ~ (~0U<<n);  
 406     word36 smask = mask << (unsigned) shift;  
 407     
 408     
 409     word36 result = (x & ~ smask) | (((word36) val & mask) << shift);
 410     return result;
 411 }
 412 
 413 static inline word36 setbits36_9 (word36 x, uint p, word9 val)
     
 414 {
 415     const int n = 9;
 416     int shift = 36 - (int) p - (int) n;
 417     if (shift < 0 || shift > 35) {
 418         sim_printf ("setbits36_9: bad args (%012llu,pos=%d)\n", (unsigned long long)x, p);
 419         return 0;
 420     }
 421     word36 mask = ~ (~0U<<n);  
 422     word36 smask = mask << (unsigned) shift;  
 423     
 424     
 425     word36 result = (x & ~ smask) | (((word36) val & mask) << shift);
 426     return result;
 427 }
 428 
 429 static inline word36 setbits36_16 (word36 x, uint p, word16 val)
     
 430 {
 431     const int n = 16;
 432     int shift = 36 - (int) p - (int) n;
 433     if (shift < 0 || shift > 35) {
 434         sim_printf ("setbits36_16: bad args (%012llu,pos=%d)\n", (unsigned long long)x, p);
 435         return 0;
 436     }
 437     word36 mask = ~ (~0U<<n);  
 438     word36 smask = mask << (unsigned) shift;  
 439     
 440     
 441     word36 result = (x & ~ smask) | (((word36) val & mask) << shift);
 442     return result;
 443 }
 444 
 445 static inline word36 setbits36_24 (word36 x, uint p, word24 val)
     
 446 {
 447     const int n = 24;
 448     int shift = 36 - (int) p - (int) n;
 449     if (shift < 0 || shift > 35) {
 450         sim_printf ("setbits36_24: bad args (%012llu,pos=%d)\n", (unsigned long long)x, p);
 451         return 0;
 452     }
 453     word36 mask = ~ (~0U<<n);  
 454     word36 smask = mask << (unsigned) shift;  
 455     
 456     
 457     word36 result = (x & ~ smask) | (((word36) val & mask) << shift);
 458     return result;
 459 }
 460 
 461 static inline void putbits36 (word36 * x, uint p, uint n, word36 val)
     
 462   {
 463     int shift = 36 - (int) p - (int) n;
 464     if (shift < 0 || shift > 35)
 465       {
 466         sim_printf ("putbits36: bad args (%012llu,pos=%d,n=%d)\n", (unsigned long long)*x, p, n);
 467         return;
 468       }
 469     word36 mask = ~ (~0U << n);  
 470     mask <<= (unsigned) shift;  
 471     
 472     
 473     * x = (* x & ~mask) | ((val & MASKBITS (n)) << (36 - p - n));
 474     return;
 475   }
 476 
 477 static inline void putbits36_1 (word36 * x, uint p, word1 val)
     
 478 {
 479     const int n = 1;
 480     int shift = 36 - (int) p - (int) n;
 481     if (shift < 0 || shift > 35) {
 482         sim_printf ("putbits36_1: bad args (%012llu,pos=%d)\n", (unsigned long long)*x, p);
 483         return;
 484     }
 485     word36 mask = ~ (~0U<<n);  
 486     word36 smask = mask << (unsigned) shift;  
 487     
 488     
 489     * x = (* x & ~ smask) | (((word36) val & mask) << shift);
 490 }
 491 
 492 static inline void putbits36_2 (word36 * x, uint p, word2 val)
     
 493 {
 494     const int n = 2;
 495     int shift = 36 - (int) p - (int) n;
 496     if (shift < 0 || shift > 35) {
 497         sim_printf ("putbits36_2: bad args (%012llu,pos=%d)\n", (unsigned long long)*x, p);
 498         return;
 499     }
 500     word36 mask = ~ (~0U<<n);  
 501     word36 smask = mask << (unsigned) shift;  
 502     
 503     
 504     * x = (* x & ~ smask) | (((word36) val & mask) << shift);
 505 }
 506 
 507 static inline void putbits36_3 (word36 * x, uint p, word3 val)
     
 508 {
 509     const int n = 3;
 510     int shift = 36 - (int) p - (int) n;
 511     if (shift < 0 || shift > 35) {
 512         sim_printf ("putbits36_3: bad args (%012llu,pos=%d)\n", (unsigned long long)*x, p);
 513         return;
 514     }
 515     word36 mask = ~ (~0U<<n);  
 516     word36 smask = mask << (unsigned) shift;  
 517     
 518     
 519     * x = (* x & ~ smask) | (((word36) val & mask) << shift);
 520 }
 521 
 522 static inline void putbits36_4 (word36 * x, uint p, word4 val)
     
 523 {
 524     const int n = 4;
 525     int shift = 36 - (int) p - (int) n;
 526     if (shift < 0 || shift > 35) {
 527         sim_printf ("putbits36_4: bad args (%012llu,pos=%d)\n", (unsigned long long)*x, p);
 528         return;
 529     }
 530     word36 mask = ~ (~0U<<n);  
 531     word36 smask = mask << (unsigned) shift;  
 532     
 533     
 534     * x = (* x & ~ smask) | (((word36) val & mask) << shift);
 535 }
 536 
 537 static inline void putbits36_5 (word36 * x, uint p, word5 val)
     
 538 {
 539     const int n = 5;
 540     int shift = 36 - (int) p - (int) n;
 541     if (shift < 0 || shift > 35) {
 542         sim_printf ("putbits36_5: bad args (%012llu,pos=%d)\n", (unsigned long long)*x, p);
 543         return;
 544     }
 545     word36 mask = ~ (~0U<<n);  
 546     word36 smask = mask << (unsigned) shift;  
 547     
 548     
 549     * x = (* x & ~ smask) | (((word36) val & mask) << shift);
 550 }
 551 
 552 static inline void putbits36_6 (word36 * x, uint p, word6 val)
     
 553 {
 554     const int n = 6;
 555     int shift = 36 - (int) p - (int) n;
 556     if (shift < 0 || shift > 35) {
 557         sim_printf ("putbits36_6: bad args (%012llu,pos=%d)\n", (unsigned long long)*x, p);
 558         return;
 559     }
 560     word36 mask = ~ (~0U<<n);  
 561     word36 smask = mask << (unsigned) shift;  
 562     
 563     
 564     * x = (* x & ~ smask) | (((word36) val & mask) << shift);
 565 }
 566 
 567 static inline void putbits36_7 (word36 * x, uint p, word7 val)
     
 568 {
 569     const int n = 7;
 570     int shift = 36 - (int) p - (int) n;
 571     if (shift < 0 || shift > 35) {
 572         sim_printf ("putbits36_7: bad args (%012llu,pos=%d)\n", (unsigned long long)*x, p);
 573         return;
 574     }
 575     word36 mask = ~ (~0U<<n);  
 576     word36 smask = mask << (unsigned) shift;  
 577     
 578     
 579     * x = (* x & ~ smask) | (((word36) val & mask) << shift);
 580 }
 581 
 582 static inline void putbits36_8 (word36 * x, uint p, word8 val)
     
 583 {
 584     const int n = 8;
 585     int shift = 36 - (int) p - (int) n;
 586     if (shift < 0 || shift > 35) {
 587         sim_printf ("putbits36_8: bad args (%012llu,pos=%d)\n", (unsigned long long)*x, p);
 588         return;
 589     }
 590     word36 mask = ~ (~0U<<n);  
 591     word36 smask = mask << (unsigned) shift;  
 592     
 593     
 594     * x = (* x & ~ smask) | (((word36) val & mask) << shift);
 595 }
 596 
 597 static inline void putbits36_9 (word36 * x, uint p, word9 val)
     
 598 {
 599     const int n = 9;
 600     int shift = 36 - (int) p - (int) n;
 601     if (shift < 0 || shift > 35) {
 602         sim_printf ("putbits36_9: bad args (%012llu,pos=%d)\n", (unsigned long long)*x, p);
 603         return;
 604     }
 605     word36 mask = ~ (~0U<<n);  
 606     word36 smask = mask << (unsigned) shift;  
 607     
 608     
 609 #ifndef __OPEN64__
 610 # ifdef __GNUC__
 611 #  ifndef __clang_version__
 612 #   if __GNUC__ > 3
 613 #    pragma GCC diagnostic push
 614 #    pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
 615 #   endif 
 616 #  endif 
 617 # endif 
 618 #endif 
 619     * x = (* x & ~ smask) | (((word36) val & mask) << shift);
 620 #ifndef __OPEN64__
 621 # ifdef __GNUC__
 622 #  ifndef __clang_version__
 623 #   if __GNUC__ > 3
 624 #    pragma GCC diagnostic pop
 625 #   endif 
 626 #  endif 
 627 # endif 
 628 #endif 
 629 }
 630 
 631 static inline void putbits36_10 (word36 * x, uint p, word10 val)
     
 632 {
 633     const int n = 10;
 634     int shift = 36 - (int) p - (int) n;
 635     if (shift < 0 || shift > 35) {
 636         sim_printf ("putbits36_10: bad args (%012llu,pos=%d)\n", (unsigned long long)*x, p);
 637         return;
 638     }
 639     word36 mask = ~ (~0U<<n);  
 640     word36 smask = mask << (unsigned) shift;  
 641     
 642     
 643     * x = (* x & ~ smask) | (((word36) val & mask) << shift);
 644 }
 645 
 646 static inline void putbits36_12 (word36 * x, uint p, word12 val)
     
 647 {
 648     const int n = 12;
 649     int shift = 36 - (int) p - (int) n;
 650     if (shift < 0 || shift > 35) {
 651         sim_printf ("putbits36_12: bad args (%012llu,pos=%d)\n", (unsigned long long)*x, p);
 652         return;
 653     }
 654     word36 mask = ~ (~0U<<n);  
 655     word36 smask = mask << (unsigned) shift;  
 656     
 657     
 658     * x = (* x & ~ smask) | (((word36) val & mask) << shift);
 659 }
 660 
 661 static inline void putbits36_13 (word36 * x, uint p, word13 val)
     
 662 {
 663     const int n = 13;
 664     int shift = 36 - (int) p - (int) n;
 665     if (shift < 0 || shift > 35) {
 666         sim_printf ("putbits36_13: bad args (%012llu,pos=%d)\n", (unsigned long long)*x, p);
 667         return;
 668     }
 669     word36 mask = ~ (~0U<<n);  
 670     word36 smask = mask << (unsigned) shift;  
 671     
 672     
 673     * x = (* x & ~ smask) | (((word36) val & mask) << shift);
 674 }
 675 
 676 static inline void putbits36_14 (word36 * x, uint p, word14 val)
     
 677 {
 678     const int n = 14;
 679     int shift = 36 - (int) p - (int) n;
 680     if (shift < 0 || shift > 35) {
 681         sim_printf ("putbits36_14: bad args (%012llu,pos=%d)\n", (unsigned long long)*x, p);
 682         return;
 683     }
 684     word36 mask = ~ (~0U<<n);  
 685     word36 smask = mask << (unsigned) shift;  
 686     
 687     
 688     * x = (* x & ~ smask) | (((word36) val & mask) << shift);
 689 }
 690 
 691 static inline void putbits36_15 (word36 * x, uint p, word15 val)
     
 692 {
 693     const int n = 15;
 694     int shift = 36 - (int) p - (int) n;
 695     if (shift < 0 || shift > 35) {
 696         sim_printf ("putbits36_15: bad args (%012llu,pos=%d)\n", (unsigned long long)*x, p);
 697         return;
 698     }
 699     word36 mask = ~ (~0U<<n);  
 700     word36 smask = mask << (unsigned) shift;  
 701     
 702     
 703     * x = (* x & ~ smask) | (((word36) val & mask) << shift);
 704 }
 705 
 706 static inline void putbits36_16 (word36 * x, uint p, word16 val)
     
 707 {
 708     const int n = 16;
 709     int shift = 36 - (int) p - (int) n;
 710     if (shift < 0 || shift > 35) {
 711         sim_printf ("putbits36_16: bad args (%012llu,pos=%d)\n", (unsigned long long)*x, p);
 712         return;
 713     }
 714     word36 mask = ~ (~0U<<n);  
 715     word36 smask = mask << (unsigned) shift;  
 716     
 717     
 718     * x = (* x & ~ smask) | (((word36) val & mask) << shift);
 719 }
 720 
 721 static inline void putbits36_17 (word36 * x, uint p, word17 val)
     
 722 {
 723     const int n = 17;
 724     int shift = 36 - (int) p - (int) n;
 725     if (shift < 0 || shift > 35) {
 726         sim_printf ("putbits36_17: bad args (%012llu,pos=%d)\n", (unsigned long long)*x, p);
 727         return;
 728     }
 729     word36 mask = ~ (~0U<<n);  
 730     word36 smask = mask << (unsigned) shift;  
 731     
 732     
 733     * x = (* x & ~ smask) | (((word36) val & mask) << shift);
 734 }
 735 
 736 static inline void putbits36_18 (word36 * x, uint p, word18 val)
     
 737 {
 738     const int n = 18;
 739     int shift = 36 - (int) p - (int) n;
 740     if (shift < 0 || shift > 35) {
 741         sim_printf ("putbits36_18: bad args (%012llu,pos=%d)\n", (unsigned long long)*x, p);
 742         return;
 743     }
 744     word36 mask = ~ (~0U<<n);  
 745     word36 smask = mask << (unsigned) shift;  
 746     
 747     
 748     * x = (* x & ~ smask) | (((word36) val & mask) << shift);
 749 }
 750 
 751 static inline void putbits36_23 (word36 * x, uint p, word23 val)
     
 752 {
 753     const int n = 23;
 754     int shift = 36 - (int) p - (int) n;
 755     if (shift < 0 || shift > 35) {
 756         sim_printf ("putbits36_23: bad args (%012llu,pos=%d)\n", (unsigned long long)*x, p);
 757         return;
 758     }
 759     word36 mask = ~ (~0U<<n);  
 760     word36 smask = mask << (unsigned) shift;  
 761     
 762     
 763     * x = (* x & ~ smask) | (((word36) val & mask) << shift);
 764 }
 765 
 766 static inline void putbits36_24 (word36 * x, uint p, word24 val)
     
 767 {
 768     const int n = 24;
 769     int shift = 36 - (int) p - (int) n;
 770     if (shift < 0 || shift > 35) {
 771         sim_printf ("putbits36_24: bad args (%012llu,pos=%d)\n", (unsigned long long)*x, p);
 772         return;
 773     }
 774     word36 mask = ~ (~0U<<n);  
 775     word36 smask = mask << (unsigned) shift;  
 776     
 777     
 778     * x = (* x & ~ smask) | (((word36) val & mask) << shift);
 779 }
 780 
 781 static inline void putbits36_28 (word36 * x, uint p, word28 val)
     
 782 {
 783     const int n = 28;
 784     int shift = 36 - (int) p - (int) n;
 785     if (shift < 0 || shift > 35) {
 786         sim_printf ("putbits36_28: bad args (%012llu,pos=%d)\n", (unsigned long long)*x, p);
 787         return;
 788     }
 789     word36 mask = ~ (~0U<<n);  
 790     word36 smask = mask << (unsigned) shift;  
 791     
 792     
 793     * x = (* x & ~ smask) | (((word36) val & mask) << shift);
 794 }
 795 
 796 static inline void putbits72 (word72 * x, uint p, uint n, word72 val)
     
 797   {
 798     int shift = 72 - (int) p - (int) n;
 799     if (shift < 0 || shift > 71)
 800       {
 801         sim_printf ("putbits72: bad args (pos=%d,n=%d)\n", p, n);
 802         return;
 803       }
 804 #ifdef NEED_128
 805 
 806     uint64_t lowmask = 0;
 807     uint64_t highmask = 0;
 808     if (n >= 64)
 809       {
 810         lowmask = MASK64;
 811         highmask = ~ ((~(uint64_t)0) << n);
 812         highmask &= 0377U;
 813       }
 814     else
 815       {
 816         lowmask = ~ ((~(uint64_t)0) << n);
 817       }
 818     word72 mask = construct_128 (highmask, lowmask);
 819     mask = lshift_128 (mask, (uint) shift);
 820     word72 notmask = complement_128 (mask);
 821     * x = or_128 (and_128 (* x, notmask), and_128 (lshift_128 (val, 72 - p - n), mask));
 822 #else
 823     word72 mask = ~ ((~(word72)0) << n);  
 824     mask <<= (unsigned) shift;  
 825     
 826     
 827     * x = (* x & ~mask) | ((val & MASKBITS72 (n)) << (72 - p - n));
 828 #endif
 829     return;
 830   }
 831 
 832 
 833 
 834 static inline word18 getbits18 (word18 x, uint i, uint n)
     
 835   {
 836     
 837     int shift = 17 - (int) i - (int) n + 1;
 838     if (shift < 0 || shift > 17)
 839       {
 840         sim_printf ("getbits18: bad args (%06o,i=%d,n=%d)\n", x, i, n);
 841         return 0;
 842       }
 843     else
 844       return (x >> (unsigned) shift) & ~ (~0U << n);
 845   }
 846 
 847 
 848 
 849 static inline void putbits18 (word18 * x, uint p, uint n, word18 val)
     
 850   {
 851     int shift = 18 - (int) p - (int) n;
 852     if (shift < 0 || shift > 17)
 853       {
 854         sim_printf ("putbits18: bad args (%06o,pos=%d,n=%d)\n", * x, p, n);
 855         return;
 856       }
 857     word18 mask = ~ (~0U << n);  
 858     mask <<= (unsigned) shift;  
 859     
 860     
 861     * x = (* x & ~mask) | ((val & MASKBITS18 (n)) << (18 - p - n));
 862     return;
 863   }
 864 
 865 
 866 
 867 
 868 
 869 static inline void setmask (word36 * v, word36 mask)
     
 870   {
 871     * v |= mask;
 872   }
 873 
 874 
 875 
 876 
 877 
 878 static inline void clrmask (word36 * v, word36 mask)
     
 879   {
 880     * v &= ~mask;
 881   }
 882 
 883 char * strdupesc (const char * str);
 884 word36 extr36 (uint8 * bits, uint woffset);
 885 void put36 (word36 val, uint8 * bits, uint woffset);
 886 int extractASCII36FromBuffer (uint8 * bufp, t_mtrlnt tbc, uint * words_processed, word36 *wordp);
 887 int extractWord36FromBuffer (uint8 * bufp, t_mtrlnt tbc, uint * words_processed, word36 *wordp);
 888 int insertASCII36toBuffer (uint8 * bufp, t_mtrlnt tbc, uint * words_processed, word36 word);
 889 int insertWord36toBuffer (uint8 * bufp, t_mtrlnt tbc, uint * words_processed, word36 word);
 890 void print_int128 (int128 n, char * p);
 891 char * print_int128o (int128 n, char * p);
 892 word36 Add36b (word36 op1, word36 op2, word1 carryin, word18 flagsToSet, word18 * flags, bool * ovf);
 893 word36 Sub36b (word36 op1, word36 op2, word1 carryin, word18 flagsToSet, word18 * flags, bool * ovf);
 894 word18 Add18b (word18 op1, word18 op2, word1 carryin, word18 flagsToSet, word18 * flags, bool * ovf);
 895 word18 Sub18b (word18 op1, word18 op2, word1 carryin, word18 flagsToSet, word18 * flags, bool * ovf);
 896 word72 Add72b (word72 op1, word72 op2, word1 carryin, word18 flagsToSet, word18 * flags, bool * ovf);
 897 word72 Sub72b (word72 op1, word72 op2, word1 carryin, word18 flagsToSet, word18 * flags, bool * ovf);
 898 
 899 void timespec_diff(struct timespec *start, struct timespec *stop,
 900                    struct timespec *result);
 901 
 902 #if defined(THREADZ) || defined(LOCKLESS)
 903 void currentTR (word27 * trunits, bool * ovf);
 904 #endif